Https://towardsdatascience.com/tagged/space-science-with-python

Космическая наука с Python - взгляд на первый закон Кеплера

Вторая часть серии руководств по Python

Предисловие

Это вторая часть моей серии руководств по Python Космическая наука с Python. Все коды, которые здесь показаны, загружены на GitHub. Наслаждайтесь!

Вступление

Орбита планеты представляет собой эллипс с Солнцем в одном из двух фокусов.

Это первый (из трех) законов движения планет Кеплера. 400 лет назад Иоганн Кеплер вывел законы на основе долгосрочных наблюдений, проведенных им и Тихо Браге. Он использовал огромное количество данных о местоположении планет, определенных вручную, которые привели его к своим выводам. Представьте, что вы - аналитик данных с тоннами распечатанных листов Excel, без компьютера, с некоторыми механическими математическими устройствами и некоторым терпением. Никакой оптимизации графического процессора или облачных вычислений. Это была настоящая приверженность науке.

Но действительно ли Солнце действительно и исключительно находится в центре нашей Солнечной системы? Принимая во внимание закон механики Ньютона, наша родная планета, астероиды, планеты, а также Солнце вращаются вокруг общего центра тяжести. Солнце содержит более 99% массы Солнечной системы. Так является ли таким значительным возможное движение так называемого барицентра Солнечной системы (SSB) относительно центра Солнца? Сегодня мы ответим на этот вопрос, используя наши навыки Python и знания SPICE из первого руководства.

Подготовка

В прошлый раз мы узнали о SPICE и его способе вычисления различных параметров с помощью так называемых ядер. Необходимые ядра загружаем с помощью функции SPICE фурнш. Каждое ядро ​​загружалось индивидуально. Однако для более крупных проектов может потребоваться загрузка десятков ядер. Это приведет к раздуванию нашего кода Python, и можно легко потерять его из виду. Чтобы предотвратить это, SPICE представил метафайлы ядра. Мета-файл содержит относительные или абсолютные пути к нужным ядрам. В этом руководстве каждая часть имеет свой собственный метафайл, который устанавливает относительный путь к каталогу _kernels. Давайте посмотрим на метафайл:

Первые 6 строк начинаются с команды \ begintext. Следующий текстовый блок представляет собой раздел комментариев, в который можно добавить любую информацию, относящуюся к проекту. Последний блок начинается с \ beginindata. Это указывает SPICE, что все следующие части относятся к части кодирования. KERNELS_TO_LOAD перечисляет все файлы ядра, которые используются в этой части руководства. Обратите внимание: если вы загружаете ядра, содержащие аналогичную информацию (например, вы случайно загружаете сначала ядро ​​naif0012.tls, а затем ядро ​​naif0011.tls), SPICE учитывает порядок и выбирает последнее.

Давайте начнем

Теперь мы готовы к нашему проекту. Прежде всего, нам нужно импортировать необходимые модули. Если вы еще не установили NumPy, установите его через pip3. Он нам понадобится часто. Затем функция furnsh используется для загрузки нашего вновь созданного метафайла ядра.

Для вычисления позиции нам нужно установить начальную / начальную и конечную отметку времени. Здесь мы устанавливаем дату 2000–01–01 (полночь) по всемирному координированному времени и складываем 10 000 дней (около 27,5 лет; это значение выбрано мной случайно). Эти вычисления могут быть выполнены с помощью библиотеки Python datetime. После этого начальное и конечное время преобразуются в строки в строке 14 и 15 соответственно. Наконец, строки UTC преобразуются в соответствующее время эфемерид.

Зачем нужны ядра с дополнительными секундами? В сутках 24 часа, в году 365 дней и каждые 4 года добавляется еще один день. Это касается нашей повседневной жизни. С детальной научной точки зрения наша Земля вращается вокруг себя и вокруг Солнца с немного различающимся временем, которое необходимо компенсировать. Сколько времени добавлено к этому интервалу в 10 000 дней, начиная с тысячелетия?

В сутках 86400 секунд. Это значение, умноженное на 10 000 дней, дает 864 000 000 секунд. Вычитание начального времени в ET из конечного времени в ET (строка 5) дает 864 000 005,0012845 секунд. Добавлено примерно 5 секунд. Это не критично для нашего руководства, но в некоторых высокоточных научных областях на счету каждая миллисекунда.

Наконец, мы установили массив NumPy, который содержит 10 000 временных шагов между временем начала и окончания.

