Как вычислить планеты и луны за пределами гравитационной силы Ньютона?

На вопрос « Расчет планет и лун на основе гравитационной силы Ньютона » в значительной степени ответили двумя пунктами:

  1. Используйте разумный решатель ОДУ; не ниже RK4 (классический метод Рунге-Кутты) или выше. Не используйте только метод Эйлера ,
  2. Выразите все векторы положения и скорости всех н тела как единый вектор длины 6 н и решать их одновременно.

Но этого недостаточно, чтобы соответствовать чему-то вроде Horizons из JPL, потому что реальность сложнее, чем простая ньютоновская гравитация между точечными частицами.

Вопрос: Как вычислить планеты и луны за пределами гравитационной силы Ньютона?

Ответы (3)

«Вопрос: как вычислить планеты и луны за пределами гравитационной силы Ньютона?»

Ого, ваш комментарий пригласил дополнительные источники по этому поводу. (Спасибо, кстати, за всю работу и интересные результаты, которые вы дали в своем собственном ответе.)

Вы видели, что делал Стив Мошир (SL Moshier) в начале 1990-х?

Он предоставил полную копию физической модели для (тогдашнего стандарта) численно интегрированных эфемерид JPL DE200/LE200 (использовавшихся в качестве основы для данных Солнечной системы Астрономического альманаха за 1984-2002 годы), включая полный исходный код в C вместе с подходящим интегратором и c), что также позволяет расширить 250-летний временной диапазон, опубликованный JPL для DE200. Интеграция Мошира была независимо сопоставлена ​​с интеграцией Лаборатории реактивного движения за 250-летнюю общую часть временного диапазона Дж. Шапроном из Парижской обсерватории, который обнаружил, что для пяти внешних планет «расхождения никогда не превышают 4,10 ^ -7 дуги». -секунда, которая избыточна", а в худшем случае (луна) расхождения по долготе никогда не превышали 0".008 за 250-летний интервал времени DE200.

Чтобы завершить физическую модель, чтобы она соответствовала тогдашнему стандарту, Моширу пришлось искать информацию/данные сверх того, что было опубликовано, и он признал дополнительные данные из JPL и других источников.

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

Ссылки на интеграцию Moshier DE200 (выполненную как «DE118» в системе отсчета 1950 года, а затем повернутую):

(План работы в): Мошир, С.Л. (1992), «Сравнение 7000-летней лунной эфемериды с аналитической теорией», Астрономия и астрофизика 262, 613-616: на http://adsabs.harvard.edu/abs /1992А%26А...262..613М .

Важные детали реализации с полным (C) исходным кодом отсутствуют в статье 1992 г., но все еще доступны (до написания этой статьи в марте 2018 г.) на веб-сайте автора по адресу http://www.moshier.net , особенно в файлах .

http://www.moshier.net/de118i.zip ;

http://www.moshier.net/de118i-1.zip ;

и http://www.moshier.net/de118i-2.zip ;

с комментариями на http://www.moshier.net/ssystem.html .

(Эти файлы датированы с 1993 по 2004 год, более поздние модификации заключались не в изменении модели, а в адаптации синтаксиса для дальнейших компиляторов, добавлении комментариев и разрешении дополнительных опций, таких как введение дополнительных тел в интеграцию и т. д.)

«Первичная сводная ссылка» для физической модели была:

Newhall, XX, EM Standish и JG Williams (1983), "DE102: численно интегрированная эфемерида Луны и планет, охватывающая сорок четыре века", Astronomy and Astrophysics 125, 150-167, на http://adsabs.harvard .edu/abs/1983A%26A...125..150N .

Матрица вращения для изменения системы отсчета 1950-> 2000 была взята из Стэндиша, Э.М. (1982), "Ориентация эфемерид JPL, DE200/LE200, на динамическое равноденствие J2000", Astronomy and Astrophysics 114, 297-302, at http://adsabs.harvard.edu/abs/1982A%26A...114..297S .

Независимая проверка упоминается в

Чапронт, Дж. (1995), «Представление планетарных эфемерид с помощью частотного анализа. Применение к пяти внешним планетам». Приложение по астрономии и астрофизике, т. 109, 181–192: http://adsabs.harvard.edu/abs/1995A%26AS..109..181C .

