1

有没有办法用 Brandon Rhodes 的 python 程序 Skyfield 计算日心行星坐标(经度和纬度)?

如果我只这样做:

mercury(utc=(1980, 1, 1)).ecliptic_latlon()

我得到一个重心物体,因此纬度和经度与日心值不匹配。

我试过了: sun(utc=(1980, 1, 1)).observe(jupiter) 但这会引发错误:

skyfield/relativity.py:128: RuntimeWarning: invalid value encountered in true_divide
ehat = pe / emag
skyfield/relativity.py:144: RuntimeWarning: divide by zero encountered in double_scalars
fac1 = 2.0 * GS / (C * C * emag * AU_M * rmass)

使用 Python 3.4,天空0.4, de423

谢谢!

4

2 回答 2

2

使用 Python 3.4 和 Skyfield 0.4,我可以运行:

from skyfield.api import sun, jupiter
p = sun(utc=(1980, 1, 1)).observe(jupiter)
lat, lon, d = p.ecliptic_latlon()
print(lat)
print(lon)

并得到结果:

01deg 00' 46.7"
+151deg 19' 21.7"

我想知道在您的情况下,是什么使引用的等式返回被零除?顺便说一句,你的方法是正确的——日心位置是从太阳测量的,而不是从太阳系的中间测量的,所以你做的完全正确!

如果您可以在print错误行上方的 Skyfield 源代码中添加一条语句,那么看看分母中的哪些值对您来说为零会很有趣!

于 2015-03-27T01:47:49.270 回答
0

非常感谢布兰登。配备您的答案后,我很快发现了问题所在:而不仅仅是创建一个 Astrometric 对象:
sun(utc=(1980, 1, 1)).observe(jupiter)
我随后尝试创建一个表观对象:
astrometric = sun(utc=(1980, 1, 1)).observe(jupiter) apparent = astrometric.apparent()
这就是造成错误的原因。

1)这让我感到困惑:
获得的经度和纬度值是:
+151deg 19' 21.7"
01deg 00' 46.7"
我在 JPL Horizo​​n 的在线网站上查了一下,它们得到的值几乎完全相同。
然而,在我使用的(私人编写的,Java)程序中,同样基于 SPiCES JPL 文件,获得的日心经度值为:151deg 02'
在网上搜索日心星历时,我立即遇到了一个(http://www.astro.com/swisseph/ahel/1900/ahel1980.pdf),它也表示 +151deg 02'。
知道为什么有两组值吗?

2) 顺便说一句,stackoverflow 是问这些问题的正确地方吗?

再次感谢!

于 2015-03-27T16:00:39.787 回答