Теперь мы готовы вычислить положение барицентра Солнечной системы (SSB) в направлениях x, y, z относительно центра Солнца. Для этого мы вычисляем положение с помощью функции SPICE spkgps (в прошлом уроке мы использовали аналогичную функцию spkgeo, которая возвращает вектор состояния (положение и скорость)) . Для этой функции требуются следующие входные параметры:

  • targ: идентификационный код NAIF SSB (0). В сложной документации SPICE перечислены все доступные идентификационные коды Солнечной системы, а также миссии космических кораблей.
  • et: время эфемерид.
  • ref: интересующая вас система отсчета. В нашем случае мы вычисляем позицию в ECLIPJ2000. Итак, плоскость эклиптики нашей родной планеты - это плоскость отсчета.
  • obs: идентификатор Солнца NAIF (10).

spkgps возвращает позицию SSB относительно точки. Солнце в определенное время в эфемеридах, вычисленное в системе отсчета ECLIPJ2000. Второе выходное значение - это так называемое световое время, в котором хранится время прохождения света между центром Солнца и SSB. Поскольку нам не нужно это значение, мы используем одинарное подчеркивание.

Давайте напечатаем результат в начальный момент времени, чтобы получить представление о компонентах x, y, z и расстоянии.

Получаем такой вывод:

Position (components) of the Solar System Barycentre w.r.t the
centre of the Sun (at initial time): 
X = 1068000.0 km
Y = 417681.0 km
Z = -30845.0 km

Distance between the Solar System Barycentre w.r.t the
centre of the Sun (at initial time): 
d = 1147185.0 km

Что ж ... у нас есть несколько больших цифр. Расстояние между центром Солнца и SSB более 1 миллиона километров (примерно в 3 раза больше расстояния между Землей и Луной). Это… много?

Понимание больших чисел в астрономии в основном приводит к масштабированию, например, 1 астрономическая единица (AU) или 1 световой год. Здесь мы можем определить наш собственный масштаб, используя радиус Солнца (около 700 000 км). Радиус Солнца можно извлечь из соответствующего ядра SPICE.

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

Ответ сложен. Существуют разные методы определения поверхности Солнца. Гелиосейсмологические измерения, временные измерения прохождения ртути или связывание определения поверхности с определенным слоем фотосферы (где можно наблюдать конвективные ячейки и солнечные пятна) приводят к различным результатам. В 2015 году Международный астрономический союз установил радиус 695 700 км, период. Немного сдвинутое значение (696 000 км) сохраняется в ядре SPICE pck00010.tpc, которое загружается в начале нашего руководства.

С помощью функции bodvcd мы можем извлечь радиус Солнца. Для функции требуются 3 параметра:

  • bodyid: идентификатор Солнца в NAIF (10).
  • item: «RADII» сообщает функции, что нам нужна информация о радиусе Солнца.
  • maxn: количество ожидаемых возвращаемых параметров. Поскольку мы получаем значения радиуса эллипсоида (направления x, y, z), число устанавливается равным 3.

Первый выходной параметр представляет количество возвращаемых значений и не требуется. Мы используем единственный символ подчеркивания, чтобы игнорировать это значение. Поскольку все значения радиусов одинаковы, мы используем первую запись как радиус Солнца.

Теперь мы можем построить Солнце и траекторию SSB. Для этой задачи мы используем matplotlib. Мы создаем двухмерную проекцию наших результатов и наносим на график только координаты x-y (движение на плоскости эклиптики).

В следующем фрагменте кода показано, как создается график ниже. Добавляем желтый кружок, представляющий Солнце. Поскольку расстояния масштабируются относительно радиуса Солнца, мы можем просто использовать радиус 1.

График показывает траекторию синим цветом, и можно легко увидеть, что SSB не все время находится внутри Солнца (хотя Солнце содержит более 99% массы Солнечной системы)!

Каков процент времени, в течение которого SSB остается вне Солнца? Давайте посмотрим:

Итого: около 65%! Поразительный результат.

Заключение

Надеюсь, вам понравился сегодняшний урок. Мы использовали некоторые уже известные функции SPICE из предыдущего урока и углубили наши знания. Мы продолжим это делать и будем постепенно наращивать «фундамент знаний» для более сложных задач.

Итак, отвечая на вопрос с самого начала: Находится ли Солнце в центре в одном из фокусов орбит? Что ж, это барицентр Солнечной системы. Солнце «качается» вокруг этого центра. Означает ли это, что законы Кеплера неверны? Что ж, это наука: вы постулируете теорию, которая описывает природу, пока она не будет доказана или улучшена. Для невысоких измерений и компьютерных моделей Солнце можно легко поместить в центр нашей Солнечной системы.

Следующее руководство будет опубликовано 29 апреля 2020 года. Следите за обновлениями и желаю вам хороших выходных,

Томас