《崇天历》的日食预报水平

2018-06-19 02:10滕艳辉王鹏云
咸阳师范学院学报 2018年3期
关键词:计算精度日食历法

滕艳辉,王鹏云

(咸阳师范学院 数学与信息科学学院,陕西 咸阳 712000)

《崇天历》是北宋中期由楚衍等天文学家编制的一部历法,该历在北宋仁宗朝行用(1024—1064),后又在神宗时行用一段时间(1068—1074),总共行用达48年,是宋代行用时间最长的官方历法。[1]过去,已有对《崇天历》朔闰算法和精度的研究[2-4],本文将对其日食推步和计算精度问题展开讨论。

1 《崇天历》的日食推步过程

《崇天历》的内容记载在《宋史·律历志》中。[5]2601-2607关于《崇天历》的交食推算算法的解读,已经有一些相关研究[6-12],本文不再重述。但为了更方便,我们还是将《崇天历》的日食计算方法整理成更为清晰紧凑和实用性更强的几组公式。我们分别给出日食食甚时刻,食分大小和起讫时刻(初亏和复圆)的计算公式。①由于篇幅所限,本文只讨论《崇天历》的日食计算,而不解读其术文以及如何将术文表示成现代计算公式,因此对《崇天历》的原术文不再重复给出,对算法术文的详细解读可参考文献[6-12]。

设历法枢法为A,交点月j=J A,朔望月u=U A,回归年t=T A,近点月g=G A,J、U、T和G分别表示交点月、朔望月、回归年和近点月的日分数(交终分、朔实、岁周和转周分),所求年(如n年)到上元的积年为Nn,则所求年冬至后第m个朔的日食食甚时刻Tre(单位是日)的算法如式(1)所示[6,7,13]

其中r sm表示所求年天正闰日及余,T pm为经朔时刻,r s和r m分别表示本次合朔的入气日和入转日,εs和εm则是它们不足一日的部分,即入气小余和入转小余。k则是所入气的序号,并规定,k=-1时,入大雪气,k=-2时,入小雪气。ys、φs和Δs分别是经朔所入气日的朏朒积、损益率和太阳改正数,ym、φm和Δm分别是经朔所入转日的朏朒积、损益率和月亮改正数。Trm为定朔时刻,ε是定朔小余,Δh为时差修正。[7]需要说明的是,所入转某日的朏朒积和损益率可以直接查月离表得到,而所入气日的朏朒积和损益率则要使用日躔表中每一气的朏朒积和损益率通过二次插值计算得到。

《崇天历》推算日食食分的算法如式(2)所示[6,7,13]

其中r pj表示经朔入交泛日,ω为午前(后)分;2a表示二至限,ζ为消息定数,d为半昼分,Δq和Δk分别表示气差和刻差;交率m0=141和交数n0=1 796是与交食周期有关的数值,r rj是视月亮到黄白交点的距离;P为交前后分,L1和L2分别为日食阳历食限和阴历食限,M为食分;其余的变量意义与式(1)中的相同。

日食的初亏时刻Tck和复圆时刻Tfy可用式(3)求得

其中F为初亏到视食甚时间的日分数,即“定用分”,它可以表示为食分的函数。vm是月平行分1 337,而vrm为入转定分,是合朔时月亮的实际速度,该数值可根据日食所在日入转的情况直接查月离表得到。

公式(1-3)中,A、j、u、t、g、Nn、L1、L2、a、vm、m0和n0是历法给出的天文常数,vrm、ys、φs、Δs、ym、φm和Δm可以通过历法给出的表格查得,n和m是历法使用者给出的年份和月份,其余所有变量都是中间的计算结果。这样,只需给出朔望月、回归年、交点月和阴阳历食限等基本天文常数,结合历法的日躔表和月离表,则任意给定年份日食的食甚时刻和食分大小用《崇天历》均可以求出。

2 《崇天历》的日食计算精度

