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)
...