Matlab ode45 против ode23, различные решения

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

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

1 ответ

Решение

Решатели Matlab для ODE являются адаптивными, поэтому задаются допуски, а не размер шага (см. Также этот ответ). Учитывая код в PDF, связанный в комментариях, если вы укажете меньшее значение для относительного допуска, решения из ode45 а также ode23 будет сходиться через столько же времени. Ты можешь использовать odeset установить 'RelTol':

...
opts = odeset('RelTol', 1e-12);
[t, oput] = ode23(@(t,y)secondode(t,y,C,g), tspan, IC, opts);
...

Обратите внимание, что я также избавился от глобальных переменных, используемых в связанном коде (они плохие и неэффективные). Вам также нужно изменить определение функции для secondode чтобы:

function z = secondode(t, indata, C, g)
...
Другие вопросы по тегам