《崇天历》的日食算法公式化特征十分明显,而且其推算也满足现代计算机中算法的特征,因此,《崇天历》的日食推步很容易实现计算机的算法化和程序化。古代历法计算中涉及的天文常数往往很大,加大了历法推步的计算量,而计算机可以快速有效的解决这个问题。这样,我们完全依据古代历法的基本常数和推算过程,编写计算机程序,可以准确复原古代历法的当时推算情况。我们使用Visual Basic 9.0作为程序设计语言,编写计算机程序,利用程序可以恢复出历法推算任何一次日食的食甚时刻,食分大小以及食延情况。

接下来考察《崇天历》的日食计算精度。我们主要看历法推算日食的食甚时刻及食分大小与真实天象的差距。由于一个交食周期大约为19年,我们选择以《崇天历》行用初年为准,向前和向后各推95年,计算这190年间(930—1119)的所有可见日食,得到每次日食的食甚时刻和食分大小。《崇天历》制历地点在阳城,所有的食甚时刻与食分值都以开封的为准。这样,本文就采用《三千五百年历日天象》中的“十三都日食表”开封的日食结果作为每次日食的真实值。[14]1024-1029我们选取比较结果差值的绝对值平均值、最大值等几个指标来评价《崇天历》日食精度。①现代值采用北京时间,历法值使用开封的地方时,北京与开封的经度差5.65°,时间上是22.6分钟,在计算中我们已将历法值开封时间转换为北京时间。

使用《崇天历》能够计算这190年间开封地区日食达96次,而实际开封地区在此期间共有可见日食78次。《崇天历》对这78次日食也不是全能计算出来,有8次可见日食,使用《崇天历》不能计算。这种情况一般称为“不当食而食”。开封地区实际不曾发生日食而《崇天历》计算有日食的共有26次,这种情况一般称为“当食不食”。这26次里有8次是中国境内确实发生日食,但开封地区不可见或食分为0。

如果把“当食不食”的真实日食食分和“不当食而食”的历法推算食分都看称0分,食分的历法值与真实值可比较的个数是104个。所有104个比较中,历法推算失误的个数应该是34个,比例将近三分之一。食分误差最大值是5.6分,出现在997年6月8日,本次日食食甚时刻在5时7分,日食带食日出分数是2.8分,而《崇天历》却推算带食日出分数是8.4分,食甚5时49分。所有推算,食分误差的绝对值平均值是1.6分。104次比较中,误差小于2分的有69次,约占三分之二,误差小于1分的35次,仅占三分之一,而误差大于3分的也有13次,占八分之一。

《明天历》的制定者周琮指出“校日月交食,若一分二刻以下为亲,二分四刻以下为近,三分五刻以上为远”。[5]2688如果按这个标准看,《崇天历》的食分平均误差达到了“近”的水平,整体上仅有三分之二达到近的水平,而有超过百分之十的推算不合标准。当我们考察那些误差较大的推算时,发现大部分的食甚是在日出日落前后,这时视差对食分的影响较大,《崇天历》的视差算法还存在一定的缺陷。所有误差中,正值占大部分,即历法推算的食分偏大,这可能与《崇天历》选取的必偏食限偏小有关系。

对于“当食不食”和“不当食而食”的食甚,我们没有办法比较其食甚的推算。因此,我们去除这34个推算失误的结果,比较剩余70个食甚的结果,得到《崇天历》日食食甚的推算精度。70次比较中,食甚最大误差为1.808 5 h,超过100 min,出现在992年3月7日,开封日食7.6分,食甚17时44分,《崇天历》算食9.5分,食甚时刻15时33分;食甚误差小于1 h的57次,超过80%;误差小于0.5 h的有36次,刚好过半;误差大于1.25 h(相当于5刻)的有8次,超过10%。整体上,70次的误差绝对值平均值是0.58 h,合34.8 min。按照周琮的标准,《崇天历》日食食甚推算总体上也达到了“近”的水平,但仍有10%的推算属于“远”的情况。《崇天历》大部分食甚误差都是正值,说明其食甚推算后天。《崇天历》每次日食推算的食甚误差和食分误差情况如图1所示,图中食甚误差的横坐标是公元纪年表示的时间。

