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

发布于 2016-01-28 00:23:47
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)
...https://stackoverflow.com/questions/35046020
复制相似问题