Резюме: Существуют проблемы при интегрировании гамильтоновых систем с нормальными численными интеграторами, и ваши особые начальные условия усугубляют это до такой степени, что численное решение не имеет сходства с правильным.
В вашей реализации как таковой нет ничего плохого. Однако начальные условия, которые вы используете, не самые лучшие. Константы G и M, которые вы используете, выражены в единицах СИ, что означает, что координаты указаны в м, скорости — в м/с, а время — в с. Эти линии
x_0=1;
y_0=1;
vx_0=0;
vy_0=5;
[T,Y] = ode45(@rigid,[0 1000],[x_0 y_0 vx_0 vy_0]);
поэтому означает, что вы запрашиваете орбиту с радиусом около 1,4 метра и орбитальной скоростью 5 м/с, и вам нужна эта орбита в течение 17 минут. Представьте, что на самом деле в нескольких метрах от вас находится объект массой 10^30 кг!
Итак, давайте попробуем задать что-то более реалистичное, например орбиту Земли, и посмотрим при этом более 1 года:
x_0=149.513e9;
y_0=0;
vx_0=0;
vy_0=29.78e3;
[T,Y] = ode45(@rigid,[0 31.536e6],[x_0 y_0 vx_0 vy_0]);
И результат
который выглядит так, как ожидалось.
Но здесь есть вторая проблема. Давайте посмотрим на эту орбиту за период в 10 лет ([0 315.36e6]
):
Теперь мы получаем уже не замкнутую орбиту, а спираль! Это связано с тем, что численное интегрирование выполняется с ограниченной точностью, и для этого набора уравнений это приводит (физически говоря) к потеря энергии. Точность можно повысить с помощью параметров до ode45
, но в конечном итоге проблема останется.
Теперь вернемся к исходным параметрам и посмотрим на результат:
Эта «орбита» представляет собой прямую линию к началу координат (солнцу). Что может быть нормально, поскольку прямое колебание является возможным частным случаем эллиптической орбиты. Но глядя на координаты со временем:
Мы видим, что колебаний нет. «Планета» падает на солнце и остается там. Здесь происходит тот же эффект, что и на большей орбите: неточное интегрирование приводит к потере энергии. Более того, численное интегрирование застревает: мы задали период 1000 с, но интегрирование не продолжается дальше 1,6e-10 секунд.
Насколько я могу судить, ни ode45
, ни другие стандартные интеграторы Matlab не подходят для решения этой проблемы. Существуют специальные алгоритмы численного интегрирования, разработанные специально для гамильтоновых систем и называемые симплектическими интеграторами. Существует запись обмена файлами, обеспечивающая различные реализации. Также см. этот вопрос и ответы для получения дополнительной информации.
person
A. Donda
schedule
14.02.2015