无论是食分误差还是食甚误差,都有超过10%的推算不能达到当时的标准。于是,在《崇天历》行用期间,经常出现推算交食不验。事实上,《崇天历》的精度问题在其新造出之时便已提出。《宋史》载,“是年五月丁亥朔,日食不效,算食二分半,候之不食”。[5]2626这次合朔是1024年6月9日,本次朔中国境内并没有可见日食。但使用《崇天历》推算结果是有日食,食分大小1.69分,初亏时刻9时58分,食甚时刻10时37分。据此,可知历法当食一分半,可能史载误将“一”字错写为“二”字缘故。《宋史》又载“皇祐四年十一月日食,(二)历不效”。[5]2877这是1152年11月24日的日食,开封地区实际食甚时刻14时14分,最大食分1分。《崇天历》推算本次日食食甚时刻12时55分,最大食分4.39分。这个误差是相当大的,因此“历不效”是客观的。周琮在评价《崇天历》时也指出,“旧历气节加时,后天半日;五星之行差半次;日食之候差十刻”。[5]263《3崇天历》行用期间食甚的最大误差为1.35 h(1046年4月9日日食),约合5.6刻,而历法的初亏时间又与食分相关,一旦食分误差较大,初亏误差出现10刻也不是没有可能的。虽然周琮可能略夸大了《崇天历》的推算误差,但历法的最大误差足以造成历法不能使用而改历的事实。

图1 《崇天历》日食计算精度图

3 《崇天历》的时差算法精度

《崇天历》日食算法中,视差对食甚时刻进行修正的算法是其时差算法,因此时差算法的精度直接影响到其食甚时刻计算精度。现代天文学的视差修正食甚与《崇天历》的时差意义有所不同,不能进行对应,因此,我们不方便通过比较现代天文学的视差修正与《崇天历》的时差,得到时差的精度。然而,《崇天历》的食甚仅是在定朔时刻上加入时差,这样,食甚误差就是定朔误差加上时差误差。[15]我们已经得到了食甚误差,如果能够得到定朔误差,两者相减就能反推出时差误差。我们可以采用文献[16]中的方法,重新计算每次日食发生时的定朔值,得到定朔误差,最后得到时差误差。

在日食食甚的计算中是要进行定朔计算的,因此我们的程序方便得到定朔的历法值,定朔的真实值取自《三千五百年历日天象》“合朔满月表”中的数值。[14]744-769经过计算和统计,我们得到《崇天历》时差的精度情况,列于表1中。

《崇天历》定朔误差的平均值接近于0,但其时差误差平均值是正值,加在定朔上面,导致食甚误差为正,推算后天。时差误差绝对值均值为0.551 7 h,与食甚误差相当。其定朔误差均值仅为0.349 4 h,合21 min,高于《崇天历》推算定朔的一般水平[3]。观察时差的标准差和最大值,都比定朔的相应值要大。这样,我们得到结论,《崇天历》在有日食的朔日推算定朔的水平比一般情况要高;但其时差修正精度有时高,有时低,波动较大,整体推算偏低,于是其食甚时刻的精度呈现与时差精度相似的趋势;定朔推算误差在整个食甚推算中是相对稳定的,但也是主要误差,而时差的误差是不稳定的因素,有可能使得某次推算出现失误,从整体上降低推算的精度。

《纪元历》是宋代影响最大的历法,其日食计算精度在文献[16]已经给出,我们将《纪元历》与《崇天历》的日食精度进行比较。①实际上,关于《崇天历》前面的《仪天历》和后面的《明天历》的日食客观精度的研究至今仍极少见到,我们只能将其与《纪元历》相比较。《纪元历》的时差精度在30 min以上,与之相比,《崇天历》的时差精度并没有逊色很多。《纪元历》日食定朔精度是0.3 h,《崇天历》也达到了0.34 h,相差仅为3 min,但《纪元历》的食甚精度0.4 h,相比《崇天历》的0.58 h,高了10 min。原因就在于《纪元历》时差修正优化的更好一些,每一次推算都不会出现太大的误差,时差误差标准差仅为0.3477,两部历法精度高低的原因就很明显了。

