Matlab ode45 与 ode23,不同的解决方案

Matlab ode45 vs. ode23, different solutions

我对一组非刚性微分方程使用了 ode45ode23。然而,这两种方法收敛到一个略有不同的解决方案。我怎样才能找出哪一个是正确的?请参阅附图,其中蓝色为 ode45,红色为 ode23。虚线是每个求解器的最终值。还有,ode15s有点不一样(小于1m)...

Matlab 的 ODE 求解器是 adaptive so one specifies tolerances rather than a step size (see also this answer). Given the code in the PDF linked in the comments, if you specify a smaller value for the relative tolerance, the solutions from ode45 and ode23 will converge after the same amount of time. You can use odeset to set 'RelTol':

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

请注意,我还删除了链接代码中使用的全局变量(它们是 bad and inefficient)。您还需要将 secondode 的函数定义更改为:

function z = secondode(t, indata, C, g)
...