赵永恒
(中国科学院国家天文台,北京100012)
摘要:本文根据《周髀算经》中的盖天模型,用天文学方法对其实测数据进行了拟合,确定《周髀算经》的观测年代为公元前511年左右。同时,还对西汉末年、西周初年和夏初的二至晷长数据进行了拟合,得出了对应的观测年代和可能的观测地点,与古代文献记载的“周公卜洛”和“禹都阳城”是相符合的。
关键词:《周髀算经》、年代、阳城、地中、盖天说
在中国古代,人们使用圭表来确定年的长度,并用其确定夏至和冬至,因为在一年中,每天中午的日影长度在夏至时最短、在冬至时最长。因此,在古代文献中,有很多夏至和冬至的日影长度的记录。特别是在《周髀算经》中,盖天模型就是建立在圭表测量的基础之上的。
本文以《周髀算经》的实测数据和盖天模型为基础,使用天文学方法对圭表观测数据进行拟合,从而给出这些数据的观测年代和观测地点的地理纬度,并可以发现古代文献中的“阳城”或“地中”与盖天模型有非常紧密的联系。
一、《周髀算经》数据的观测年代
《周髀算经》是中国现存的最古老的天文算法书,一般认为该书由不同时代的内容所组成的。李俨认为该书“约为战国前作品”[1],钱宝琮认为它是后汉时期的一部官书[2]。
1、冬至和夏至的日影长度
在《周髀算经》中记载了冬至、夏至日测量的日影长度,即晷长。卷上之二载有:“周髀长八尺,夏至之日晷长一尺六寸。”卷上之三称:“故冬至日晷长丈三尺五寸,夏至日晷长尺六寸。”
这说的是在平地上立八尺之表(髀),表的高度为:Lb=8。在夏至日,中午的太阳把表的影子投到地上,其影长为1.6尺,记为:Lx=1.6;冬至日太阳的影长为13.5尺,记为Ld=13.5。
冬至、夏至的日影长度与黄赤交角ε和观测地点的地理纬度φ存在如下关系:
(1)
(2)
更精确的计算还需要考虑太阳的半径、蒙气差(大气折射)等的影响。
2、北极璇玑的地平高度
《周髀算经》卷上之二称:“今立表高八尺,以望极,其句一丈三寸。”正如陈遵妫所指出的,这里的“极”是北极星[3]。江晓原对《周髀算经》中的“北极”、“北极枢”和“璇玑”的概念进行了区分[4]:“北极”是北极星,北极星的周日运动在天空中所划出的圆就是“璇玑”,圆心就是“北极枢”。既然“璇玑”是由北极星的周日运动所划出的圆,则“璇玑”的角半径Δ与北极星的赤纬之间存在关系:Δ=90o-δ。
由于北极星存在周日运动,其地平高度随时间而变化。依据《周髀算经》中的盖天模型,这个晷影长度是对应着“璇玑”的最南点,相当于“北极南游”时的情形。这样,《周髀》所说的“以望极,其勾一丈三寸”,相当于“璇玑”最南点的晷影长度,记为:Lj=10.3。该长度与“璇玑”的角半径和观测地点的地理纬度φ的关系为:
(3)
3、北极星的确定
《周髀算经》中的“北极”究竟是哪一颗星?古今论者各异,陈遵妫认为是帝星(小熊座β)[3]。
为了确定北极星,我们选取了依巴谷星表[5]中亮于5.7等的恒星,对其进行自行和岁差的改正(岁差改正使用IAU的P03模型[6]),由此可给出这些恒星的赤纬δ随年代的变化(图1)。
从图上可以看出,由于岁差的影响,每颗恒星在不同的年代有不同的赤纬,即离北天极的距离不同。这样,在不同的年代里,人们有可能会用不同的恒星来做北极星(表1)。
图1:恒星的赤纬随年代的变化,从公元400年到公元前2200年。横坐标是年代,以年为单位,负号表示公元前;纵坐标为赤纬,以度为单位。图中曲线旁的数字是恒星的HD星表编号。
表1:可能作为北极星的恒星
恒星名称 |
星等 |
作为北极星的可能年代 |
HD112028 |
5.38 |
东汉 |
HD106112 |
5.14 |
春秋至东汉 |
HD107193 |
5.47 |
西周至西汉 |
HD118904 |
5.50 |
夏至西周 |
HD124730 |
5.18 |
先夏至商初 |
HD121130 |
4.58 |
先夏至夏前期 |
HD123299 |
3.67 |
先夏至夏初 |
对应于《周髀算经》的可能年代,即西周至西汉,我们可以选择HD107193和HD106112两颗恒星作为北极星的候选者。
4、《周髀算经》观测数据的拟合
这里所用到的《周髀算经》观测数据有:夏至日晷长Lx=1.6、冬至日晷长Ld=13.5和北极璇玑的晷长Lj=10.3。它们都是长度测量值,存在着测量误差。由于这些长度的最小单位是1寸,故取测量误差为0.5寸,记为:σ = 0.05。
采用似然比方法进行拟合,根据式(1)-(3)定义似然函数Λ为:
(4)
在(4)式中,Lb=8是常数,Lx、Ld和Lj是观测量,而黄赤交角ε和北极星赤纬δ均是随年代t而变化的。这样,待拟合的参数就是地理纬度φ和年代t。
具体的拟合方法是:1)选定某颗恒星作为北极星的候选者;2)在预设的地理纬度和年代的范围内,用均匀随机数生成106个(φ,t)值;3)对每个t值,使用P03岁差模型[6]计算出黄赤交角ε和北极星赤纬δ,并对恒星做了自行改正;4)将φ、ε和δ值代入(4)式中,求出似然函数Λ的值;在实际计算中取太阳北点来计算影长,同时考虑了蒙气差对(4)式的修正;5)在用106个(φ,t)值计算出106个Λ值后,Λ的最大值Λ0所对应的(φ,t)就是最佳拟合,同时可给出Lx、Ld和Lj的最佳理论值;6)寻找所有满足lnΛ0-lnΛ ≤ n2/2(其中n=1,2,3…表示n倍标准差)的Λ,其所对应的(φ,t)就是处于n倍标准差内的,由此可给出在n倍标准差内(φ,t)的取值范围;以下计算均取n=1,即取1倍标准差的置信区间。
依据《周髀算经》所给出的观测值:Lx=1.6、Ld=13.5和Lj=10.3,假定观测误差σ = 0.05,并分别取北极星为HD107193和HD106112,可给出拟合结果如表2:
表2:《周髀算经》数据的拟合结果
|
观测值 |
拟合值 |
|
北极星 |
|
HD107193 |
HD106112 |
观测年代t |
|
公元前年 |
公元前年 |
地理纬度φ |
|
度 |
度 |
夏至日晷长Lx |
1.6 |
|
|
冬至日晷长Ld |
13.5 |
|
|
北极璇玑晷长Lj |
10.3 |
|
|
5、《周髀算经》数据的观测年代与地点
在西周到西汉的时期内,分别取恒星HD107193和HD106112作为北极星,可以得到两组拟合结果(见表2),其可能的观测年代分别为公元前511年左右和公元前142年左右。从表2中的拟合结果来看,《周髀算经》中夏至晷长的测量精度略大于半寸,冬至晷长和北极璇玑晷长的测量精度在2寸左右。相比较而言,HD107193的拟合结果要更好一些。
如果《周髀算经》数据的观测年代是公元前142年左右,即西汉前期,则与汉武帝的“太初改历”相距不远,但数据拟合的地理纬度35.59度要比西汉都城长安的纬度(34.30度)大得多。即时按1倍标准差给出的年代范围:公元前241至前26年,即战国末至西汉,也没有任何国都位于纬度35.59度线附近。勉强可以考虑的观测地点是山东曲阜,其地理纬度为35.60度。
若将恒星HD107193作为北极星,给出的观测年代在公元前511年左右,1倍标准差的年代范围为公元前577至前445年,即春秋中期到战国初期。
能田忠亮根据《周髀算经》中二分二至太阳所在宿,即春分在娄、夏至在东井、秋分在角、冬至在牵牛,得出七衡图的观测年代为公元前576至前451年[3]。我们用P03岁差模型[6]和伊巴谷星表[5]重新进行了计算,得出七衡图的观测年代为公元前559至前343年。这与我们用晷长得出的观测年代是相容的。
故此,我们倾向于认为《周髀算经》晷长的观测年代为公元前511年左右,所用的北极星为HD107193。由此,观测地点的地理纬度为35.20度左右。
查春秋中期至战国初期的各国都城,以邾国都城“绎”较为合适,“绎”即今山东邹城峄山镇纪王城,地理纬度为35.27度。《左传》记载,公元前615年“邾文公卜迁于绎”,与鲁国为邻。而赵爽注《周髀算经》称“荣方、陈子为周公之后人”,可能陈子是鲁国人,到邾国为其“卜地中”。此外,晋国魏氏的都城安邑(今山西夏县禹王城,地理纬度35.19度)亦可能是《周髀算经》的观测地点。
二、刘向二至晷长的观测年代
西汉后期的刘向(公元前77年-前7年)在《洪范传》中给出了晷长的新数据,该数据亦见于《汉书•天文志》中[7]。《汉书•天文志》载:“夏至至于东井,北近极,故晷短;立八尺之表,而晷景长尺五寸八分。冬至至于牵牛,远极,故晷长;立八尺之表,而晷景长丈三尺一寸四分。”即刘向的数据为:夏至日晷长Lx=1.58,冬至日晷长Ld=13.14。
与《周髀算经》的数据相比,这里没有北极璇玑晷长Lj的数据。实际上,在《周髀算经》的盖天模型中,冬至“日下”到“极下”的距离是夏至“日下”到“极下”的距离的两倍,由此可得到Lx、Ld和Lj三者之间的关系为:
(5)
因此,刘向测量的北极璇玑晷长为Lj=13.14-2×1.58=9.98,加上Lx和Ld的观测数据就可对观测年代进行拟合了。这里假定长度测量的最小刻度为0.1寸,故取测量误差为σ
= 0.005。
按上节的数据拟合方法,同样取恒星HD107193和HD106112作为北极星的候选者。因为由HD106112拟合的年代在公元以后,故舍去。这样,刘向的观测数据的拟合结果如表3,从中可知刘向的影长测量精度在0.3寸之内。
表3:刘向数据的拟合结果
|
观测值 |
拟合值 |
北极星 |
|
HD107193 |
观测年代t |
|
公元前年 |
地理纬度φ |
|
度 |
夏至日晷长Lx |
1.58 |
|
冬至日晷长Ld |
13.14 |
|
北极璇玑晷长Lj |
9.98 |
|
由此,刘向晷长测量的年代在公元前53年左右,1倍标准差的年代范围为公元前57-前49年。史载汉宣帝于甘露三年(公元前51年)诏萧望之、刘向等儒生,在长安未央宫北的石渠阁讲论《五经》异同,刘向的观测应该是在“石渠阁会议”前后做的。
刘向的观测地点的地理纬度为34.72度,要比西汉都城长安(纬度34.30度)略北一些,似取洛阳(东周洛阳王城的地理纬度为34.75度)作为观测地点更好一些。因洛阳是西周初周公“卜洛”后建立的,并以登封阳城为“地中”(详见后)。刘向到洛阳城北重新进行“地中”的测量,以作为考证“《五经》异同”的证据,是比较合理的猜想。
三、《周礼》数据与“阳城”。
《太平御览》记载:“《周礼》曰:冬至,日在牵牛,景长一丈三尺。夏至,日在东井,景长尺有五寸。”《尚书考灵耀》亦载:“日永影尺五寸,日短一十三尺。” 这些记载给出的数据是:夏至日晷长Lx=1.5,冬至日晷长Ld=13,而由(5)式可得出北极璇玑晷长Lj=10。
利用这三个数据,设测量误差为σ = 0.05,分别选取北极星为HD107193和HD118904,可以给出拟合结果如下:
表4:《周礼》数据的拟合结果
|
观测值 |
拟合值 |
|
北极星 |
|
HD107193 |
HD118904 |
观测年代t |
|
公元前年(前年) |
公元前年 |
地理纬度φ |
|
度(度) |
度 |
夏至日晷长Lx |
1.5 |
() |
|
冬至日晷长Ld |
13 |
() |
|
北极璇玑晷长Lj |
10 |
() |
|
从表4可知,用HD107193作为北极星的拟合结果最好,长度测量的误差在0.5寸之内;而用HD118904作为北极星,则测量误差达2.5寸。因此,我们倾向于选取HD107193的拟合结果。当用HD107193作为北极星,因其测量误差较小,故可以假定长度测量的最小刻度为0.1寸,即取测量误差为σ
= 0.005,重新拟合有关数据,其结果列于表4中括号内,可知测量误差在0.3寸以内。
这样,以HD107193作为北极星,得到《周礼》数据的观测年代为公元前1032年左右,1倍标准差的年代范围是公元前1035-前1028年,属于西周初年。史载周成王八年,“周公卜洛”。按夏商周断代工程的成果,成王八年即公元前1035年[8],恰好在数据拟合的观测年代范围之内。因此,《周礼》中的晷长数据应该是“周公卜洛”时的观测结果。
表4给出的观测地点的地理纬度是34.32度,1倍标准差给出的范围是34.31-34.33度。“周公卜洛”的地点是“阳城”,即今河南登封告成镇,其地理纬度为34.42度,比拟合出的纬度略大0.1度。若取σ =
0.05,则阳城的纬度处于数据拟合的地理纬度的范围之内。
《周礼•地官》载:“以土圭之法测土深,正日景以求地中。……日至之景,尺有五寸,谓之地中。”《周礼•大司徒》 称:“日至之影,尺有五寸,谓之地中。天地之所合也,四时之所交也,风雨之所会也,阴阳之所和也。然则百物阜安,乃建王国焉。”由此可见,“周公卜洛”影响深远,在登封古观象台即有唐朝的“周公测景台”石碑。后人把“日至之影尺有五寸” 作为寻找“地中”的判据,而登封告成镇就成了“阳城”。
四、禹都阳城
与“阳城”有关的还有治水英雄和夏朝奠基者大禹。《孟子》和《史记》记载“禹避舜之子于阳城”,《古本竹书纪年》称“禹居阳城”,《世本》则称“禹都阳城”。
按夏商周断代工程的成果,夏朝开始于公元前2070年[8]。根据P03岁差模型[6],公元前2070年时的黄赤交角为ε=23o.93。若大禹的阳城与周公时的阳城均在河南登封,则地理纬度为φ=34.42。将φ和ε代入(1)和(2)式,则可得出“禹都阳城”的夏至日晷长为Lx=1.48、冬至日晷长为Ld=12.98。那么,在古代文献中是否有这样的测量记录?
《易通卦验》记载有二十四节气的日影晷长数据[9],其中称:“冬至…晷长丈三尺”和“夏至…晷长一尺四寸八分”。这些记载给出的数据是:夏至日晷长Lx=1.48,冬至日晷长Ld=13,这恰恰是“禹都阳城”所应有的测量结果。
由Lx=1.48和Ld=13,据式(5)可得出北极璇玑晷长为Lj=10.04,同样可以利用这三个数据进行数据拟合。假定长度测量的最小刻度为0.1寸,故设测量误差为σ = 0.005。将表1中各颗恒星分别选取为北极星,只有HD123299是合适的,用其他恒星作为北极星则使拟合出的年代过晚。最终的拟合结果列于表5,从中可知长度测量的精度好于0.3寸。
表5:《易通卦验》数据的拟合结果
|
观测值 |
拟合值 |
北极星 |
|
HD123299 |
观测年代t |
|
公元前年 |
地理纬度φ |
|
度 |
夏至日晷长Lx |
1.48 |
|
冬至日晷长Ld |
13 |
|
北极璇玑晷长Lj |
10.04 |
|
由此,《易通卦验》数据的测量年代为公元前2042年左右,1倍标准差的年代范围为公元前2044-前2039年,属于夏朝初期。
观测地点的地理纬度为34.22度,比周公“阳城”略靠南一些。《汉书•地理志》颍川郡阳翟县下班固自注:“夏禹国”,应劭曰:“夏禹都也”。《帝王世纪》载:“禹受封夏伯,在豫州外方之南。今河南阳翟县是也”。《史记•周本纪•集解》引徐广曰:“夏居河南,初在阳城,后在阳翟”。《水经•颍水注》:“颍水自竭东迳阳翟故城北,夏禹始封于此为夏国”。阳翟即今河南禹州,地理纬度为34.16度。
五、讨论
1、利用夏冬至的日影长度,可从公式(1)和(2)对地理纬度进行很好的限制,主要是因为黄赤交角ε随年代的变化非常缓慢。同样,仅靠二至的晷长来确定年代是非常困难的,只要晷长的测量有少许误差,就会使年代相差甚远。这也是过去许多学者用二至晷长数据可以定出地理纬度,但无法确定观测年代的原因。
2、我们这里将北极璇玑的晷长与二至的日影长度一并考虑,从而可以很好地确定观测点的地理纬度和观测年代。这是因为北极星离北天极的距离(即“璇玑”的角半径)是随年代有很大变化的,因而北极璇玑的晷长对观测年代有非常强的限制。
3、根据《周髀算经》的盖天模型,我们将北极璇玑的晷长与二至的日影长度建立了关系,即(5)式。从而对那些只有二至晷长数据的古代记录,也可以确定其观测年代。
4、我们使用了似然比拟合方法来处理观测数据,这种方法的优点是可以充分考虑测量误差对拟合结果的影响,从而可以给出地理纬度和观测年代的可靠范围。
5、由于刘向的生卒年代是明确的,通过对刘向数据的拟合,得出的年代结果充分表明本文的方法是合理而有效的。这也是将该方法应用于其他数据的基础。
6、对北极星的选取,我们是采用试错的方式进行。但从结果来看,从西周初期的周公直到西汉末期的刘向,一千年来使用的北极星均是HD107193这颗恒星。当然,比周公早一千年的大禹则用另一颗恒星HD123299作为北极星。
7、从本文的拟合结果来看,《周髀算经》的盖天模型应该是源远流长,至少从夏初直到西汉末的两千年间,是一脉相传的。东汉以后,由于浑天说占据了统治地位,似乎再没有人使用盖天模型了。
参考文献
1
李俨.中算史论从[C].第1集.北京:科学出版社,1954:45
2
钱宝琮.盖天说源流考[J].科学史集刊, 1958, (1): 29-30
3
陈遵妫.中国天文学史[M](上).上海:上海人民出版社,2006:102-125
4
江晓原.天学外史[M]. 上海:上海人民出版社,1999: 120-123页。
5
Perryman,
M.A.C. et al. Astronomy and Astrophysics,
1997, 323: L49
6
Capitaine, N. et al. Astronomy
and Astrophysics, 2003, 412: 567-586
7
陈美东.古历新探[M].沈阳:辽宁教育出版社,1995: 94-125
8
夏商周断代工程项目组.夏商周断代工程1996—2000阶段成果报告(简本)[M].北京:世界图书出版公司,2000
9
安居香山、中村璋八。纬书集成[M](上).石家庄:河北人民出版社,1994
发表于《中国科技史杂志》第30卷 第1期(2009年):102-109