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

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

幾何

會圓術

會圓術求法:半弦長 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 都滿足調日法,但李銳公式求不出前者。

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

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

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

以下是各曆朔餘、日法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
[
    [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)。招差術與牛頓內插等價。

參考資料

這個網站是古代曆法研究者的共同智慧結晶,在此表示感謝太多了,我就只列作者和篇名

天學章

  1. 點擊下載鄭慧生認星識曆——古代天文曆法初步河南大學出版社,2006 秊星圖我按歲星的旋轉順序排的。注意:星圖是左東右西。
  2. 徐振濤蔣窈窕五行聚合與夏商周秊代硏究北亰:世界圖書出版公司,2006 秊可作爲入門導讀。不過這麼水的書都能筭斷代工程……
  3. 古代曆法 的書
  4. 敎材自然地理學
  5. 知乎。維基百科。

古籍

  • 各史曆志
  • 開元占經
  • 寶祐四年會天曆
  • 馮立昇主編疇人傳合編校注,中州古籍,2012
  • 鄧文寬敦煌天文曆法文獻輯校
  • 梅文鼎梅氏叢書輯要
  • 李銳李氏遺書
  • 李亮等編海外珍稀中國科學技術典籍集成,2010

專書、論文集

  • 劉洪濤古代曆法計算法
  • 張培瑜等中國古代曆法
  • 陳美東古曆新探
  • 陳美東中國科學技術史稿頁 106
  • 曲安京中國曆法與數學
  • 曲安京中國數理天文學
  • 秦九韶與數書九章

古曆的計算機模擬

目前發現了三篇博士論文,也就是說我夠三個博士了⋯⋯⋯⋯

  • 邢钢 中国早期历法的计算机模拟分析与综合研究,中國科學技術大學博士論文,2005 年
  • 李亮明代历法的计算机模拟分析与综合研究,中國科學技術大學博士論文,2011 年
  • 滕艳辉宋代朔闰与交食研究,西北大學博士論文,2012 年

論文

躔離氣朔

  • 陈美东:日躔表之研究
  • 陈美东:月离表初探
  • 徐传胜:乾象历月离表数理分析
  • 尚晓清:大衍历定朔算法及程序说明
  • 滕艳辉:纪元历定朔算法模型及分析
  • 滕艳辉等:纪元历等8部宋代历法的定朔推步及精度分析
  • 马莉萍:中国古代历法中合朔时的太阳位置
  • 王荣彬:中国古代历法的中心差算式之造术原理
  • 李勇:中国古历定朔推步综述
  • 李勇:中国古历经朔数据的恢复及应用
  • 滕艳辉:宋代历法中的置闰算法
  • 李勇:明嘉靖六年大统历历书的气朔推步精度
  • 滕艳辉:统天历的岁实消长与气朔算法分析
  • 刘娅娅:朱载堉对授时历岁余计算的检验与修正
  • 张祺:梅文鼎和江永的回归年消长法

天文計算

  • 陈美东:中国古代有关历表及其算法的公式化
  • 王锦瑞:明天历岁差与上元积年
  • 陈美东:中国古代太阳视赤纬计算法
  • 江晓原:中国古代对太阳位置的测定和推算
  • 陈美东:中国古代昼夜漏刻长度的计算法
  • 纪志刚:麟德历晷影计算方法研究
  • 陈美东:中国古代月亮极黄纬计算法
  • 陈久金:九道术解
  • 周靖:月行九道考
  • 曲安京:授时历的白赤道坐标变换法

交食

  • 刘金沂:隋唐历法中入交定日术的几何解释
  • 滕艳辉:戊寅元历的日月食推算方法
  • 刘金沂:麟德历交食计算法
  • 滕艳辉:崇天历的日食推步术
  • 袁敏:明天历日食算法分析
  • 滕艳辉:纪元历日食算法及精度分析
  • 李勇:授时历交食推步研究
  • 唐泉:授时历回回历法中的日食时差算法
  • 李勇:授時曆與仲康日食推算
  • 李勇:中国元明时期交食推步的比较研究
  • 陈美东:中国古代的月食食限及食分计算法
  • 曲安京:中国古代日食食限与食分算法
  • 滕艳辉:宋代的日食食限算法
  • 曲安京:中国古代的日食时差算法
  • 唐泉:中国古代的日食食分算法
  • 曲安京:中国古代的月食时差算法
  • 李鉴澄:中国历代日月交食周期的研究
  • 马莉萍:中国古代交食的宿度记录及其算法

曆法數學

  • 陈久金:调日法研究
  • 李继闵:关于调日法的数学原理
  • 刘钝:李锐顾观光调日法工作述评
  • 李继闵:再评清代学者的调日法研究
  • 曲安京:中国古代的二次求根公式与反函数
  • 曲安京:唐宋历法演纪上元实例及算法分析
  • 曲安京:东汉到刘宋时期历法上元积年计算
  • 王翼勋:开禧历上元积年的计算
  • 王翼勋:秦九韶演纪积年法初探
  • 王锦瑞:明天历天文常数系统中的缺陷解析

招差術

  • 李兆华:朱世杰招差术探原
  • 李兆华:朱世杰的垛积术与四次内插法
  • 李兆华:平立定三差详说的一点注记
  • 曲安京:皇极历中的漏刻差分表
  • 刘钝:皇极历中等间距二次插值方法术文释义及其物理意义
  • 武家璧:大衍历日躔表的数学结构及其内插法
  • 曲安京:大衍历晷影差分表的重构
  • 王荣彬:中国古代历法三次差插值法的造术原理
  • 陈美东:崇玄仪天崇天三历晷长计算法及三次差内插法的应用

普通曆法

  • 刘次沅:史记历术甲子篇探讨
  • 武家璧:包山楚简的岁首占及其历朔断代
  • 武家璧:简论楚《颛顼历》
  • 严敦杰:补北齐书历志
  • 黃一農:中國史曆表朔閏訂正舉隅—以唐麟德曆行用時期爲例
  • 劉金沂:李淳風的曆象志和乙巳元曆
  • 钮卫星:符天历历元问题再研究
  • 陈久金:符天历研究
  • 孔庆典:七元甲子术研究
  • 陈久金:回人马依泽对宋初天文学的贡献
  • 邱靖嘉:遼史曆象志溯源——兼評晚清以來傳統曆譜的系統性缺陷
  • 邱靖嘉:辽史所见祖冲之大明历的文献价值发覆
  • 郭津嵩:撒馬爾干的中國曆法——耶律楚材的西征庚午元曆及其里差法考辨

具注曆

  • 李勇:中国古历中的步发敛
  • 朱双双:中国古历没灭术研究
  • 何啓龍:授時曆具注曆日原貌考
  • 金身佳:敦煌写本宅经P.3594九方色图试释
  • 宁宇:敦煌写本时日宜忌文书之思想主题探赜
  • 邓文宽:敦煌古历丛识
  • 邓文宽:敦煌文献S2620号唐年神方位图试释
  • 華瀾:敦煌曆日探研
  • 邓文宽:跋吐鲁番文书中的两件唐历
  • 何伟凤:黑水城出土元代历日研究

數學

  • 甘向阳:九章算术刘徽注中的算法分析工作与算法分析思想
  • 陈巍:五经算术的知识谱系初探
  • 沈康身:数书九章大衍类算题中的数论命题
  • 汪晓勤:数书九章大衍类算题的若干注记
  • 一次同余式组的程序求解
  • 陈维海:用BASIC程序实现求高次方程实根的斯特姆秦九韶方法
  • 朱一文:秦九韶「历家虽用用而不知」解
  • 侯钢:秦九韶大衍总数术中问数化定数算法解析
  • 王翼勋:从大衍术到大衍求一术
  • 段耀勇:刘徽开方与增乘开方法
  • 梅荣照:贾宪的增乘开方法_高次方程数值解的关键一步
  • 李兆华:增乘开方法与贾宪三角形
  • 傅宗:隙积术和会圆术——沈括梦溪笔谈评注一则

現代天文

  • 李文:地球椭球模型中太阳位置计算的改进
  • 张富、张丽娟、邱本志:一种计算太阳低仰角蒙气差的有理函数逼近方法
  • 丁豔、袁隆基、趙培濤、仝軍令:太陽視日軌跡跟蹤算法研究