«... ваш комментарий привлек дополнительные источники по этому поводу». Действительно, так оно и было, и похоже, что я сорвал джек-пот! Это довольно существенный ответ и дает действительно полезную информацию, мне это нравится! Мне потребуется несколько дней, чтобы отдать ему должное с точки зрения полного прочтения, а также чтения ссылок. Спасибо за ваше время и усилия!
Большое спасибо за высокую оценку, угу. В случае интереса у меня также есть (и я буду искать и публиковать) ссылки, которые указывают на то, как JPL обновила физическую модель в своих последних предложениях. Некоторые из них находятся на ssd.jpl.nasa.gov/pub/eph/planets/ioms , далее вы уже перечислили IPNPR (2014) 42, 196C, а затем есть еще несколько отчетов о непосредственных улучшениях DE118/200. физическая модель, которой нет среди вышеперечисленных, еще предстоит раскопать ... с наилучшими пожеланиями,
Есть интересный новый ответ , который вам может понравиться!

Давайте добавим приближения, чтобы учесть некоторые эффекты общей теории относительности (ОТО) — по крайней мере, для тел, вращающихся вокруг массивного Солнца, — и начнем рассматривать Дж 2 мультипольный член низшего порядка для гравитационного потенциала тела после монопольного члена грамм М / р .

Ньютон:

Ускорение тела в гравитационном поле другого тела стандартного гравитационного параметра грамм М можно написать:

а Н е ж т о н знак равно грамм М р | р | 3 ,

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

Общая теория относительности (приблизительно):

Хотя я не знаком с GR, я собираюсь порекомендовать уравнение, которое, кажется, работает хорошо и, кажется, поддерживается несколькими ссылками. Это приблизительная релятивистская поправка к ньютоновской гравитации, которая используется в моделировании орбитальной механики. Вы увидите различные формы по следующим ссылкам, большинство из которых содержит дополнительные термины, не показанные здесь:

К ньютоновскому члену следует добавить следующее приближение:

а грамм р знак равно грамм М 1 с 2 | р | 3 ( 4 грамм М р | р | ( в в ) р + 4 ( р в ) в ) ,

сплюснутость ( Дж 2 Только):

Я просто использую математику из статьи Википедии о модели геопотенциала с очень важным для запоминания приближением; Я предполагаю, что сплюснутость находится в плоскости эклиптики — что ось вращения сплюснутого тела находится в плоскости эклиптики. г ^ направление, перпендикулярное эклиптике. Не забывайте, что это приблизительно! Полные векторные уравнения более запутаны, чем это, я постараюсь вернуться и обновить это, как только буду уверен, что понял правильно. Между тем, вот приблизительное значение:

р знак равно Икс Икс ^ + у у ^ + г г ^

а Икс знак равно Дж 2 Икс | р | 7 ( 6 г 2 1,5 ( Икс 2 + у 2 ) )

а у знак равно Дж 2 у | р | 7 ( 6 г 2 1,5 ( Икс 2 + у 2 ) )

а г знак равно Дж 2 г | р | 7 ( 3 г 2 4,5 ( Икс 2 + у 2 ) )

К ньютоновскому термину следует добавить следующее:

а Дж 2 знак равно а Икс Икс ^ + а у у ^ + а г г ^

Приливные силы:

Это становится еще более сложным, если рассматривать термины, которые включают несферическое распределение массы в обоих телах одновременно, независимо от того, статичны они или нет. В этот момент, вероятно, необходимо поразить книги.


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

Для данных Земли обязательно загрузите геоцентр Земли и Луны отдельно (не барицентр Земля-Луна). Для внешних планет не забудьте загрузить барицентры.

Скриншот JPL Horizons — Земля

Скриншот JPL Horizons - Юпитер

Я интегрировал в течение года, и все находится в пределах примерно одного километра от данных Горизонтов, кроме земной Луны. Это не удивительно, учитывая все интимные приливные эффекты между этими двумя. Добавление Земли Дж 2 к потенциалу, ощущаемому Луной, помогает лишь частично, это действительно неправильный способ сделать это, особенно учитывая, что ось Земли (и, следовательно, сплюснутость) так далеко от эклиптики.

Так что это в целом иллюстрация того, что чем больше физики вы добавляете, тем ближе вы можете приблизиться к действительно серьезной симуляции JPL! Это абсолютное расстояние между смоделированными позициями здесь и выводом Horizons от 2017-01-01 00:00до 2018-01-01 00:00. Далее следует скрипт Python, который я использовал для его создания.

