我使用ode45
和ode23
作为一组非刚性微分方程。但是,这两种方法都集中到略有不同的解决方案。我怎样才能找出哪一个是正确的?请参见附图,其中蓝色为ode45
,红色为ode23
。虚线是每个求解器的最终值。此外,ode15s
有点不同(小于1米)......
答案 0 :(得分:0)
Matlab的ODE求解器为adaptive,因此可以指定容差而不是步长(另请参阅this answer)。根据{{3}}中的代码,如果您为相对容差指定较小的值,ode45
和ode23
的解决方案将在相同的时间后收敛。您可以使用PDF linked in the comments设置odeset
:
...
opts = odeset('RelTol', 1e-12);
[t, oput] = ode23(@(t,y)secondode(t,y,C,g), tspan, IC, opts);
...
请注意,我还删除了链接代码中使用的全局变量(它们是'RelTol'
和bad)。您还需要将secondode
的函数定义更改为:
function z = secondode(t, indata, C, g)
...