顯示具有 三統曆 標籤的文章。 顯示所有文章
顯示具有 三統曆 標籤的文章。 顯示所有文章

2020年10月12日 星期一

火星衝日:曆書中的火星視運動

臺灣時間10月14日(星期三)是兩年一見「火星衝日」的日子!古代曆法有在管行星運動嗎?答案是肯定的。

適逢火星衝日,這篇文章只會簡單介紹曆書裡的火星視運動,將來還會有古代曆法的行星運動理論更完整的介紹。




早在戰國時期的【五星占】就記錄了金木水火土五星的觀測與推算記錄,不過這個文獻有點古老,寫得較不詳細且文件破損殘缺。我們來看看現存最早的完整曆法「三統曆」 (西元$5$年 - 西元$84$年) 寫了什麼吧:

漢書卷二十一律曆志第一

見中日法二千九百八十六萬七千三百七十三。

火,晨始見,去日半次。順,日行九十二分度五十三,二百七十六日,始留,十日而旋。逆,日行六十二分度十七,六十二日。復留,十日而旋。復順,日行九十二分度五十三,二百七十六日而伏。凡見六百三十四日,除逆,定行星三百一度。伏,日行不盈九十二分度七十三分,伏百四十六日千五百六十八萬九千七百分,行星百一十四度八百二十一萬八千五分。一見,七百八十日千五百六十八萬九千七百分,凡行星四百一十五度八百二十一萬八千五分。通其率,故曰日行萬三千八百二十四分度之七千三百五十五。


看起來有些複雜,我們先來看一下地球上觀察火星的視運動是怎麼樣子。下圖是按照真實公轉軌道與公轉週期比例繪製而成,火星公轉軌道的離心率比地球軌道大,看得出來火星軌道視覺上更像是個軌圓。為避免各星球在圖上太小較難閱讀,星體大小並未按照比例繪製。
其實一直反覆看這個gif動畫還蠻療癒的……


仔細觀察,因為地球軌道在內側,公轉周期較短,每隔一段時間地球便會「超車」火星。從地球觀測火星的視運動大致照同一方向運行,但每當地球「超車」時,火星視運動便會「逆行」一段時間,一直到成功超完車後,才再度回到原來的運行方向。如下圖所示:

再回到第一張圖仔細觀察可知,這樣子的「逆行」「只」會發生在「超車」的時候,其他的時間視運動方向都是一致的。

畢竟沒有現代的天文觀,行星視運動這樣子的運行方式在古代不論東西方都讓學者們很困惑。行星的英文「planet」是來自古希臘文,意思是「遊走者」(wanderer)。火星古稱「熒惑」,「惑」也與其視運動不定有關。若此順逆行運動變換剛好發生在以天蠍座心宿為背景時,便為著名的「熒惑守心」。

在討論火星視運動時,要先考慮到什麼時候可以觀測得到火星。行星雖然亮,但與地球上最容易觀察的「太陽」與「月亮」相比,自然還是暗得多。雖然受太陽光的影響,就算是白天仍然看得到月亮,但其他行星就不同了,非要在日出前或是日落後才有機會觀察,這些行星的亮度確實不敵太陽光與大氣層散射。

因為我們只使用簡單的軌道模型,不考慮球型自轉軸緯度大氣層等的影響,為方便起見,我們直接設定只有在晚上八點至隔日凌晨四點才能觀察得到火星,請見下圖:

為方便圖形展示,地球的比例放大許多。r與s兩線段即分別是晚上八點與清晨四點,q與p則分別為與r、s垂直的線段。不難想像,若火星的位置在p、q形成的暗色區域內,則為可觀察到的日子。換句話說,如果現在是晚上八點(r線段),火星剛好在q線段上,這時候剛剛好會看到火星要從西邊下山。同理,如果現在是清晨四點(s線段),若火星剛好在p線段上,則剛好可以在黎明時分看到火星從東方升起,不過也就只看得到升起那一瞬間,再來就會被日光影響了。

火星(地外行星)視運動會形成一個「會合週期」。如下圖,從可以在清晨時觀察到火星的日子開始,到下一個循環的起始點(可以再度於清晨時觀察到火星的日子):

