《周髀算经》与阳城

赵永恒

(中国科学院国家天文台,北京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等的恒星,对其进行自行和岁差的改正(岁差改正使用IAUP03模型[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

先夏至夏初

 

对应于《周髀算经》的可能年代,即西周至西汉,我们可以选择HD107193HD106112颗恒星作为北极星的候选者。

4、《周髀算经》观测数据的拟合

这里所用到的《周髀算经》观测数据有:夏至日晷长Lx=1.6、冬至日晷长Ld=13.5和北极璇玑Lj=10.3。它们都是长度测量值,存在着测量误差。由于这些长度的最小单位是1寸,故取测量误差为0.5寸,记为:σ = 0.05

采用似然比方法进行拟合,根据式(1-3)定义似然函数Λ为:

     4

在(4)式中,Lb=8是常数,LxLdLj是观测量,而黄赤交角ε和北极星赤纬δ均是随年代t而变化的。这样,待拟合的参数就是地理纬度φ和年代t

具体的拟合方法是:1)选定某颗恒星作为北极星的候选者;2)在预设的地理纬度和年代的范围内,用均匀随机数生成106个(φt)值;3)对每个t值,使用P03岁差模型[6]计算出黄赤交角ε和北极星赤纬δ,并对恒星做了自行改正;4)将φεδ值代入(4)式中,求出似然函数Λ的值;在实际计算中取太阳北点来计算影长,同时考虑了蒙气差对(4)式的修正;5)在用106个(φt)值计算出106Λ值后,Λ的最大值Λ0所对应的(φt)就是最佳拟合,同时可给出LxLdLj最佳理论值;6)寻找所有满足lnΛ0-lnΛ ≤ n2/2(其中n=1,2,3…表示n标准差)的Λ,其所对应的(φt)就是处于n标准差内的,由此可给出在n标准差内(φt)的取值范围;以下计算均取n=1,即取1倍标准差的置信区间。

依据《周髀算经》所给出的观测值:Lx=1.6Ld=13.5Lj=10.3,假定观测误差σ = 0.05,并分别取北极星为HD107193HD106112,可给出拟合结果如表2

 

2:《周髀算经》数据的拟合结果

 

观测值

拟合值

北极星

 

HD107193

HD106112

观测年代t

 

公元前

公元前

地理纬度φ

 

夏至日晷长Lx

1.6

冬至日晷长Ld

13.5

北极璇玑晷Lj

10.3

 

5、《周髀算经》数据的观测年代与地点

在西周到西汉的时期内,分别取恒星HD107193HD106112作为北极星,可以得到两组拟合结果(见表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的数据。实际上,在《周髀算经》的盖天模型中,冬至“日下”到“极下”的距离是夏至“日下”到“极下”的距离的两倍,由此可得到LxLdLj三者之间的关系为:

                                                 5

因此,刘向测量的北极璇玑晷长为Lj=13.14-2×1.58=9.98,加上LxLd的观测数据就可对观测年代进行拟合了。这里假定长度测量的最小刻度为0.1寸,故取测量误差为σ = 0.005

按上节的数据拟合方法,同样取恒星HD107193HD106112作为北极星的候选者。因为由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,分别选取北极星为HD107193HD118904,可以给出拟合结果如下:

 

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.48Ld=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.北京:科学出版社,195445

2        钱宝琮.盖天说源流考[J].科学史集刊, 1958, (1): 29-30

3        陈遵.中国天文学史[M](上).上海:上海人民出版社,2006102-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