首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用Skyfield实现月球节点的经度

利用Skyfield实现月球节点的经度
EN

Stack Overflow用户
提问于 2017-08-27 21:35:44
回答 1查看 796关注 0票数 0

我试图用Skyfield来找出上升/下降的月球节点的经度,但在文档中找不到任何参考。有可能吗?另外,是否有任何JPL文件已经提供了这些数据?

EN

回答 1

Stack Overflow用户

发布于 2018-01-15 02:48:28

更新:

Skyfield的年鉴模块现在直接支持这个计算!请参阅:月球节点

最初的答案,对于那些想要这些细节的人:

至少很容易找到相对于J2000黄道的数据--在远离2000年的日期中,这可能也很好,因为我认为只有黄道经度的定义会随着时间的推移而变化,而不是纬度(这正是节点所关心的)。

无论如何,你都会像这样走在前面。假设你想要提升节点。它必须在接下来的30天内发生,因为这不仅仅是月球的一个完整轨道,所以让我们来看看月球纬度从负到正的那一天:

代码语言:javascript
复制
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日的某个时候:

代码语言:javascript
复制
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时间,然后将角度返回到一个普通数字:

代码语言:javascript
复制
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())

结果应该是节点的准确时刻:

代码语言:javascript
复制
A.D. 2018-Jan-31 18:47:54.5856 UT
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45909580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档