如何比较 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');
我正在像这样用 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');