《崇天历》日食食分的计算要使用距午定分和时差两个量,这两个量都是食甚计算的结果。因此,食甚的计算精度直接影响到食分的精度,这也就是一般情况下食甚的精度要高于食分的精度的原因所在。

表1 《崇天历》定朔、时差及食甚误差统计 误差单位:h

4 结语

我们根据《崇天历》的步气朔、步日躔、步月离和步交会术文,给出了它的完整的日食食甚时刻、食分大小和日食起讫的推算公式。我们利用公式化的算法,将《崇天历》的日食推步过程编写为计算机程序,这个程序可以计算任意给定时间的交食情况。

我们计算出自930至1119年这190年间开封地区的所有日食,并与交食的真实值(用现代天文方法计算并加上地球自转参数的理论值)作比较,得到《崇天历》推算日食的精度。《崇天历》推算日食失误的比例将近三分之一;食分误差最大值是5.6分,误差绝对值平均值是1.6分;食分误差小于2分的占三分之二,大于3分的占八分之一。《崇天历》日食食甚推算误差绝对值平均值是0.58 h,合34.8 min;最大误差为1.808 5 h,超过100 min;食甚误差小于1 h超过80%,大于1.25 h(相当于5刻)超过10%。日食推算整体上食甚精度高于食分精度,有超过10%的推算达不到当时的精度要求。

我们使用回推的方法考察了《崇天历》的时差算法的精度。时差误差绝对值均值为0.551 7 h,与食甚误差相当。我们指出《崇天历》时差算法对食甚的精度造成不稳定性的影响,也是食甚误差的主要来源。《崇天历》的日食计算水平仍不是很理想,还有待于提高。

[1]滕艳辉,袁学义.宋代历法沿革[J].咸阳师范学院学报,2012,27(4):78-86.

[2]滕艳辉,王鹏云.《纪元历》等8部宋代历法的定朔推步及精度分析[J].中国科技史杂志,2009,30(1):55-64.

[3]滕艳辉.宋代定朔计算精度分析[J].咸阳师范学院学报,2014,29(4):59-67.

[4]滕艳辉,马俊青.古代历法气朔推算记录的复原[J].咸阳师范学院学报,2018,33(2):8-12.

[5]脱脱,帖睦尔达世,贺惟一,等.宋史·律历志[M]//中华书局编辑部.历代天文等志汇编:第8册.北京:中华书局,1976.

[6]曲安京.中国数理天文学[M].北京:科学出版社,2008:439,483-485,504-505.

[7]王应伟.中国古历通解[M].沈阳:辽宁教育出版社,1998:592-598.

[8]陈美东.古历新探[M].沈阳:辽宁教育出版社,1995:368.

[9]曲安京.中国古代日食食差算法的原理[J].自然科学史研究,2002,21(2):97-114.

[10]曲安京.中国古代日食食限与食分算法[J].中国科技史杂志,2008,29(4):347-357.

[11]唐泉,曲安京.中国古代的视差理论——以日食食差算法为中心的考察[J].自然科学史研究,2007,26(2):125-154.

[12]滕艳辉.宋代的日食食限算法[J].科学技术哲学研究,2014,31(5):78-83.

[13]薄树人.薄树人文集[M].合肥:中国科学技术大学出版社,2003:369-447.

[14]张培瑜.三千五百年历日天象[M].郑州:河南教育出版社,1990.

[15]滕艳辉.宋代的日食时差算法[J].内蒙古师范大学学报(自然科学汉文版),2014,43(4):499-505.

[16]滕艳辉,唐泉.《纪元历》日食算法及精度分析[J].自然科学史研究,2013,32(2):140-155.

猜你喜欢
计算精度日食历法
从走马楼西汉简歧异干支谈汉初历法混用问题
发明新历法
巧观日食
基于SHIPFLOW软件的某集装箱船的阻力计算分析
一日食,四季过
壮美的日食
历史上最长的一年
EasyNight日食小题板
钢箱计算失效应变的冲击试验
《回回历法》交食精度之分析