我试图用Skyfield来找出上升/下降的月球节点的经度,但在文档中找不到任何参考。有可能吗?另外,是否有任何JPL文件已经提供了这些数据?
发布于 2018-01-15 02:48:28
更新:
Skyfield的年鉴模块现在直接支持这个计算!请参阅:月球节点
最初的答案,对于那些想要这些细节的人:
至少很容易找到相对于J2000黄道的数据--在远离2000年的日期中,这可能也很好,因为我认为只有黄道经度的定义会随着时间的推移而变化,而不是纬度(这正是节点所关心的)。
无论如何,你都会像这样走在前面。假设你想要提升节点。它必须在接下来的30天内发生,因为这不仅仅是月球的一个完整轨道,所以让我们来看看月球纬度从负到正的那一天:
from skyfield.api import load
ts = load.timescale()
eph = load('de421.bsp')
earth = eph['earth']
moon = eph['moon']
t = ts.utc(2018, 1, range(14, 14 + 30))
lat, lon, distance = earth.at(t).observe(moon).ecliptic_latlon()
angle = lat.radians
for i in range(len(angle)):
if angle[i] < 0 and angle[i+1] > 0:
break
print(t[i].utc_jpl(), angle[i])
print(t[i+1].utc_jpl(), angle[i+1])其结果是发现上升节点必须发生在1月31日的某个时候:
A.D. 2018-Jan-31 00:00:00.0000 UT -0.0188679292421
A.D. 2018-Feb-01 00:00:00.0000 UT 0.00522392011676要找到确切的时间,请安装SciPy库,并要求它的一个求解器找到值达到零的确切时间。您只需创建一个小函数,该函数接受一个数字并返回一个数字,方法是将该数字转换为Skyfield时间,然后将角度返回到一个普通数字:
from scipy.optimize import brentq
def f(jd):
t = ts.tt(jd=jd)
angle, lon, distance = earth.at(t).observe(moon).ecliptic_latlon()
return angle.radians
node_t = brentq(f, t[i].tt, t[i+1].tt)
print(ts.tt(jd=node_t).utc_jpl())结果应该是节点的准确时刻:
A.D. 2018-Jan-31 18:47:54.5856 UThttps://stackoverflow.com/questions/45909580
复制相似问题