如果分解各階段,依次為「始見」「順行」「留」「逆行」「留」「順行」「始伏」「伏行」「始見」。「始見」即開始可以從日出前觀察到的時候,「留」是視運動中順逆行變換的時候,「始伏」是火星受日光影響無法觀察的開始,「伏行」即受日光影響無法觀察的日子。

回過頭來看文章開頭所引用的三統曆到底寫了什麼吧!

漢書卷二十一律曆志第一

見中日法二千九百八十六萬七千三百七十三。

火,晨始見,去日半次。順,日行九十二分度五十三,二百七十六日,始留,十日而旋。逆,日行六十二分度十七,六十二日。復留,十日而旋。復順,日行九十二分度五十三,二百七十六日而伏。凡見六百三十四日,除逆,定行星三百一度。伏,日行不盈九十二分度七十三分,伏百四十六日千五百六十八萬九千七百分,行星百一十四度八百二十一萬八千五分。一見,七百八十日千五百六十八萬九千七百分,凡行星四百一十五度八百二十一萬八千五分。通其率,故曰日行萬三千八百二十四分度之七千三百五十五。


其實就是火星視運動各階段的記錄,下表把日行天數用現代表格畫下,其中「伏行」與「一見」非整數,其分母為文中有附的$29867373$,表中已經將其換算成小數以方便閱讀:

行日
晨始見 去日半次
$276$
始留 $10$
$62$
復留 $10$
復順 $276$
$146.5253$
一見 $780.5253$

「一見」就是一個會合週期的長度,就現代的眼光看起來當然不準(NASA給的數據是$779.94$天),不過要記得這已經是$2000$年前的數據了。

會合週期就是多久地球會超車一次,這個數字由上述NASA網站「地球公轉週期」與「火星公轉週期」兩個數字也可簡單算出,應該是國小,或至多國中程度的數學即可:

地球公轉一週$365.256$日(恆星週期,所以與回歸年長度稍不同),火星公轉一週$686.980$日。

因為地球公轉一週時間較短,所以當地球「超車」的時候,繞的圈數會剛好多繞火星「一圈」

\[ \frac{會合週期}{地球公轉週期} = \frac{會合週期}{火星公轉週期} + 1 \\ \frac{會合週期}{365.256} = \frac{會合週期}{686.98} + 1 \\ 會合週期 = \frac{1}{\frac{1}{365.256} - \frac{1}{686.98}} = 779.9343 \\ \]

因為小數點位數的關係所以稍有誤差。



最後,從上述觀察火星的其中一個階段中可以看到「火星衝日」時火星、地球、太陽的相對位置,「衝」也是火星「逆行」時速率最快的時候。

只單純在該日仰望火星是觀察不出逆行速率啦。

因為相對位置的關係,火星該日出現在正南方的天空上時會剛好在午夜時。

祝福大家都能欣賞到美麗的火星。

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$的餘數也是一樣的。

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

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

2020年8月26日 星期三

閏月是怎麼決定的 (1):概論

因為日月運行各週期間不是倍數的關係,若是曆法要追求貼近真實星體的運行,會需要用「閏」的方式。例如西曆(格里曆)的閏年會在二月多一天,規律大家多半都很熟知,逢四閏,逢百不閏、逢四百閏。而大家一定都知道農曆偶爾會出現閏月,那農曆閏月是怎麼來的呢?

月球繞地球一圈的「朔望月」約 $29.5306$ 天,如果一年以$12$個月來計的話,$29.5306 \times 12 = 354.3672$,跟一個回歸年的 $365.2422$ 天相差十天多,長久下來每三個回歸年便會相差約一個月。若沒有透過閏月校正,過了數年,農曆的同個「月」可能會出現在不同的季節。有些曆法如伊斯蘭曆也是照著月球運行的方式決定月的天數,但這類曆法較不在意月份與季節是否需要有一定的相符,因此便沒有如農曆「閏月」的設計。

讀者們可能會聽說過「十九年七閏」的方法,這其實很早而且在不同文化、曆法中都有發現到這件事。

