赫赫文王» 知識»赫赫金鑰»

律曆初階下|六:數學工具

古代曆法藉助了許多精妙的數學工具。幾何方面,授時曆發明了弧矢割圓術,一定程度上解決了球面幾何的問題。割圓術實際上是會圓術與勾股定理的結合。大衍求一術是解一次同餘式的核心模塊,調日法、演紀都會用到。日法是朔望月的分母,調出日法是造一部古代曆法的第一步,調日法則是唐宋疇人的不傳之祕,直到清代纔有系統的討論。招差術的雛形是劉焯發明的二次內插,到了宋元時期逐漸成熟,是授時曆發明三次內插的基石。
3440 字
作者 @柯棋瀚
版權 CC BY-NC-SA 4.0,非商業用途可隨意使用

幾何

會圓術

會圓術求法:半弦長 c = sqrt (r^2 - (r-h)^2)。尤其需要注意的是,會圓術的標準是週天度 365.25,直徑 121.75,卽「週三徑一」,這箇單位系是以 3 爲標準,而非圓周率 π鄧可卉授時曆中的弧矢割圓術再探自然科學史研究2007(2),所以在與三角函數對照時,需要進行參照系轉換,詳見源代碼。可以發現,弧-矢之間的轉換誤差大約在 1 度以內,而弦長誤差多達 5 度餘,這是單位系不同造成的。在弧矢割圓術中,以弧作爲入口,用會圓術轉換爲弦長,最後再以弧作爲出口,將弦長轉換爲弧長,單獨來看,弦長的誤差相當大,但是在同一箇單位系之中,這是自洽的。

傅宗隙積術和會圓術

弧矢割圓術

中國古代曆法頁 627中 AOE 是赤道,AOD 是黃道,BD 是已知的黃道度,求 CE 長卽赤道度、BC 長赤緯

授時用弧矢割圓術進行太陽黃赤轉換。授時黃赤轉換用幾何模型,此前的曆法都是經驗公式。由於會圓術的誤差,弧矢割圓術的誤差甚至比紀元的經驗公式還略差。弧矢割圓術是近似三角形、勾股定理、會圓術的組合,前兩者都是精確公式,只有會圓術是近似公式,那麼從理論上來講,如果用三角函數代替會圓術,就能得到和球面三角完全一致的結果,實際上也是這樣的。

授時只有黃度轉赤度的方法,我另外推導出了赤度轉黃度的方法:從 C 向上作垂線,與 OB 相較於點 T,T 超出了球體。從 P 向上作垂線,交 OD 於 Q。有了這兩條輔助線,就可以從赤轉黃了。

大衍術

大衍求一術

解一次同餘式的核心模塊,孫子定理、不定方程、調日法、演紀都需要求一術。輸入兩箇互質整數衍數、定母,求方程 a * x ≡ 1 (mod b) 的解 x

大衍總數術

卽解同餘式組,是秦九韶推廣之孫子定理。求解多組 x ≡ ri (mod mi) ,有解的充要條件是 gcd (mi, mi+1) | abs (ri - r i+1);依次輸入各組餘數 r、元數 m。孫子定理有解的充要條件:(m1,m2 | |r1-r2|) 1、定母i|元數i;2、定母互質;3、M=定母相乘=元數的最小公倍數。在孫子定理中,模數需兩兩互質,而秦九韶將不互質的元數變爲互質的定母,進而可以使用孫子定理求解。

連分數

給定一箇分數,求其連分數、各漸進連分數。非常適合與調日法參照。古代數學似乎沒有小數,都是分數運算,而計算機程序都是浮點運算,所以也可以用這箇工具將計算機計算出的結果轉換爲分數。

調日法

一箇朔望月是 29.53059 日有餘,在授時以前都用分數來表示小分。自何承天元嘉始,以 彊子26 / 彊母47 爲彊率,以 弱子9 / 弱母17 爲弱率,則 朔餘 / 日法 可表示爲 (26m+9n) / (49m+17n) ,m 卽陽率彊數,n 卽陰率弱數,彊弱率之間的任何數都可以作如上表示。調日法是南系、隋系、唐系、宋系的不傳之祕,直到乾嘉時期李銳纔闡明此法更多見 劉鈍 李銳、顧觀光調日法工作述評自然科學史研究1987(2);陳久金調日法研究1984(3);李繼閩關於調日法的數學原理,西北大學學報 1985(2)

