Closed kanasimi closed 4 years ago
我也聽說大部份天文軼件是用Meeus的書提供的算法。您說算出的數據大都會差到幾分鐘,那是跟什麼比較呢? 會不會是因為 Delta T 的算法不同?
我是在去年六月才開始編寫天文演算程序。當時是為了在我的星圖網頁中加上日月和八大行星的數據。由於我的星圖resoltion小,繪圖時只用JPL的低精度公式,在 popup box 的顯示中才用到VSOP87的公式,而VSOP87的程式代碼從此處獲得。
但是兩個網站都沒有月球的位置計算,經過搜尋後,找到了 ELP/MPP02 的 FORTRAN 代碼: ftp://cyrano-se.obspm.fr/pub/2_lunar_solutions/2_elpmpp02/,但是那裡有35901個Poisson級數項,對我繪製星圖來說是沒有必要的。由於我的星圖要有animation的功能,所以用低精度的公式效率比較好。於是我製了個 ELP/MPP02的 C++程式工具,可以用來刪剪ELP/Mpp02的公式而創造低精度的月球位置公式,並自動產生JavaScript程序。我的星圖網頁也只是在 popup box 的顯示時才用上不刪剪的ELP/MPP02公式。
對於我星圖網頁中的天文計算,可參考我的pdf說明,其中很多算法是參考了 Urban 和 Seidelmann 的Explanatory Supplement to the Astronomical Almanac第三版。關於我對ELP/MPP02 的刪剪方法,可參考這個pdf說明。我在這裡的天文計算可參考拙文月相和二十四節氣的計算。
(未完,待續)
我在編寫ELP/MPP02 的刪剪程序時,需要知道刪剪公式精度,這有兩種方法。其一是比較刪剪公式和不刪剪公式的差異,其二是比較刪剪公式和JPL高精度的DE/LE曆表的差異。於是我下載了JPL曆表,並用Project Pluto提供的C程式讀取JPL曆表,我成功驗證了ELP/MPP02 的不刪剪公式(用擬合LE406的參數)在(-3000年, 3000年)的精度和DE/LE406比較確是他們所說3"或2公里。他們的曆表在2000年左右製成,DE/LE406在當時是最先進的,但是十幾年後,DE/LE406的長時間曆表被DE431取代,所以我的pdf說明也比較了ELP/MPP02和DE431的差異,發現是12"或2.5公里。
撐握了JPL曆表的計算後,我才想起可以用來算農曆,很快就算出了1900年到3500年的農曆,只是當時只有1900年到2100年左右的數據核對。我在去年十月把計算結果放到這裡,當時只有1900年到2200年的農曆,本來也只打算到此為止,後來發現了古代的日曆數據,並開始學習古曆的推步。這樣才逐步增加內容,結果是JavaScript的程式變得越來越亂,遠不如您的工具那麼有系統。
不曉得現在有沒有比VSOP87更方便單機使用的數據
這就要視乎您的精度要求,上面所說的JPL低精度公式對精度不高的應用來說就很好。高精度的計算用JPL曆表比VSOP87更準更快,只是JPL曆表需要用很大的data file,不適宜用於網頁,這裡的天文數據是先用JPL曆表計算,製成JSON數據,然後以查表的方法用於網頁(其實編算農曆是不需要用高精度曆表的)。如果需要中精度的曆表,恐怕要自己刪剪VSOP87的公式了。我粗略看了一下您的astronomy.js,如果我的估計不錯的話,那裡的VSOP87已經用了刪剪公式。
另外若是這邊想要進行整套的天文演算,不曉得您有沒有什麼可以參考的資料?
您說的Meeus的那本書不好嗎? 您想要增加什麼功能呢? 我的算法是參考Urban 和 Seidelmann 的Explanatory Supplement to the Astronomical Almanac第三版,但是如果沒有學過大學程度的天文課,那本書也許不容易看懂。
這邊同樣是採用 http://www.neoprogrammics.com/vsop87/source_code_generator_tool/ 這個網站
並且計算所有的 VSOP87D.ear terms https://github.com/kanasimi/CeJS/tree/master/application/astronomy
計算順序採用 https://github.com/kanasimi/IAU-SOFA/blob/master/doc/sofa_ast_c.pdf 這邊的方法
:: VSOP87 進入點→
日心黃道: D日心瞬時黃道 by VSOP87
(太陽: 日心黃道: FK5) (FK5 2選1)
(天體/行星: S日心視黃道:修正光行時及光行差) (修正光行時及光行差 2選1)
地心直角黃道座標 = 天體S日心視黃道 - 地球S日心視黃道
G地心視黃道: 球座標
:: LEA406 進入點: 計算月亮位置(地心瞬時黃道坐標)
(天體/行星: G地心視黃道: FK5? why here?) (FK5 2選1)
(G地心視黃道: 修正月亮光行時及太陽光行差) (修正光行時及光行差 2選1)
G地心視黃道: 修正地球章動 nutation。
E地心赤道座標:
topocentric(本地站心)(T站心赤道): 修正恆星時/經緯度/時角, 行星視差
H站心地平座標: 修正大氣折射
在和其他看到的數據對比時 卻往往發現算出來的朔閏和交節時刻存在誤差
有時發現 许剑伟 寿星天文历 還會更精確點 可惜因為這邊已經重寫程式碼 因此沒有精力再研究寿星天文历的計算架構
只能猜測試我在組合各種(座標)轉換時 有些該注意到的細節沒有處理好 甚至於中間漏掉了什麼或者多了什麼 畢竟不是天文專業出身的
想找其他天文演算的來源 主要是發現 Jean Meeus 的演算有很多都是擬合產生 只說用某些數據這樣算就能夠得到一個大概的值 沒有描述數據的來源 也就不好判斷到底是自己的哪邊出了問題
合朔和節氣是用地心視黃經來定義的,不要算topocentric座標。
這邊比較好奇的是 天文演算的部分 這邊主要按照 Jean Meeus, Astronomical Algorithms, 2nd Edition. 《天文算法》2版 操作
天文演算採用完整的 VSOP87 (VSOP87D.ear) 來計算行星的日心座標位置,以 LEA-406 來計算月亮位置。LEA-406 基於 LE406,據 Sergey M. Kudryavtsev,較 ELP/MPP02 更貼近 LE406。 但是算出的數據大都會差到幾分鐘
猜測可能是大氣折射 或者是多個演算來源配合方面出了問題
但是當然不好意思麻煩您幫我檢查... https://github.com/kanasimi/CeJS/blob/master/application/astronomy.js
想要請問一下 不曉得現在有沒有比VSOP87更方便單機使用的數據
另外若是這邊想要進行整套的天文演算 不曉得您有沒有什麼可以參考的資料?
謝謝您