根據史料天象求記錄時間

2021-08-30 02:17:47 字數 1875 閱讀 2476

有了恆星位置的計算方法,就可以反求恆星在某位置時的時間。

star模組即恆星位置計算,參見

反求時間即利用插值法逆求。

from star import *

def interpolation(star, angle, t2): # 插值計算,t為儒略世紀數

if angle == 0: angle = 360

t1 = t2 - 5

t3 = t2 + 5

n0 = 0 # 初值

ra1 = star.ra % 360 * 3600 # 改為角秒計算以獲得較精確結果

ra2 = star.ra % 360 * 3600

ra3 = star.ra % 360 * 3600

a = ra2 - ra1

b = ra3 - ra2

c = ra1 + ra3 - 2*ra2

while true:

n = -2 * (ra2 - angle*3600) / (a + b + c * n0)

if abs(n - n0) < 0.000001: break

n0 = n

i += 1

return t2date(t2+n*(t2-t1))

以下舉例史料中典型的天象時間問題,即《堯典》四仲中星和《漢書·律曆志》二十八宿位置 。

for star in szzx:

# 插值估值

t2 = -35 # 約西元前2023年

i = szzx.index(star) + 1

date = iteration(star, 90*i%360, t2)

jd = ephem.julian_date(date)

t = (jd - 2451545) / 36525

d = ephem.date(date)

year = d.tuple() # 獲得年份,由於目視誤差,具體時刻不具有參考價值

插值計算的精度不高,尋找好的差值表範圍可以提高精度,但也可以使用迭代法重複計算,獲得較高精度。

計算結果:

星宿一    -2023年    (赤經:90.00042309673259)

心宿二    -2023年    (赤經:179.90138264459966)

虛宿一    -2023年    (赤經:270.0102335767864)

昴宿一    -2023年    (赤經:359.99930754645504)

該值對比《中國古代天體測量學及天文儀器》的結果(見19頁),發現書中以心宿二赤經為180度時在西元前2023年,與計算值相差甚大,根據其所提供的赤經表(與本程式計算結果誤差在0.1°以內),宜在[前2500,前3000]年間,應為排印錯誤。

這是以固定太陽時角90°計算的《堯典》四仲中星時間,未考慮不同日期的黃昏時間不同,誤差可達上前年,上古黃昏時間不定,此計算值為《堯典》天象記錄的上限。

《律曆志》給出的二十四節氣的入宿度,只有冬至點是實測得到的,其他是根據簡單內插法求算的。因此計算《漢志》所載的二十八宿位置測定的時間,也只需計算冬至點在牛初度時的時間。

此時即是求牛宿距星在赤經為270度的時間。估值在殷周到公元元年(約《世經》成書時間),僅需使用iteration()函式。

print(iteration(niu, 270,-25))
求得結果約在西元前451年左右,此時牛宿距星的赤經為270.00度。則冬至在牛宿初度,即為牛宿0-1度間,應在西元前521年至西元前451年之間。考慮到測量誤差,可能更晚。

另可利用ephem模組求算冬至與天正朔在同一天的時間(參見:即西元前427年年前朔旦冬至。二者時間相近,此即殷歷己酉蔀蔀首,或即四分歷創制時的真實時間和天象記錄。

根據前序中序求後序

如前序 為 abdecgf 中序 為 bdacgef 先 根據前序第乙個節點 把中序分為bd和cgef兩部分,a為根節點,a左邊為左子樹,右邊為右子樹。再把左右子樹分別做上述步驟。以此類推 根據第二,第三.個節點構成二叉樹 a b e d c f g b 再根據後序的性質得到dbgcbfea 知道後...

根據函式閉包,求候選碼

首先來看候選碼的定義 若關係中的某一屬性組的值能唯一地標識乙個元組,則稱該屬性組為候選碼。若w是候選鍵,則必須滿足兩個條件 w的閉包是u w沒有冗餘。設關係模式r中u abc.等n個屬性,u中的屬性在fd中有四種範圍 求候選碼的簡單方法方法 1 如果有屬性不在函式依賴集 現,那麼它必須包含在候選碼中...

根據赫夫曼樹求赫夫曼編碼

可能編譯時會有些語法小錯誤 比如分號,等 很容易就自己糾正了哦,思路絕對是完全正確的,所以用的話就自己試著改改吧,直接複製貼上,就正確,豈不是太沒寫 體驗了,自己改改才印象更加深刻的呢 根據赫夫曼樹求赫夫曼編碼 includeusing namespace std typedef structhtn...