Различия между Pyephem и Skyfield для расчета древних явлений

Я пытаюсь вычислить древние явления для Вавилона до года 0. И я могу получить что-то, что согласуется с известными записями из Pyephem, но я бы хотел использовать Skyfield, поскольку это, кажется, более современная библиотека. Однако, когда я пытаюсь перевести рабочий код из Pyephem в Skyfield, я получаю совершенно другие результаты. Я не уверен, есть ли проблема с самими датами или неправильные расчеты.

Краткий блокнот Jupyter для процедур можно найти здесь: https://gist.github.com/willismonroe/ae49480cd4cb1c21c5a214a70eb6f3d6


person labarna    schedule 12.09.2020    source источник
comment
Если бы вы могли добавить пояснение, возможно, добавив комментарии к вашему коду Python: вы выполняете операцию phase = angle * 30 над тем, что выглядит как angle в радианах. Что получится, если умножить радианы на 30? Одна из проблем может заключаться в том, что вы намереваетесь там перевести в градусы?   -  person Brandon Rhodes    schedule 12.09.2020
comment
Правильно, я пытался там учиться, возможно, очень простая ошибка? Что сбивает с толку, так это то, что расчеты пифема очень хорошо совпадают с древними записями.   -  person labarna    schedule 12.09.2020


Ответы (1)


Грубый расчет "обратной стороной конверта" предполагает, что Луна, совершая оборот по небу за 29 дней, перемещается примерно на 360 ° ÷ 29 ≈ 12½ градусов в день.

Таким образом, у вашего скрипта Skyfield есть проблема: он печатает дату только в том случае, если долгота Луны относительно Солнца составляет от 6 ° до 14 °, диапазон только 14-6 = 8 ° в ширину. В некоторые месяцы его прыжок на 12½ ° попадает в этот узкий диапазон 8 °, а в некоторые месяцы он вместо этого полностью прыгает через него. Вот почему сценарий Skyfield печатает только одни месяцы, а другие - нет.

Скрипт PyEphem, напротив, берет угол в радианах и умножает его на 30, превращая диапазон 0… 6,28 в диапазон 0… 188,4. Грубо говоря, используемая вами единица измерения - это «двойной градус», 188 из которых составляют полный круг. Луна прыгает всего на 6¼ «двойных градусов» в день, поэтому гарантированно приземлится в диапазоне от 6 до 14 по крайней мере один раз в месяц, потому что прыжка на 6¼ недостаточно, чтобы полностью перепрыгнуть через диапазон.

Я предполагаю, что вам следует попробовать выбрать точный угол в градусах, который вас интересует, например, 6 °, а затем написать небольшую процедуру для определения точной даты и времени, когда он пересекает этот порог каждый месяц. Вот пример, который, надеюсь, поможет вам начать:

https://rhodesmill.org/skyfield/searches.html

person Brandon Rhodes    schedule 12.09.2020
comment
Большое спасибо, это было очень полезно! Мне удалось создать небольшую функцию, которая возвращала бы, взошло ли солнце И если фаза луны была ниже 1 °. Он отлично работал с современными данными, и графики (по вашей ссылке) работали очень хорошо. Это не соответствовало древним источникам, которые я использовал (Паркер и Дубберштейн, Вавилонская хронология), но я подозреваю, что в датировке могут быть ошибки. Я делаю все это потому, что я историк древней астрономии и хотел бы иметь удобные методы проверки древних записей наблюдений, а ваша библиотека кажется идеальной! Спасибо за помощь. - person labarna; 14.09.2020
comment
@labarna - Skyfield использует григорианский календарь, в то время как историки используют юлианский календарь для ранних веков. Я добавляю в Skyfield юлианский календарь и прокомментирую здесь, когда функция будет готова! - person Brandon Rhodes; 14.09.2020
comment
Замечательно, это было бы очень полезно! Если у вас есть проблема с функцией на Github, я бы с удовольствием ее рассмотрел. - person labarna; 14.09.2020
comment
@labarna - В настоящее время нет открытой проблемы, не стесняйтесь создавать ее! - person Brandon Rhodes; 14.09.2020
comment
@BrandonRhodes, не могли бы вы поделиться своим новым кодом в скайфилде? - person pije76; 10.07.2021