因為一個回歸年 $365.2422$ 天,若經過 $19$ 年,$ 365.2422 \times 19 = 6939.602$,其天數跟 $235 $ 個朔望月 $29.5306 \times 235 = 6939.691$ 的天數非常接近,而 $235 = 12 \times 19 + 7 $,也就是在這$19$年間,每年除了$12$個月之外,如果在$19$年間另外加入$7$個月的話,回歸年與朔望月便會形成一個很接近的循環,在古代曆法中,$19$ 便為一個「章」。這個循環,也就是讀者們可能熟知的,每十九年,自己的西曆生日與農曆生日又會在同一天或僅相差一天的由來。

在太初曆 (西元前104年 - 西元4年) 以前的曆法如「古六曆」,其曆法的詳細內容已失傳,只能透過一些文章或記事來推測其內容。目前對於殷商時代或周代時期的置閏法推測是採「年終置閏」的方式,推測的證據在於,甲骨文中有發現許多「十三月」的記載,另外還有兩條「十四月」的記錄。而從西周時代《吳虎鼎》上的銘文也可看到:「隹十有八年,十又三月既生霸丙戌」。


吳虎鼎上的銘文,第一句即是「隹十有八年,十又三月既生霸丙戌」。圖片來源:網路


從太初曆 (西元前104年 - 西元4年) 之後開始使用「無中置閏」的方式來加入閏月。之後還會有其他篇仔細介紹不同曆法「無中置閏」在史書上的記載,雖然原則類似不過史書上提到的數學稍微不同,以後會詳細介紹。這篇先介紹「無中置閏」的基本概念。

農曆的置閏需要透過節氣的幫助!節氣的定義隨著時代的不同而有所更改,這部分也在之後其他的文章會詳述。但只要節氣定義完後,在之前的文章提過,便可根據節氣中的「中氣」定義出各個月

太初曆其詳細內容在史書並無記載,但由西漢末劉歆將其修改而成的三統曆  (西元5年-西元84年) 則在漢書中有詳細記載其曆書,因為三統曆與太初曆在許多原則與數據使用相似,在此引用三統曆的敘述。

根據【漢書.律曆志】:「朔不得中,是謂閏月」。其中的「中」,指的便是「中氣」,意思是說,如果該農曆月沒有「中氣」,則該農曆月為一「閏月」。

以今年的月曆為例,大家可能會有印象今年有「閏四月」

 2020年5月
Sun Mon Tue Wed Thu Fri Sat
1
初九
2
初十
3
十一
4
十二
5
十三
6
十四
7
十五
8
十六
9
十七
10
十八
11
十九
12
廿
13
廿一
14
廿二
15
廿三
16
廿四
17
廿五
18
廿六
19
廿七
20
小滿
21
廿九
22
三十
23
初一
24
初二
25
初三
26
初四
27
初五
28
初六
29
初七
30
初八
31
初九

2020年6月
Sun Mon Tue Wed Thu Fri Sat
1
初十
2
十一
3
十二
4
十三
5
十四
6
十五
7
十六
8
十七
9
十八
10
十九
11
廿
12
廿一
13
廿二
14
廿三
15
廿四
16
廿五
17
廿六
18
廿七
19
廿八
20
廿九
21
夏至
22
初二
23
初三
24
初四
25
初五
26
初六
27
初七
28
初八
29
初九
30
初十

2020年7月
Sun Mon Tue Wed Thu Fri Sat
1
十一
2
十二
3
十三
4
十四
5
十五
6
十六
7
十七
8
十八
9
十九
10
廿
11
廿一
12
廿二
13
廿三
14
廿四
15
廿五
16
廿六
17
廿七
18
廿八
19
廿九
20
三十
21
初一
22
大暑
23
初三
24
初四
25
初五
26
初六
27
初七
28
初八
29
初九
30
初十
31
十一


仔細觀看上面的月曆,綠色的農曆月含有「小滿」這個「中氣」,下一個「中氣」是「夏至」則是在紫色的農曆月中,橘黃色的農曆月不含任何「中氣」,根據「無中置閏」的原則,這個橘黃色的農曆月,便是上一個月的「閏月」了!

綠色的月是農曆四月,因此,橘黃色的月便是農曆「閏四月」!

關於農曆閏月還有其他規定以及推算,這在之後的文章還會有更詳細的解說!


參考文獻:中國數理天文學。2008年。曲安京著。科學出版社。