關鍵詞:《崇禎歷書》;《曉庵新法》;王錫闡;迭代運算;交食算法
中圖分類號: N09 文獻標識碼: A 文章編號: 1673-8462(2023)04-0020-10
明中后期,隨著官方歷法《大統歷》的頻繁出錯和歐洲天文學的傳入,朝野呼吁改歷之聲越來越高。至明末利用傳統天文學改歷的嘗試失敗后,在徐光啟(1562-1633)等人的推動下,崇禎帝(1611-1644)最終下令參照歐洲天文學修訂歷法,并完成了《崇禎歷書》這樣一部里程碑式的著作。但由于種種原因,該書直到明朝滅亡也沒有被正式頒行,反而在清朝統治者入主中原后很快得到官方認可,并經湯若望(Ad?am Schall von Bell,1592-1666)略加修訂更名為《西洋新法歷書》后被確立為官方歷法[1]。與此同時,許多中國民間學者開始積極學習西法,并指出了其中存在的一些不足之處,有的還提出了非常有價值的見解和改進方法。例如,楊作枚(約1680-1740)不僅發(fā)現了《崇禎歷書》月亮理論表與《月離歷指》不合的事實,而且提出了合理的改進方法,并對后來康熙末期所修的官方歷法《御制歷象考成》中的月亮理論產生了影響[2]。
作為最早一批學習西法的清初學者的典型代表,王錫闡(1628-1682)對《崇禎歷書》中的西法提出了不少獨到見解,并根據自己的理解提出了諸多修改意見,且大部分系其首創(chuàng)。這些內容基本都被記錄在王錫闡“兼采中西,去其疵類,參以己意,著歷法六篇”所得的《曉庵新法》中[3]。到目前為止,前人已研究過該書中日、月、五星的相關理論和算法,并對王錫闡基于西法所做的改動進行了討論[4-12]。然而對于最復雜的交食部分,雖然有學者曾討論過王錫闡確定日月食方位之法以及平實朔望的算法等,但其中絕大部分內容實際上尚未被討論,以及與西法做過比較[13-14]。一方面,可能是由于西法交食算法本身比較復雜;另一方面,可能也和《崇禎歷書》沒有明確給出交食算法,且在介紹日食算法時缺失了一些重要內容導致學界一直未能明晰《崇禎歷書》交食算法有關[15]。可喜的是,近來前人復原了《崇禎歷書》的日食算法,而月食算法亦可通過該文結合《崇禎歷書》得到[15]。但鑒于交食算法所涉及的內容頗多,且算法比較復雜,限于篇幅很難在一篇文章中全面深入地比較《崇禎歷書》與《曉庵新法》交食算法的所有內容。通過比較和分析,筆者發(fā)現,《崇禎歷書》的交食算法中使用了中國傳統歷法在交食推步中所沒有的迭代運算[16],即用變量的舊值遞推出新值來不斷逼近真實值的方法。而《曉庵新法》雖在交食算法中采用了西法的迭代運算,但并非完全照搬,且對迭代運算的應用也不限于前者的范圍。因此,筆者擬以迭代運算為切入點,先對《崇禎歷書》交食算法中的迭代運算進行介紹和分析,再將其與《曉庵新法》的相關內容進行深入比較,厘清王錫闡對西法迭代運算所做的改訂和推廣,并對相關的問題進行討論和分析,從而加深學界對《崇禎歷書》《曉庵新法》以及當時中國學者學習西法水平的理解。
1 《崇禎歷書》交食算法中的迭代運算
《崇禎歷書》交食算法大體上可分為以下7個模塊(圖1)。(1)平會(平朔望):根據歷元初始數據求得所求年月的平朔望時刻及相關參數,如平朔望時刻對應的太陽平黃經。(2)實會(實朔望):求得平朔望、實朔望的時間差,加于平朔望時刻,得到實朔望時刻。(3)視會(食甚):對于月食,將均時差加于實望這一平太陽時,得到真太陽時,即食甚時刻;若為日食,則還須求得視差對應的時差,進而得到食甚時刻。(4)食分:求得食分大小。(5)食甚前后(初虧、復圓等):求得初虧與食甚及食甚與復圓之間的時間差,加減于食甚,得到初虧和復圓時刻(若食既和生光發(fā)生,則還須依照求初虧和復圓的方法求得食既和生光時刻)。(6)交食圖:根據所得食分大小及相關參數繪制交食圖。(7)其他地方交食:根據所求地方的北極出地和與里差之元(北京)的經度差,得到所求地方的食分大小及食甚、初虧等時刻。[15]其中,實會模塊和日食的視會模塊使用了迭代運算,下面分別進行說明。
首先是實會模塊:由于《崇禎歷書》在該模塊日食和月食(即朔望)的算法相同,這里便以日食(朔)為例進行說明。設t0 為平朔時刻,此時日、月平黃經λˉs0 和λˉm0 相等。在該模塊中,《崇禎歷書》一共進行了兩次迭代近似[15]。
(1)第一次近似。
以上可以看出,王錫闡在日食食甚前后時刻模塊沒有像其他模塊一般,參照《崇禎歷書》以固定的迭代次數終止迭代,而是以達到某一條件來終止迭代,此二者都是現代迭代運算中的常用做法。事實上,雖然《崇禎歷書》在實際計算中僅迭代固定次數,但書中卻有以達到某一條件終止迭代的線索?!督皇硽v指》在日食視會模塊關于迭代有這樣的說明:“反覆推求,再三加減,吻與視會合者也。”[18]610 這句話雖然沒有很明確地給出日食視會模塊迭代的細節(jié),但卻有反復迭代,直到達到某一條件,使結果與視會吻合為止的含義。雖然研究表明,這并非《崇禎歷書》在視會模塊終止迭代的實際做法,但筆者猜想,王錫闡很有可能受此啟發(fā),最終選擇在日食食甚前后模塊中試行此種方法來終止迭代。不過,由于迭代運算的本質是不斷逼近最終的結果,所以王錫闡所給的日月次距與初虧、復圓行分完全相等的條件實則是一種比較理想的情況,大概率在迭代很多次的情況下都很難實現。事實上,王錫闡在實際推算過程中應該沒有嚴格按照其在算法中所給的條件,而是設置了一個閾值,即當日月次距與初虧、復圓行分的差值低于該閾值,也就是達到他預期的精度時,迭代便會終止。雖然王錫闡在“日食”一節(jié)中對此并未言明,但是他在之后的“凌犯”一節(jié)中仿照日食虧復的迭代運算求解掩食初終二限時,明確指出“行差不及十分刻之一者,即以損益其泛時得定時”,換言之,行差刻分小于十分之一刻時,便可終止迭代。由此推測,日食食甚前后時刻的閾值很有可能也采用了該數值。
4余論
作為最早學習西法的清初學者之一,王錫闡對《崇禎歷書》的研究可謂相當深入。他不僅意識到西法交食算法中迭代運算的存在,領悟到其不斷逼近真實值的作用,而且根據個人理解進行了改訂,并從《崇禎歷書》的簡單說明中獲得啟發(fā),提出不同于《崇禎歷書》交食算法所用的另一種終止迭代運算的方法。此外,王錫闡沒有將迭代運算限于交食算法中,而是將其推廣到諸多關于時間求解的算法中以期提高精度,如日出入分、昏明分等[3]462-463。
然而,王錫闡對西法交食算法中迭代運算的改定和推廣似乎并未得到當時清初主要歷算學家的支持與采納。他們或許會對西法交食算法的某個步驟或某個參數的求解提出一些修改意見,例如梅文鼎對《崇禎歷書》交食算法中均時差的求解進行了修改[26]。但就迭代運算而言,他們依舊如《崇禎歷書》一般只在實會和日食視會模塊按照相同算法進行迭代。之所以會如此,或許是因為迭代運算雖然能夠逼近真實值,但是隨著迭代次數的增加,精度可能提升不了多少,計算的負擔反倒會加重很多。例如,從西法的一貫做法以及現代天文學的角度來看,月食初虧至食甚距時和食甚至復圓距時的差別甚小,常常只有數秒到數十秒的差別①,因此被視作相等是十分合理的。但王錫闡為了過分追求所謂的精度,認為二者不能被視為相等,而且還應用了頗為復雜的迭代運算,實在是一種費時費力而收效甚微的做法。不過值得注意的是,雖然康熙末期官方編修的《御制歷象考成》亦如很多清初學者一般沒有采納王錫闡對西法迭代運算的改訂與推廣,但卻在對日食食甚前后時刻的求解中借鑒了王錫闡的思路。具體來說,《御制歷象考成》沒有如《崇禎歷書》一般以日食定朔前后一小時作為初虧和復圓近似值,而是借鑒王錫闡的思路,直接以食甚求得初虧和復圓的近似值。但《御制歷象考成》也沒有直接采納王錫闡的迭代做法,而是仿照《崇禎歷書》的月食初虧和復圓算法求得了日食初虧和復圓近似值[27]。
總的來說,王錫闡對《崇禎歷書》交食算法中迭代運算的認識、改訂和推廣反映了以他為代表的清初中國學者對西法的理解已經達到了較高的水平。雖然由于一些原因導致相關內容在當時沒有被廣泛接受和采納,但也確有其可借鑒之處,且對官方歷法——《御制歷象考成》產生了影響。
[責任編輯 黃祖賓 楊小平]