MINOR EDIT:我在下面说JPL的Horizons库不是开源的。实际上,它是,并且可以在这里找到:http://naif.jpl.nasa.gov/naif/tutorials.html
2013-01-01 00:00:00 UTC北纬0度,东经0度 纬度,海平面高度,什么是J2000时代的右提升 和月球的赤纬?
可悲的是,不同的图书馆给出的答案略有不同。转换 到度,总结结果(RA优先):
Stellarium: 141.9408333000, 9.8899166666 [precision: .0004166640, .0000277777]
Pyephem: 142.1278749990, 9.8274722221 [precision .0000416655, .0000277777]
Libnova: 141.320712606865, 9.76909442356909 [precision unknown]
Horizons: 141.9455833320, 9.8878888888 [precision: .0000416655, .0000277777]
我的问题:为什么?注意:
我意识到这些差异很小,但是:
我使用pyephem和libnova来计算太阳/月亮上升/设定,以及 这些时间对高纬度地区的位置非常敏感 (例如,午夜太阳)。
我可以理解JPL的Horizons库不是开源的, 但其他三个是。不应该有人解决这个问题 这些库中的差异并合并它们?这是我的主要 投诉。 stellarium / pyephem / libnova图书馆作者是否有 如何进行这些计算的根本区别,或者做 他们只需要合并他们的代码?
我也意识到计算可能还有其他原因 不同,并将感谢任何帮助纠正这些 可能的错误:
Pyephem和Libnova可能正在使用日期的纪元而不是J2000
月亮足够近,观察者的位置会影响它 RA / DEC(视差效应)。
我正在使用Perl的Astro :: Nova和Python的pyephem,而不是 这些库的原始C实现。但是,如果这些 使用Perl / Python引起的差异很重要 我的看法。
我的代码(带原始结果):
#!/bin/perl # RA/DEC of moon at 0N 0E at 0000 UTC 01 Jan 2013 use Astro::Nova; # 1356998400 == 01 Jan 2013 0000 UTC $jd = Astro::Nova::get_julian_from_timet(1356998400); $coords = Astro::Nova::get_lunar_equ_coords($jd); print join(",",($coords->get_ra(), $coords->get_dec())),"\n"; RESULT: 141.320712606865,9.76909442356909
- Second, Python and pyephem:
#!/usr/local/bin/python # RA/DEC of moon at 0N 0E at 0000 UTC 01 Jan 2013 import ephem; e = ephem.Observer(); e.date = '2013/01/01 00:00:00'; moon = ephem.Moon(); moon.compute(e); print moon.ra, moon.dec RESULT: 9:28:30.69 9:49:38.9
- The stellarium result (snapshot):
- The JPL Horizons result (snapshot):
[JPL Horizons需要POST数据(不是真的,但假装),所以我 无法发布网址]。
我没有把它们联系起来(懒惰),但我相信有很多 stackoverflow上未解决的问题,有效地减少到 这个问题(精密天文库的不一致), 包括我自己的一些问题。
我正在播放这些内容:https://github.com/barrycarter/bcapps/tree/master/ASTRO
答案 0 :(得分:9)
我不知道Stellarium在做什么,但我想我知道其他三个。你是对的,只有Horizons使用J2000而不是这个明显的,特定于语言环境的观察的时代。您可以通过点击“表格设置”旁边的“更改”并从“1.天体测量RA& DEC”切换到“2.表观RA& DEC。”来与PyEphem达成密切协议。
与Libnova的区别有点棘手,但我深夜的猜测是Libnova使用UT而不是Ephemeris Time,所以要让PyEphem给出你必须从一次转换到另一次的相同答案:
import ephem
moon, e = ephem.Moon(), ephem.Observer()
e.date = '2013/01/01 00:00:00'
e.date -= ephem.delta_t() * ephem.second
moon.compute(e)
print moon.a_ra / ephem.degree, moon.a_dec / ephem.degree
输出:
141.320681918 9.77023197401
至少比以前更接近。请注意,您可能还希望在PyEphem代码中执行此操作,如果您希望忽略折射,就像您要求Horizons一样;虽然对于这个特殊的观察我并没有看到它有任何区别:
e.pressure = 0
任何剩余差异可能(但不是绝对的;可能还有其他错误来源,我现在没有发生),因为不同的程序使用不同的公式来预测行星的位置。 PyEphem使用旧的但流行的VSOP87。 Horizons使用了更新近 - 而且确切 - DE405和DE406,如其输出中所述。我不知道其他产品使用的太阳能系统型号。