Скриншот вывода Python


Основываясь на обсуждении жесткости в комментариях ниже, вот краткий график зависимости размера шага от времени. Я думаю, что жесткость исходит из системы Земля-Луна, эти частые отклонения немного напоминают отклонения Земли и Луны. Я думаю, что я попытаюсь масштабировать проблему до безразмерных единиц, прямо сейчас числовой допуск применяется ко всем скоростям и положениям в равной степени, не очень хорошая идея.

введите описание изображения здесь

def deriv_Newton_Only(X, t):
    x,  v  = X.reshape(2, -1)
    xs, vs = x.reshape(-1, 3), v.reshape(-1, 3)
    things = zip(bodies, xs, vs)

    accs, vels = [], []
    for a, xa, va in things:
        acc_a = np.zeros(3)
        for b, xb, vb in things:
            if b != a:
                r = xa - xb
                acc_a += -b.GM * r * ((r**2).sum())**-1.5
        accs.append(acc_a)
        vels.append(va)

    return np.hstack((np.hstack(vels), np.hstack(accs)))

def deriv_sunGRJ2EarthJ2(X, t):
    x,  v  = X.reshape(2, -1)
    xs, vs = x.reshape(-1, 3), v.reshape(-1, 3)
    things = zip(bodies, xs, vs)

    accs, vels = [], []
    for a, xa, va in things:
        acc_a = np.zeros(3)
        for b, xb, vb in things:
            if b != a:
                r = xa - xb
                acc_a += -b.GM * r * ((r**2).sum())**-1.5

        if a.do_SunGR and not a.name == 'Sun':

            a.flag0 = True

            r   = xa - xs[0]
            v   = va - vs[0]
            rsq = (r**2).sum()
            rm3 = rsq**-1.5
            rm1 = rsq**-0.5

            # https://physics.stackexchange.com/q/313146/83380
            # Eq.    1 in https://www.lpi.usra.edu/books/CometsII/7009.pdf
            # Eq.   27 in https://ipnpr.jpl.nasa.gov/progress_report/42-196/196C.pdf
            # Eq. 4-26 in https://descanso.jpl.nasa.gov/monograph/series2/Descanso2_all.pdf
            # Eq. 3.11 in http://adsabs.harvard.edu/full/1994AJ....107.1885S
            
            term_0 = Sun.GM / (clight**2) * rm3
            term_1 = 4.*Sun.GM * r * rm1
            term_2 =   -np.dot(v, v) * r
            term_3 = 4.*np.dot(r, v) * v

            accGR = term_0*(term_1 + term_2 + term_3)
            acc_a += accGR
            
        if a.do_SunJ2 and not a.name == 'Sun':

            a.flag1 = True

            r = xa - xs[0] # position relative to Sun
            x,   y,   z   = r
            xsq, ysq, zsq = r**2

            rsq = (r**2).sum()
            rm7 = rsq**-3.5

            # https://en.wikipedia.org/wiki/Geopotential_model#The_deviations_of_Earth.27s_gravitational_field_from_that_of_a_homogeneous_sphere
            accJ2x = x * rm7 * (6*zsq - 1.5*(xsq + ysq))
            accJ2y = y * rm7 * (6*zsq - 1.5*(xsq + ysq))
            accJ2z = z * rm7 * (3*zsq - 4.5*(xsq + ysq))

            accJ2  = J2s * np.hstack((accJ2x, accJ2y, accJ2z))
            acc_a += accJ2
            
        if a.do_EarthJ2 and not a.name == 'Earth':

            a.flag2 = True

            r = xa - xs[3] # position relative to Earth
            
            x,   y,   z   = r
            xsq, ysq, zsq = r**2

            rsq = (r**2).sum()
            rm7 = rsq**-3.5

            # https://en.wikipedia.org/wiki/Geopotential_model#The_deviations_of_Earth.27s_gravitational_field_from_that_of_a_homogeneous_sphere
            accJ2x = x * rm7 * (6*zsq - 1.5*(xsq + ysq))
            accJ2y = y * rm7 * (6*zsq - 1.5*(xsq + ysq))
            accJ2z = z * rm7 * (3*zsq - 4.5*(xsq + ysq))

            accJ2  = J2e * np.hstack((accJ2x, accJ2y, accJ2z))
            acc_a += accJ2
            
        accs.append(acc_a)
        vels.append(va)

    return np.hstack((np.hstack(vels), np.hstack(accs)))

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint

