1

我使用ode45andode23用于一组非刚性微分方程。然而,这两种方法都收敛到一个稍微不同的解决方案。我怎样才能知道哪一个是正确的?见附图,蓝色是ode45,红色是ode23。虚线是每个求解器的最终值。此外,ode15s有点不同(小于 1 m)...

在此处输入图像描述

4

1 回答 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 回答