Числа: Как перенормировать следующий ODE


9

Этот вопрос больше о том, как решить проблему численно.

В небольшом проекте я хотел имитировать движение Януса и Эпиметея. Это в основном проблема трех тел. Я выбираю Сатурн, чтобы он был зафиксирован в начале координат, пусть и будут векторами местоположения Януса и Эпиметея, соответственно. Поскольку эффект возникает, когда Янус и Эпиметей находятся очень близко друг к другу, я выбрал относительные координаты для лучшего разрешения, то есть и . Теперь я получаю следующие уравнения движения:r1r2r=r1r2R=r1+r2

d2dT2(рр)знак равно-г(м2±м1)рр3-4Mг(р+р(р+р)3р-р(р-р)3)

где мя соответствует массе лун, M - масса Сатурна, а г - гравитационная постоянная. Проблема возникает, когда я пытаюсь решить это численно. Нужно иметь дело со значениями совершенно разных величин, то есть M~е28 и мя~е17 . А р , р находятся в регионах от 0 до 150 000.

Честно говоря, я не уверен, является ли это форумом для обсуждения таких количественных проблем.

Больше информации:

Код написан на Matlab, и я использую стандартный решатель ODE для получения результата. Однако это ломается, потому что размер шага не может быть уменьшен при точности станка. (Я нахожу это не удивительным, потому что приходится иметь дело с уже упомянутыми порядками величин).


2
Вы запускаете эту симуляцию в единицах СИ? Как минимум, вы должны разделить все на некоторый коэффициент , чтобы вы могли исключить несколько порядков. г*м2

Привет, я это, но это все еще не работает ... Те же проблемы возникают, как и раньше. :(

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

1
Пожалуйста, избегайте сокращений в заголовке. DGL = дифференциальный глагол?

Какой стандартный ODE решатель вы используете?
Джефф Оксберри

Ответы:


2

Ваш текущий подход разрушает числовую стабильность; на самом деле вы, вероятно, потеряете разрешение таким образом.

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


2

Вместо использования «классического» (жесткого) решателя ODE вы можете использовать специальные алгоритмы для геометрического численного интегрирования. Посмотрите, например, эту книгу и коды ВНД, которые вы можете найти на сайте Эрнста Хайрера .


0

Как насчет, если у вас есть три шага в вашей симуляции:

  1. обновить положение Януса, рассчитав силу Януса - Сатурна.
  2. обновить положение Epimetheus путем расчета силы Epimetheus - Saturn.
  3. обновить положение Януса и Эпиметея, рассчитав силу Януса - Эпиметея.

Возможно, используя более мелкие временные шаги для # 3.

Я не уверен, поможет ли это. Я предполагаю, что реальная проблема заключается в том, что величина силы отличается в случае Луны - Луны и Луны - Сатурна, кроме случаев, когда спутники находятся близко?

В качестве альтернативы:

  1. если луны закрываются, вычислите приблизительную луну - силу Сатурна, используя вектор их центра масс, и обновите обе позиции одним и тем же вектором.
  2. если они далеко друг от друга, обновите их отдельно.
  3. как прежде.

Удачи!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.