Пифем 15-минутное расхождение при ручном вычислении равноденствий и солнцестояний - PullRequest
0 голосов
/ 16 января 2019

приведенный ниже код пытается вручную вычислить первое равноденствие 2019 года. Возвращает

('d1 =', 2019/3/20 21:43:48) ('d2 =', 2019/3/20 21:43:49) 2019/3/20 21: 58: 31

то есть расхождение в 15 минут с настоящим равноденствием. Это нормально? Я что-то забыл? Проблема также возникает с солнцестояниями, а также, если я использовал интегрированный метод Ньютона. Может ли это иметь какое-то отношение к эпохе вычислений?

Спасибо

Dennis

import ephem
sun = ephem.Sun()

# computing Spring equinox:
d1 = ephem.Date('2019/03/15')
d2 = ephem.Date('2019/03/25')
a=ephem.degrees('180.0')

for i in range(20):
  #middle date
  d3=(d1+d2)/2
  sun.compute(d3)
  if sun.hlon>a:
      d2=d3
  else:
      d1=d3

print("d1=",ephem.Date(d1))
print("d2=",ephem.Date(d2))
d1 = ephem.next_equinox('2019')
print(d1)

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Большое спасибо, Брэндон, это очень полезно, и я наконец-то получаю правильное значение!Фактически, кажется, что равноденствия определяются тем, что прямое восхождение равно 0, 6, 12, 18, а не гелиоцентрическая долгота равна 0, 90, 180, 270. Существует небольшая разница между ra и hlon, когдаВы запускаете код ниже.Но это приводит к другому вопросу.На странице Википедии https://en.wikipedia.org/wiki/Equinox сказано, что равноденствия определяются долготой 0 или 180. Так кто же прав?

import ephem
sun = ephem.Sun()

d1 = ephem.Date('2019/03/15')
d2 = ephem.Date('2019/03/25')
a=ephem.degrees('0.0') # or 90, or 180, or 270

def spring_equinox(date):
  sun.compute(date)
  return ephem.degrees(sun.ra - a).znorm

d = ephem.newton(spring_equinox, d1, d2)
print(ephem.Date(d))
print sun.ra
print sun.hlon
0 голосов
/ 19 января 2019

Похоже, разница в том, что базовая астрономическая библиотека PyEphem всегда измеряет гелиоцентрическую долготу относительно координат J2000, которая к дате, о которой вы спрашиваете, заметно отличается от координат даты, которые используются для определения равноденствия .

Попробуйте выполнить это в качестве шага вычисления:

sun.compute(d3, epoch=d3)

, а затем ищите, когда sun.ra равно нулю градусов; результат должен быть равноденствием. Я посмотрю, как обновить Справочник PyEphem, чтобы заметить, что гелиоцентрические координаты, похоже, не обращают внимания на параметр epoch=.

...