無窮調日法是我自己的一點點小改進。彊弱率需滿足如下條件:,卽 彊子 * 弱母 - 彊母 * 弱子 = 1 。那麼推廣開來,26/47 和 9/17 只是一種可能性而已,適合求朔分 0.5305 附近的數,而任何滿足這箇條件的彊弱二率,都可以用來調制。只需要輸入分母卽曆法中的日法、彊率,便會自動根據大衍求一術求出弱率,再根據李銳公式求出分子卽曆法中的朔餘和彊弱數卽加權 ;也可以同時輸入分子和分母,根據累彊弱之數、李銳、顧觀光-陳久金三種方法各自生成彊弱數。這推廣開來的調日法就是無窮調日法。輸入框中默認是何承天彊率。不過李銳公式有一箇限制,必須滿足 弱數 < 彊母,例如玄始曆 47251 / 89052 ,李銳公式解得 47252 = 26×1816 + 9×4,累強弱、顧-陳公式解得 47251 = 26×1799 + 9×53,卽 47251 / 89052 和 47252 / 89052 都滿足調日法,但李銳公式求不出前者。

明天曆作者周琮論調日法曰:

自漢太初至于今,冬至差十日,如劉歆三統復強於古,故先儒謂之最疏。後漢劉洪考驗四分,於天不合,乃減朔餘,苟合時用。自是已降,率意加減,以造日法。宋世何承天更以四十九分之二十六爲強率,十七分之九爲弱率,於強弱之際以求日法。承天日法七百五十二,得一十五強,一弱。自後治曆者,莫不因承天法,累強弱之數,皆不悟日月有自然合會之數。

今稍悟其失,定新曆以三萬九千爲日法,六百二十四萬爲度母,九千五百爲斗分,二萬六百九十三爲朔餘,可以上𥡴於古,下驗於今,反覆推求,若應繩準。又以二百三十萬一千爲月行之餘月行十三度之餘,以一百六十萬四百四十七爲日行之餘日行周天之餘。乃會日月之行,以盈不足平之,幷盈不足,是爲一朔之法日法也,名元法。今乃以大月乘不足之數,以小月乘盈行之分,平而幷之,是爲一朔之實周天分也。以法約實,得日月相會之數,皆以等數約之,悉得今有之數盈爲朔虛,不足爲朔餘。又二法相乘爲本母,各母互乘,以減周天,餘則歲差生焉,亦以等數約之,卽得歲差、度母、周天實用之數。此之一法,理極幽眇,所謂反覆相求,潛遁相通,數有冥符,法有偶會,古曆家皆所未達以等數約之,得三萬九千爲元法,九千五百爲斗分,二萬六百九十三爲朔餘,六百二十四萬爲日度母,二十二億七千九百二十萬四百四十七爲周天分,八萬四百四十七爲歲差宋志七

以下是各曆朔餘、日法:

[
    [43, 81], // 三統 大於強率
    [499, 940], // 四分 大於強率
    [773, 1457], // 乾象
    [6409, 12079], // 黃初
    [2419, 4559], // 景初
    [18703, 35250], // 正曆 李銳求不出
    [3217, 6063], // 三紀
    [47251, 89052], // 玄始 李銳求不出
    [399, 752], // 元嘉
    [2090, 3939], // 大明
    [815, 1536], // 大同
    [39769, 74952], // 正光 李銳求不出
    [110647, 208530], // 興和 李銳求不出
    [607, 1144], // 劉孝孫大業
    [155272, 292635], // 天保 李銳求不出
    [153961, 290160], // 天和 李銳求不出
    [28422, 53563], // 大象 大於強率
    [96529, 181920], // 開皇 大於強率
    [659, 1242], // 皇極
    [6901, 13006], // 戊寅
    [53.06, 100], // 神龍 累強弱求不出 李銳說不合,我求得出<n>因爲乘了100</n>
    [711, 1340], // 麟德五紀
    [1613, 3040], // 大衍
    [581, 1095], // 正元
    [4457, 8400], // 宣明
    [7163, 13500], // 崇玄
    [3820.28, 7200], // 欽天 累強弱求不出 李銳求不出
    [5307, 10002], // 應天 累強弱求不出
    [1560, 2940], // 乾元 累強弱求不出
    [5359, 10100], // 儀天
    [5619, 10590], // 崇天 累強弱求不出
    [20693, 39000], // 明天
    [12575, 23700], // 奉元 累強弱求不出
    [6383, 12030], // 觀天
    [14899, 28080], // 占天
    [3868, 7290], // 紀元 累強弱求不出。陳久金:27076/51030
    [3677, 6930], // 統元
    [15917.76, 30000], // 乾道 累強弱求不出 李銳求不出
    [2992.56, 5640], // 淳熙 累強弱求不出 李銳求不出
    [20534, 38700], // 會元 累強弱求不出
    [6368, 12000], // 統天 大於強率
    [8967, 16900], // 開禧
    [1873, 3530], // 淳祐
    [5168, 9740], // 會天 累強弱求不出
    [3937, 7420], // 成天
    [2775, 5230], // 大明 累強弱求不出
    [10978, 20690], // 乙未 累強弱求不出
    [5305.93, 10000], // 授時 累強弱求不出 李銳求不出
]

