Долгота лунных узлов с использованием Skyfield

Я пытаюсь определить долготу восходящих / нисходящих узлов Луны с помощью Skyfield, но не могу найти никаких ссылок в документации. Является ли это возможным? Также есть ли эти данные в файлах JPL?


person Prabhash    schedule 27.08.2017    source источник
comment
Не могли бы вы привести пример восходящего узла, который предоставляется в конкретном файле JPL, и код Skyfield для доступа к нему? Это может помочь людям лучше начать отвечать на вопрос. Спасибо!   -  person Brandon Rhodes    schedule 28.08.2017
comment
@BrandonRhodes благодарит за ответ. Однако у меня еще нет примера кода или файла JPL. Фактически, это то, что я ищу с помощью этого вопроса. Тем не менее, я нашел упоминания о лунных узлах Skyfield nutationlib.py.   -  person Prabhash    schedule 28.08.2017
comment
Когда вы говорите «как они делают для всех других планет», есть ли у вас пример файла JPL, который предоставляет это для другой планеты? В противном случае вы можете отредактировать вопрос, чтобы немного уточнить эту фразу, потому что это звучит так, как будто вы нашли файл JPL с восходящими и нисходящими узлами внутри.   -  person Brandon Rhodes    schedule 28.08.2017
comment
@BrandonRhodes, извини, я не это имел в виду. Я отредактировал вопрос, чтобы теперь было понятно.   -  person Prabhash    schedule 28.08.2017
comment
рекомендации сторонних материалов здесь не по теме, так что + Close. К сожалению, получить правильные данные о Луне - действительно большое дело. Лучшее, что вы можете сделать, это взять несколько эфемерид Луны и протянуть через них эллипс ... но это сработает лишь на время ...   -  person Spektre    schedule 29.08.2017
comment
@Spektre Вы можете добиться большего успеха, чем подгонка эллипса, используя файлы JPL DE (или HORIZONS / geomfinder / аналогичные). Перенесите это в Astronomy.SE просто для удовольствия, хотя я согласен, что для хорошего вопроса нужны более подробные сведения.   -  person    schedule 29.08.2017


Ответы (1)


Обновление:

Модуль альманаха 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])

В результате обнаруживается, что восходящий узел должен произойти где-то 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
person Brandon Rhodes    schedule 15.01.2018