names = ['Sun', 'Mercury', 'Venus',
         'Earth', 'Moon', 'Mars',
         'Ceres', 'Pallas', 'Vesta',
         'Jupiter', 'Saturn', 'Uranus',
         'Neptune']

GMsDE430 = [1.32712440040944E+20, 2.203178E+13,  3.24858592E+14,
        3.98600435436E+14,    4.902800066E+12,  4.2828375214E+13,
        6.28093938E+10,       1.3923011E+10,    1.7288009E+10, 
        1.267127648E+17,      3.79405852E+16,   5.7945486E+15,
        6.83652719958E+15 ] # https://ipnpr.jpl.nasa.gov/progress_report/42-178/178C.pdf

# for masses also see ftp://ssd.jpl.nasa.gov/pub/xfr/gm_Horizons.pck

# https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/satellites/
# https://naif.jpl.nasa.gov/pub/naif/JUNO/kernels/spk/de436s.bsp.lbl
# https://astronomy.stackexchange.com/questions/13488/where-can-i-find-visualize-planets-stars-moons-etc-positions
# https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/satellites/jup310.cmt
# ftp://ssd.jpl.nasa.gov/pub/xfr/gm_Horizons.pck

GMs = GMsDE430

clight = 2.9979E+08 # m/s

halfpi, pi, twopi = [f*np.pi for f in [0.5, 1, 2]]

# J2 values
J2_sun = 2.110608853272684E-07  # unitless
R_sun  = 6.96E+08 # meters
J2s    = J2_sun * (GMs[0] * R_sun**2)   # is there a minus sign?

J2_earth = 1.08262545E-03  # unitless
R_earth  = 6378136.3 # meters
J2e      = J2_earth * (GMs[3] * R_earth**2)   # is there a minus sign?

JDs, positions, velocities, linez = [], [], [], []

use_outer_barycenters = True

for name in names:

    fname = name + ' horizons_results.txt'

    if use_outer_barycenters:
        if name in ['Jupiter', 'Saturn', 'Uranus', 'Neptune']:
            fname = name + ' barycenter horizons_results.txt'

    with open(fname, 'r') as infile:

        lines = infile.read().splitlines()

        iSOE = [i for i, line in enumerate(lines) if "$$SOE" in line][0]
        iEOE = [i for i, line in enumerate(lines) if "$$EOE" in line][0]

        # print name, iSOE, iEOE, lines[iSOE], lines[iEOE]

        lines = lines[iSOE+1:iEOE]

        lines = [line.split(',') for line in lines]
        JD  = np.array([float(line[0]) for line in lines])
        pos = np.array([[float(item) for item in line[2:5]] for line in lines])
        vel = np.array([[float(item) for item in line[5:8]] for line in lines])

        JDs.append(JD)
        positions.append(pos * 1000.)   # km   to m
        velocities.append(vel * 1000.)  # km/s to m/s
        linez.append(lines)

JD = JDs[0] # assume they are identical

class Body(object):
    def __init__(self, name):
        self.name = name

bodies = []
for name, GM, pos, vel in zip(names, GMs, positions, velocities):
    
    body = Body(name)
    bodies.append(body)
    
    body.GM = GM
    
    body.daily_positions  = pos
    body.daily_velocities = vel
    
    body.initial_position = pos[0]
    body.initial_velocity = vel[0]

x0s = np.hstack([b.initial_position for b in bodies])
v0s = np.hstack([b.initial_velocity for b in bodies])

X0  = np.hstack((x0s, v0s))

ndays   = 365
nperday = 144

time = np.arange(0, ndays*24*3600+1, 24*3600./nperday)
days = time[::nperday]/(24*3600.)

for body in bodies:
    body.do_SunGR   = False
    body.do_SunJ2   = False
    body.do_EarthJ2 = False
    body.flag0      = False
    body.flag1      = False
    body.flag2      = False

Sun, Mercury, Venus, Earth, Moon, Mars = bodies[:6]
Ceres, Pallas, Vesta = bodies[6:9]
Jupiter, Saturn, Uranus, Neptune = bodies[9:]

