我使用ode45
andode23
用于一组非刚性微分方程。然而,这两种方法都收敛到一个稍微不同的解决方案。我怎样才能知道哪一个是正确的?见附图,蓝色是ode45
,红色是ode23
。虚线是每个求解器的最终值。此外,ode15s
有点不同(小于 1 m)...
问问题
2151 次
1 回答
0
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)
...
于 2016-01-28T00:23:47.027 回答