2020年9月2日 星期三

二十四節氣 (4) :如何推算冬至是未來的哪一天?

在農曆中,決定一個回歸年 (以現在的觀點就是地球繞太陽公轉的日數) ,是從「冬至」起算到下一個「冬至」。決定哪個月是正月要靠節氣,也就是太陽地球的相對位置,即太陽的運行 (當時的天文觀) ,其中最重要的節氣即為冬至。因此,冬至是訂立農曆最重要的一天。

但是這天是怎麼定的呢?用說的很簡單,立竿測影,在正午時分所測的竿影,最長的那一天即為冬至。可是月曆不能這樣定,月曆是要預先頒布的,總不能天天測,測了確定哪天竿影最長再定那天為冬至,這樣的月曆永遠會落後現實生活。另外,測了多年之後還會發現,冬至似乎有個精確的時刻,因為若用同樣的方法測竿影,每年那個最長的竿影,可能不一樣長。不會長於某個值,也不會短於某個值,似乎要剛好在某個時間點才會最長,卻不一定在正午,可是那個時刻如果不在正午又觀測不到。長久下來,推估那個時間點便會是建立曆法很重要的一步。

冬至一定要吃湯圓的啊 (圖片來源:Wikipedia)


曆法是要能預測日月星辰的,也就是要用已知的數據來推算未來。實際觀測的結果能用來校正推測的結果,但總還是要有個推算的方法才行。這篇文章要介紹的是,當規則確立之後,是怎麼透過定好的數值來推算。至於如何求得拿來推算的觀測數據,如著名的祖沖之定冬至法則會在日後繼續說明。

古代曆法的推算是利用「上元積年」的方式,來外插推測各節氣與日月星辰的運行。關於上元積年的細述會有專文解說,在此先簡單說明:上元是個想像中的日子,即各個重要天文曆法現象同時發生的那一天那一刻,甲子年甲子日午夜零時冬至且朔時,加上金木水火土星交會於冬至點等,把這個再巧不過的日子當成原點,只要各個天文曆法節氣的日子都是遵照一定的規律,那就可以用外插的方式推斷出哪一個時節是哪一天哪一刻。

概念其實很簡單,例如假設一個回歸年是 $365.2422$ 天 (因為地球軌道的關係這其實是平均數字,而且回歸年的長度因為歲差等的關係也慢慢在改變但每年變動很小,之後會再提及),又假設今年的冬至點剛好是在凌晨$0$時$0$分,且那一天也是甲子日,一年後的冬至點與冬至日是在什麼時候呢?

答案不難,當然就是$365.2422$天之後。那若是要快速算出該日以天干地支記日是哪一天,要怎麼算呢?也不難,把 $365.2422$ 除以 $60$ 得到的餘數便是,也就是 $5.2422$,所以一年後的冬至日會是甲子日後過$5$天,也就是己巳日,而確切的時間點便是 $0.2422$ 日,換算成現在的時刻表示法則會是 $0.2422 \times 24 = 5.8128$, $0.8128 \times 60 = 48.768$,$0.768 \times 60 = 46.08$,也就是早上$5$時$48$分$46.08$秒。所以我們只要知道那個想像中的日期是什麼時候,再知道與我們想算的日子相距多久,又知道一個回歸年有多長的話,我們便可以算出冬至的時刻。

這些資料都可以從我們熟知的史書如二十四史中得到,讀者們可能曾經讀過二十四史裡的文章,譬如最常見的史記漢書中描寫人物的部分,像是秦始皇本紀項羽本紀等,不過這些史書中同時也有「志」,如「禮樂志」、「刑法志」等,曆法會歸在「志」這部分,所以這些正史中都有明確記載當時曆法的使用數據。

這些數字是從天文觀測以及推算出來的,我們在此不細談這些數字的來源,畢竟當年的觀測沒有現代準確,天文觀也不是當代的天文觀,所以用現代的眼光來看當然是錯誤百出,怎麼觀測與推導出這些錯誤的數字我們就先不深究,但這些數字就是當時使用的曆法,所以這些數字對於我們了解曆法的制定是有幫助的。

我們就從最早有明確文字記載的太初曆 (西元前$104$年 - 西元$4$年) 來看起吧,但史記或漢書中並沒有詳細列出其使用數據,而從太初曆稍加修改來的三統曆 (西元$5$年 - 西元$84$年) 開始,史書大多記載得很清楚。因為三統曆算是沿用其數據,所以從三統曆的記錄可以看到當時太初曆的一些記錄。其實之後一直到大元時開始使用的授時曆 (西元$1281$年-西元$1387$年) 之前都是利用上元積年的方式來推算冬至,直到授時曆時才改掉。這之中還慢慢有引進歲差,這些部分之後還會提及。

太初曆當初改曆的其中一個小原因是因為認為太初元年 (西元前$104$年) 又到了甲子朔旦冬至,也就是太初元年時剛過的那個冬至(前一年年底),冬至點的時刻剛好又是夜半,夜半時也剛好是朔時,又正好是甲子日。以現在的說法來說:這是一個 sign...


來看看最早有記錄數據的三統曆怎麼寫的:

漢書卷二十一律曆志第一漢曆太初元年,距上元十四萬三千一百二十七歲。前十一月甲子朔旦冬至。

