Python PyEphem расчет азимута и высоты

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

В этом примере вычисляется азимут и высота объекта для данного наблюдателя 10 августа 1998 года в 23:10 UT. Даны следующие параметры:

RA = 16 ч 41,7 мин, DEC = 36 д 28 мин

Широта наблюдателя 52 д 30 мин северной широты и 1 д 55 мин западной долготы.

Правильный ответ в соответствии с примером (который я могу воссоздать в Excel): AZ = 269,14634 градуса, ALT = 49,169122 градуса.

Я написал следующий код, используя pyephem, чтобы попытаться достичь того же результата:

day = '1998/8/10 23:10:00'
longitude = ephem.degrees('-1.91667')
latitude = ephem.degrees('52.5')

star = ephem.FixedBody()
star._ra = '16:41:42.0'
star._dec = '36:28:00.0'

observer = ephem.Observer()
observer.date = day
observer.lon = longitude
observer.lat = latitude

star.compute(observer)

print 'Observer', observer
print 'RA', star.ra, 'DEC', star.dec
print 'AZ', star.az, 'ALT', star.alt

Запуск программы дает мне такой вывод:

>>> 
Observer <ephem.Observer date='1998/8/10 23:10:00' epoch='2000/1/1 12:00:00' lon=-1:55:00.0 lat=52:30:00.0 elevation=0.0m horizon=0:00:00.0 temp=15.0C pressure=1010.0mBar>
RA 16:41:39.23 DEC 36:28:33.5
AZ 269:09:54.9 ALT 49:10:57.7

Результаты для AZ + ALT, очевидно, приблизительны к примеру, но далеко не идентичны. Я также озадачен тем фактом, что RA и DEC немного изменены в распечатке по сравнению с тем, что я ввел.

Если кто-то может помочь мне пролить свет на то, почему результаты отличаются, и что я могу или должен сделать, чтобы воспроизвести результаты, я был бы очень признателен. Благодарю.

РЕДАКТИРОВАТЬ: Исправлена ​​опечатка, указанная в ответе ниже. Вопрос все еще актуален.

РЕДАКТИРОВАТЬ 2: Хорошо, я прочитал (и вроде понял), почему правильное восхождение и склонение регулируется PyEphem из этой ссылки. Что я не понимаю, так это то, что есть ли способ заставить PyEphem игнорировать настройку релятивистского отклонения, нутации и аберрации света так же, как вы можете заставить его игнорировать атмосферную рефракцию? Я предполагаю, что разница в азимуте связана с корректировкой RA и DEC, но было бы неплохо подтвердить.

3 ответа

Решение

Библиотека C, лежащая в основе PyEphem, не имеет никакого способа отключить отклонение, аберрацию или нутацию - возможно, потому, что Nature также не позволяет отключить эти эффекты, но я не уверен! Я отмечу, что он не выполняет эти расчеты для спутника на околоземной орбите, но я не могу придумать, как вам легко установить спутник с точным значением RA и отклониться выше вашей позиции, чтобы вы могли спросить PyEphem о его месторасположение.

На самом деле я провожу эту неделю в DjangoCon, чтобы поговорить об API и подумать о том, как PyEphem может когда-нибудь упростить доступ к его внутренним функциям из Python, вместо того, чтобы оставлять все эти интересные шаги запертыми внутри кода C. Но, пока у меня нет альтернативы, единственный способ выполнить то, что вы хотите, это открыть исходный файл. circum.c и закомментируйте эти строки:

/* allow for relativistic light bending near the sun */
deflect (mjed, lam, bet, lsn, rsn, 1e10, &ra, &dec);

/* TODO: correction for annual parallax would go here */

/* correct EOD equatoreal for nutation/aberation to form apparent 
 * geocentric
 */
nut_eq(mjed, &ra, &dec);
ab_eq(mjed, lsn, &ra, &dec);

Если эти три звонка - deflect(), nut_eq(), а также ab_eq() начиная со строки 263 - закомментированы, тогда вы можете получить ответ, намного более близкий к ответу, приведенному в этой статье. Вы бы применили эти изменения:

  • Загрузка .tar.gz для PyEphem.
  • Распакуйте архив для создания файлов.
  • Сделайте редактирование, которое я предлагаю выше.
  • Бежать python setup.py install установить пользовательскую версию программного обеспечения.
  • Попробуйте!

Там может быть еще одно препятствие, если прецессия каким-то образом вступает в игру - вам может понадобиться установить эпоху вашего star возражать точно '1998/8/10 23:10:00' в этом случае - но попробуйте сначала отключить три звонка с световыми эффектами и посмотрите, приблизит ли это вас!

Тот факт, что наблюдатель включает "temp=15.0C давление =1010.0mBar", подразумевает, что расчет будет включать в себя преломление. Вы хотите отключить рефракцию

как описано в справке:

Эти очевидные положения включают в себя настройку для имитации атмосферной рефракции для температуры и давления наблюдателя; установите давление наблюдателя на ноль, чтобы игнорировать рефракцию.

Вы хотели ввести: RA = 16 ч 41,7 мин

но вы ввели: star._ra = '16:41.42.0'

вместо star._ra = '16:41:42.0'

Другие вопросы по тегам