Mercury.do_SunGR = True
Venus.do_SunGR   = True
Earth.do_SunGR   = True
Moon.do_SunGR    = True
Mars.do_SunGR    = True
Ceres.do_SunGR   = True
Pallas.do_SunGR  = True
Vesta.do_SunGR   = True

Mercury.do_SunJ2 = True

Moon.do_EarthJ2  = True

rtol = 1E-12   # this is important!!!

answer, info = ODEint(deriv_sunGRJ2EarthJ2, X0, time,
                      rtol = rtol, full_output=True)

print answer.shape

nbodies = len(bodies)

xs, vs = answer.T.reshape(2, nbodies, 3, -1)

for body, x, v in zip(bodies, xs, vs):
    body.x = x
    body.v = v
    body.x_daily = body.x[:, ::nperday]
    body.v_daily = body.v[:, ::nperday]
    body.difference = np.sqrt(((body.x_daily - body.daily_positions.T)**2).sum(axis=0))

if True:
    for body in bodies[:6]:
        print body.name, body.flag0, body.flag1, body.flag2

if True:
    plt.figure()
    for i, body in enumerate(bodies[:12]):  # Sorry Neptune!!!
        plt.subplot(4, 3, i+1)
        plt.plot(days, 0.001*body.difference)
        plt.title(body.name, fontsize=14)
        plt.xlim(0, 365)
    plt.suptitle("calc vs JPL Horizons (km vs days)", fontsize=16)
    plt.show()
техническая критика, улучшения, лучшие ссылки/ссылки/источники - все приветствуется!
Вы ограничиваете точность (особенно в отношении долгосрочной точности) при использовании scipy.integrate.odeint. Хотя ОДУ второго порядка можно преобразовать в ОДУ первого порядка, это обязательно приведет к отбрасыванию геометрии.
@DavidHammen, теперь это интригующая вещь, и я почитаю об этом. Я думаю, что методы интеграции, описанные в ответах на вопрос Что означает «симплектический» по отношению к числовым интеграторам, и использует ли их SciPy odeint? являются вторым порядком? Я оставил эту тему и тщательное чтение этих ответов на черный день, когда я смогу провести некоторое время, а сейчас здесь «сезон дождей», так что, возможно, время пришло.
В точку. Симплектический интегратор обязательно по-разному обрабатывает скорость (или линейный импульс) и положение. Ни один из интеграторов scipy.integrate этого не делает; они решают только ОДУ первого порядка. Преобразование ОДУ второго порядка в ОДУ первого порядка выбрасывает геометрию (то, что проблема второго порядка, т. е. что она связана с ускорением, — это геометрия). Не путайте порядок ОДУ с порядком интегратора. Например, симплектический метод Эйлера является интегратором первого порядка для ОДУ второго порядка, а метод Хойна является интегратором второго порядка для ОДУ первого порядка.
Другая потенциальная проблема заключается в том, что вы объединяете все восемь планет плюс Солнце как одно целое. При этом возникает проблема, называемая жесткостью . Период обращения Нептуна в 684 раза больше, чем у Меркурия. Отношение угловых скоростей перигелия Меркурия к скорости Нептуна в афелии близко к 1000. Это по своей сути делает Солнечную систему довольно жесткой системой. Лучший временной шаг для правильного определения орбиты Меркурия — довольно плохой временной шаг для правильного определения орбиты Нептуна, и наоборот.
И последнее, если вас не беспокоят промежутки времени в миллионы лет, симплектичность не так уж важна. Я сомневаюсь, что JPL использует симплектический интегратор. Цель JPL — точно предсказать Солнечную систему на период не более нескольких тысяч лет. То немногое, что они опубликовали по этой теме, указывает на то, что JPL использует интегратор семейства Адамс. Мне еще предстоит прочитать о симплектическом интеграторе Адамса. С другой стороны, существуют интеграторы семейства Адамса, которые обрабатывают положение и скорость отдельно (например, Штермера-Коуэлла, Гаусса-Джексона).
Хороший симплектический интегратор должен удерживать моделируемую солнечную систему от искусственной нестабильности в течение миллионов лет; JPL не заботится об этой проблеме. Они заботятся о точности за гораздо более короткие промежутки времени, что не волнует большинство симплектических интеграторов.
@DavidHammen все отлично, спасибо! Я проверил, вывод возвращает все 2 для mused: вектор индикаторов метода для каждого успешного временного шага: 1: adams (нежесткий), 2: bdf (жесткий). В этом случае, вероятно, система Земля-Луна удерживает интегратор таким занятый. Я также заметил, что они, наконец, добавили опцию плотного вывода и интерполятор для некоторых опций интегратора.
После испытания с интегратором с переменным шагом (автоматически уменьшая размер шага и порядок интегрирования, когда проблема становится более жесткой), у меня сложилось впечатление, что проблема, возможно, была самой жесткой, когда Меркурий был около перигелия, очевидно, соглашаясь с тем, что предложил @david-hammen. Однако я этого не понимаю, потому что старые аналитические теории, кажется, не показывают Меркурия как сильно возмущенного.
@ terry-s -- Во-первых , Меркурий возмущен орбитами других планет. Ньютоновская прецессия орбиты Меркурия составляет 532 угловых секунды за столетие, что более чем в 12 раз превышает прецессию в 43 угловых секунды за столетие, вызванную общей теорией относительности. Во-вторых, даже если бы не было никакого взаимодействия, задача все равно была бы жесткой из-за очень разных характеристических частот. Числовой интегратор будет иметь временной шаг, при котором он работает лучше всего для данной характеристической частоты. (продолжение)
(продолжение) Предположим, что этот оптимальный шаг составляет 300 шагов на орбиту. Оптимальная работа для Нептуна означала бы один шаг через каждую вторую орбиту для Меркурия. Это явно плохо. Оптимальная работа для Меркурия будет означать более 200 000 шагов на орбиту для Нептуна. Нет, так очевидно, это тоже плохо. Нет золотой середины, когда характерные частоты охватывают три порядка величины.
@DavidHammen Я добавил график размеров шагов внизу вместе с комментарием о переходе к безразмерным единицам измерения. Это уродливый сценарий, но он был невероятно поучительным.
@david-hammen: я не писал, что Меркьюри не встревожен, но мне казалось, что он «[не] сильно встревожен». Действительно, если вы посмотрите на амплитуды членов возмущений на Меркурии, возникающих в теории Ньюкомба (начиная со стр. 176, babel.hathitrust.org/cgi/… ), вы увидите, что они в целом меньше, чем амплитуды возмущений на других планетах. . Я согласен с тем, что использование чрезмерно малых шагов для Нептуна неоптимально, но, возможно, проблема не в жесткости, а в избыточном округлении от слишком большого количества шагов.
@ terry-s -- Чрезмерное округление из-за слишком большого количества шагов, один из многих аспектов «жесткости».
Как вы получаете фазы луны из этого?
@blademan9999 Спросите в Astronomy SE, но сначала проверьте существующие вопросы и ответы там, я знаю, что было несколько о том, как сделать эфемериды для лунной фазы. "фаза луны"

