2017-08-27 92 views
0

我试图找出使用Skyfield的上升/下降月球节点的经度,但无法在文档中找到任何参考。可能吗? 也做任何JPL文件已经提供这个数据?使用Skyfield的月球节点的经度

+0

您能否举一个在特定JPL文件中提供的递增节点示例,以及用于访问它的Skyfield代码?这可能有助于人们回答这个问题有更好的开始。谢谢! –

+0

@BrandonRhodes感谢回复。不过,我还没有示例代码或JPL文件。事实上,这正是我正在通过这个问题寻求的。也就是说,我在月球节点skyfield的[nutationlib.py](https://github.com/skyfielders/python-skyfield/blob/master/skyfield/nutationlib.py)上找到了提及。 – Prabhash

+0

当你说“像他们对所有其他行星一样”时,你是否有一个JPL文件的例子,为另一个星球提供了这个文件?如果不是,那么你可能想编辑问题来澄清这个短语,因为它听起来像你找到了一个JPL文件,里面有升降节点。 –

回答

0

至少很容易找到它们相对于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 UT