累強弱法剛寫出來的時候把各曆都算了一遍,上面是當時的情況,發現欽天以後大量朔餘用累強弱之數法算不出來。後來寫了分解公因數程序,突然發現這些求不出來的全都是可以通分的,通分之後就都求出來了!看來宋曆的 朔餘 / 日法 還照顧了其他因素。而李銳公式求不出的,我通分之後依然求不出。

  • 三統遠超強率 26/49,但另有方法。用連分數逼近,求得各漸進分數: (1) 0/1 (2) 1/1 (3) 1/2 (4) 8/15 (5) 9/17 (6) 17/32 (7) 43/81,其中 17/32 大於 43/81,可以作爲強率,於是弱率爲 9/17。算調日法,得 43 = 17×2 + 9×1,81 = 32×2 + 17×1,2 彊 1 弱。可是這樣就算調出來了也毫無意義,因爲三統是以律起曆用三分損益率構造日法,當然跟調日法毫無關係。
  • 同理,四分曆各漸進分數: (1) 0/1 (2) 1/1 (3) 1/2 (4) 8/15 (5) 9/17 (6) 17/32 (7) 26/49 (8) 43/81 (9) 499/940,因此可以用三統 43/81 作爲強率,弱率得 26/49,得 11 強 1 弱。四分曆也可以調出來,同樣,毫無意義。
  • 大象曆也超過了強率。劉洪濤認爲,大象是以四分曆499/940 爲強率,以何承天 9/17 爲弱率,得 (499*1107 + 9*11257)/(940*1107 + 17* 11257) = 28422/53563古代曆法計算法頁 617但這兩箇強弱率不能用大衍求一術得到。
  • 統天超過強率,按照調日法求出來是6367,多出來的 1 是留給朔實消長的空間。
  • 開禧以弱換強:16900=169*49+507*17=339*49+17*17=(169+17*10)*49+(507-49*10)*17
  • 乾道用李銳公式算出來的是以弱換強之後的,但數學上我不太懂,以弱換強的話,日法都是一樣的,爲何朔餘就不一樣了?

垛積術

「垛積」卽等差級數求和。

隙積術 芻童垛

「芻童」卽長方稜臺。上有寬 a 箇、長 b 箇,下有寬 c 箇、長 d 箇,共 n 層,每層長寬各多 1 箇。

四角垛 方垛

卽自然數平方級數求和。1+4+9+...+n^2 = 1/3 n (n+1) (n+1/2)=1/6 n (n+1) (2n+1)

三角垛 落一形垛

源於七乘方圖。p = 2 時,1+3+6+10+...+n (n+1) /2 = 1/6 n (n+1) (n+2)。通項公式:1/(p+1)! n (n+1) (n+2) ... (n+p)

招差術

一箇 p 次多項式可表爲一箇 p 次內插公式;以 p 次多項式爲通項的 p 階等差數列的和是一箇 p+1 次多項式。招差術的實質是將高階等差數列的通項多項式表爲內插公式。招差的差系由給定的數列求得,內插的差系由數列的和函數求得。 李兆華、程貞一朱世傑招差術探原自然科學史研究2000(1)。招差術與牛頓內插等價。

Subscribe

點此訂閱網站更新提示。如果登不上,可以用 問卷星 訂閱

Membership

瞭解「文王在天」會員計畫:終身會員,盡享六大權益

刷微博

免費郵件通訊《我來幫你刷微博》主頁

Donate

捐助本站 ✌️