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