太初曆與三統曆所算出使用的上元,如上述所示為 太初元年 (西元前$104$年) 的 $143127$ 年前,這裡的「上元積年」算到的是太初元年剛過的前一年年底的那個冬至。讓我們來實地算算看吧!不過筆者翻閱了史料,暫時沒發現有什麼直接可供驗算的文獻,如果查閱一些編輯萬年農曆的程式網站軟體之類的,他們的建構來源也都是從史書中這些史料來的,所以與他們相符是必然的結果。我們就直接算算太初元年前一年的那個冬至是不是真的是甲子日且冬至點正巧在夜半時好了。

漢書卷二十一律曆志第一推冬至,以算餘乘人統歲數,盈統法得一,名曰大餘,不盈者名曰小餘。除數如法,則所求冬至日也。 

這裡雖然是寫「算餘」乘「人統歲數」,不過這兩個數是從其他數再運算而來的,又因為這是「三統曆」,有天統、地統、人統,所以用詞刻意用得有點玄,但我們只關心數學的部分,簡單一點我們可以直接從三統曆中的「統法」和「周天」與「上元積年」來算(這些名詞的使用在不同曆書中稍有出入,可能是不同年代不同習慣),這類型的算法在日後的曆法中有使用到上元積年的也同樣適用。

漢書卷二十一律曆志第一
統法千五百三十九。
周天五十六萬二千一百二十。

「統法」是把一天切成幾等分,這類型的切割法只用於曆算,不會在日常生活中出現,畢竟一天切成這個特殊數字等分使用上當然不甚方便,而且古代計時工具也不發達,日常生活中如此細切意義不大。在三統曆中把一天切成$1539$個單位,「周天」則是一個回歸年共有幾個上述的單位,三統曆使用的數字是$562120$個單位。$\frac{562120}{1539} = 365\frac{385}{1539}= 365.2502$,也就是一個回歸年有$365.2502$天。現在看當然知道這不準,不過這已經是兩千多年前的測量與運算了。

那怎麼算從上元到太初元年前一個冬至總共過了幾天呢?也不難,就如同之前提的,一個回歸年幾天乘以經過多少個回歸年即可,太初曆或三統曆使用的上元積年如上述所示到太初元年 (西元前$104$年) 是$143127$年,所以算式如下:

\[ \frac{562120}{1539} \times 143127 = \frac{562120 \times 143127}{1539} = \frac{80454549240}{1539} = 52277160 \]

也就是從上元到太初元年的前一個冬至正好是$52277160$天,這是一個整數,而且是$60$的倍數,也就是:$52277160 \equiv 0\ ( mod\ 60)$

因為是$60$的倍數,所以我們知道這個日子正好是甲子日,而且因為除以$60$的餘數為$0$連小數點也沒有,所以剛剛好冬至點的時刻即為午夜零時零分。

這當然是刻意湊出來的結果,因為如上述曾說過,當時改曆的其中一個小原因就是因為認為太初元年 (西元前$104$年) 又到了甲子朔旦冬至,所以使用的數字必然要推出這樣的結果。現代的科技觀測進步回推回去我們可以知道這個觀測推論是有誤的,太初元年剛過的那個「冬至」午夜$0$時$0$分並不是真正的冬至點也不是朔時,但是這是當時使用的數據所以也沒什麼能爭論的,畢竟都是兩千年前了,觀測有誤也不是什麼令人意外的事。

我們再回到曆法中描述推算冬至的那個句子:

漢書卷二十一律曆志第一推冬至,以算餘乘人統歲數,盈統法得一,名曰大餘,不盈者名曰小餘。除數如法,則所求冬至日也。 

後半段提到了「大餘」與「小餘」。上面的運算因為剛好是$60$的倍數整所以不適合當例子,假設算到太初元年年底的那個冬至就會有這兩個數字了。

讓我們來運算一下。因為多過了一年,所以 $143127+1 = 143128$:

\[ \frac{562120}{1539} \times 143128 = \frac{562120 \times 143128}{1539} = \frac{80455111360}{1539} \\ \frac{80455111360}{1539} \equiv 5.250162\ ( mod\ 60) \]

不過當時不會用小數點來表示,會把小數點後的那部分用分數來表示,分母即為之前用的$1539$,所以把$0.250162 \times 1539 = 385 $,即餘數為$5 \frac{385}{1539}$。其中$5$即為「大餘」,$385$即為「小餘」。從「大餘」可以推算出天干地支日,「小餘」可以算出冬至點準確的時刻。

當時應該也不會用上述小數的方式計算,我們這裡使用小數的方式只是方便求解而已。其實因為前一年的冬至$0$時已知是冬至點了,簡單一點的算法直接拿$\frac{562120}{1539}=365 \frac{385}{1539}$除以$60$的餘數也是一樣的。

值得注意的是,如果查閱萬年農曆的程式網站軟體等工具,可能會發現太初元年前一年(即元封六年)年底的冬至並不是甲子日,那是因為當時改曆是從太初元年開始改的,所以前一年使用的曆法還是上一部顓頊曆推算的結果,有所出入很正常,而正是因為這些出入才會導致歷史上一直不斷地改曆。

後來的曆法慢慢有將歲差考慮進去,這部分我們在日後還會繼續說明。

沒有留言:

張貼留言