Я просто хочу добавить, что релятивистский поправочный член, упомянутый в ответе uhoh, который представляет собой «постньютоновское расширение» на уровне «1PN», аппроксимирует релятивистские эффекты путем введения отталкивающего 1 / р 3 срок. Выражение используется JPL, поэтому вы должны использовать его, если хотите максимально приблизиться к эфемеридам. Даже если вы правильно понимаете «аномальное смещение перигелия», вы получаете очень странные эффекты «подпрыгивания» в пределе сильного поля, поэтому выражение, вероятно, в основном работает в слабых полях нашей Солнечной системы. Я выполнил несколько симуляций ниже, зеленый кружок — это радиус Шварцшильда, а красный кружок — это радиус «самой внутренней стабильной круговой орбиты», расположенной на радиальном расстоянии в три радиуса Шварцшильда. Увиденное «подпрыгивание», очевидно, происходит из-за отталкивающего члена обратного куба. При большем начальном угловом моменте орбиты становятся менее странными .

введите описание изображения здесь

Спасибо за ваш вклад! Действительно, вы правы в том, что ответ, который я опубликовал, касается только того, «как рассчитать планеты и луны за пределами гравитационной силы Ньютона» до некоторого уровня приближения. Я люблю сюжеты! Я не пробовал симуляцию с гораздо более сильным полем, но, конечно, имеет смысл, что использование только расширения низкого порядка приведет к некоторым сумасшедшим результатам при использовании за пределами его полезного диапазона. Я не думал об этом, но довольно забавно, что усечение приводит к отталкивающему поведению и вещам, «отскакивающим от Солнца» (если бы Солнце было в миллион раз массивнее). Спасибо!