Как правильно интегрировать астрономические симуляции?

15

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

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

Сила проста: fr = sum(G * body.m * bodyi.m / dist(body, bodyi)^2).

Но как мне идти дальше?

Я мог бы сделать это:

a = Fr/body.m
v += a*dt
position += v*dt

Но это, конечно, было бы ложным. Может быть, если бы я добавил 0,5 в качестве фактора при расчете позиции?

jcora
источник
Это слишком смешно, чтобы не комментировать: это действительно распространенная астрономическая проблема для моделирования движения "растений" ;-)
Вольфганг Бангерт

Ответы:

17

По сути, вы получили ответ - нет необходимости в коэффициент 0,5.

По сути, у вас есть двумерная система ОДУ первого порядка:

Икс˙знак равноvv˙знак равноFм,
м
ИксN+1-ИксNΔTзнак равноvNvN+1-vNΔTзнак равноFNм,
ИксN+1знак равноИксN+ΔTvNvN+1знак равноvN+ΔTFNм,
N

TNTN+1TN+1/2Икс0v1/2

ИксN+1знак равноИксN+ΔTvN+1/2vN+1/2знак равноvN-1/2+ΔTFNм

v1/2v0

ωзнак равнограммMр3,
Mр

источник
Эй, можешь объяснить, почему мне не нужен 0.5фактор? Похоже, что вы делаете то же самое, что и скорость, n-1/2dtизмеренную секундами назад, как вы и предлагаете.
jcora
(N-1)vNvN+1vN0