如何比较 Matlab ode 求解器的结果

How to compare results from Matlab ode solvers

我正在像这样用 Matlab 求解微分方程组

tspan = [0 10];    
res = ode15s(@(t,x) func,tspan,x0);

我有另一个系统,与 @func 中指定的系统略有不同,解决方法如下

res2 = ode15s(@(t,x) func2,tspan,x0);

我想通过计算每个时间步的差异来比较结果。但是由于 Matlab 求解器是可变时间步长,因此 res.y(解)矩阵具有不同的列数。我怎样才能使结果具有可比性?我试过了

tspan = [0:0.01:10];  

但求解器似乎仍然使用可变时间步长。那么我怎样才能使结果具有可比性呢?提前谢谢你。

编辑:我想澄清一下,我不需要强制求解器采取任何特定步骤,只需要一种方法来插入结果或其他东西。换句话说,this 对我没有帮助。

如果速度不是问题,您可以多次求解每个方程,将 tspan 设置为 [0 tf],其中 tf[0:0.01:10] 的元素。这将保证解决方案的最后一个值是您需要的值:

tsteps = [0:0.01:10]
for tf in tsteps:
    tspan = [0 tf];
    res = ode15s(@(t,x) func, tspan, x0);
    res2 = ode15s(@(t,x) func2, tspan, x0);
    % Extract whatever you need here
end
% Compare what you extracted here

使用Matlab的内置样条插值:

tFine = 0:0.01:10;
resFine = interp1(res.x,res.y,tFine,'spline');
res2Fine = interp1(res2.x,res2.y,tFine,'spline');