发布日期:2025-10-26 10:44 点击次数:152
上篇文章介绍了如何进行晨昏蒙影的计算,今天来一个进阶的应用,也是填下上文的一个坑。
《五星占》是一个发现于出土于长沙马王堆三号汉墓的帛书,时间在公元前170年左右,里面记载了金木水火土五星的观测记录,本文以土星为例,试图还原一下秦汉时期对五星是如何观测的?
图片
《五星占·土星》图版。图源:《长沙马王堆汉墓简帛集成》2014第一版
我们看看是如何记载的:
《土星行度》秦始皇帝元年正月,填星在營室,日行八分,卅日而行一度,終〔歲〕行〔十二度卌二分。見三百四十五〕日,伏卅二日,凡見三百七七日而複出東方。卅歲一周於天,廿歲與歲星合為大陰之紀。
记载的数据:
图片
《五星占·土星》图版。图源:《长沙马王堆汉墓简帛集成》2014第一版
文字版:
图片
《五星占》 附表释文 马王堆汉墓帛书整理小组
五星动态表到了西汉末年,《汉书·律历志》中收录的《三统历》首次以“五星动态表”的形式完整记录了土星的运行规律:
土,晨始見,去日半次。順,日行十五分度一,八十七日,始留,三十四日而旋。逆,日行八十一分度五,百一日。復留,三十三日八十六萬二千四百五十五分而旋。復順,日行十五分度一,八十五日而伏。凡見三百四十日八十六萬二千四百五十五分,除逆定,行星五度四百四十七萬三千九百三十分。伏,日行不盈十五分度三。三十七日千七百一十七萬一百七十分,行星七度八百七十三萬六千五百七十分。一見,三百七十七日千八百三萬二千六百二十五分,行星十二度千三百二十一萬五百分。通其率,故曰日行四千三百二十分度之百四十五。
翻译成现代文来描述这个过程:
1. 初见(晨始见)初见时与太阳的角距:半'次'(约15°(天文晨昏蒙影),古代天文学将一周天分为12'次'),也就是说这是在早晨第一次看到土星,这个很重要,因为这个是一个会合周期观测的起点。晨始见之前,土星运行的位置因为白天的原因,无法观测到,也就是后文的伏。
2. 顺行阶段(顺)速度:每日行度时长:87日总行程: 度3. 第一次减速(始留)减速34日后开始自东向西逆行4. 逆行阶段(逆)速度:每日逆行度时长:101日总逆行: 度5. 第二次减速(复留)减速时长: 日(约33.04日)6. 恢复顺行(复顺)速度:每日行度时长:85日总行程:度凡見三百四十日八十六萬二千四百五十五分:
7. 隐伏(伏)速度:低于度/日(即<0.2°/日)时长:37天, 日(约37.89日)之后又”晨始见“,完成一个周期(一见)。
8. 总结:一見,三百七十七日千八百三萬二千六百二十五分。......
因此:土星会合周期:377.935。而今天天文学家的测定值是378.092,相差约3小时46分。可见两千年前的精度还是可以的。有兴趣的读者,也可以查看《中国国家天文》微信公众号昨日的文章:古代中国土星观测。
原文中还有分段的速度分析,不再赘述。
另外,上述计算中使用了一个分母19275975,而且有“通其率”,这个数据来源于《汉书·律历志》原文中的“统母”篇,这些历法计算方法,以后解读历法的时候详细说。
计算我们按照每日一个数据点,计算一个土星会和周期中土星在星空的位置。
《五星占》最早的记录是秦始皇元年至汉高后元年约30年的数据记录。
图片
赤道坐标直接画图
这是公元前221年开始的将近30年的数据,这也是一个土星公转周期,从地球上看,就是如此的一个形状。我们放大局部,我们看看秦始皇时期的一个会合周期是如何运行的。
在这里我们需要先找到一个“晨始见”的现象,《五星占》中记载了第一次“晨始见”是:(始皇)元年一月二日。通过星历表计算,公元前220年的1月15日(儒略历)这天是朔日。而这一天恰好是土星在东方出现前后的日期,我们以这日为起始日,算一个会合周期的土星数据。
图片
有兴趣可以对照上面的记录看看这个周期的运行情况,点密的地方就是速度慢减速的时间区间。
下面是计算和绘图的程序:
import matplotlib.pyplot as pltimport numpy as npfrom skyfield.api import GREGORIAN_START, load, wgs84ts = load.timescale()ts.julian_calendar_cutoff = GREGORIAN_START # 使用儒略历# 在此需要使用DE422,支持前后3000年的星历。DE421.bsp 只支持 1950 年到 2050 年eph = load('de422.bsp')beijing = eph['earth'] + wgs84.latlon(39.9, 116.4, 44.0)saturn = eph['SATURN BARYCENTER']# 公元前220年是-219dates = ts.utc(-219, 1, range(16, 398, 1))r = []d = []for date in dates: # 计算已经考虑了岁差等的影响,计算结果是瞬时坐标系的值。 ra, dec, dist = beijing.at(date).observe(saturn).apparent().radec(epoch='date') r.append(ra.hours) d.append(dec.degrees)r = np.array(r)d = np.array(d)fig, ax = plt.subplots(figsize=(12, 6))ax.plot(r, d, 'o-', lw=0.5, color='red')ax.grid(True, linestyle=':', alpha=0.7)ax.invert_xaxis() # 天图常用的格式# 添加时间标签for i, t in enumerate(dates): if t.utc.day == 1: ax.annotate(t.utc_strftime('%m-%d'), (r[i], d[i]), fontsize=14, color='blue')ax.set_xlabel('赤经 ($^h$)', fontsize=14)ax.set_ylabel('赤纬 ($^o$)', fontsize=14)ax.set_title('土星在星空的轨迹(赤道坐标)', fontsize=16)plt.tight_layout()plt.show()# fig.savefig('tuxing-220.pdf', dpi=100, bbox_inches='tight')上述计算可能比较粗糙,挂一漏万,欢迎批评指正。 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。