如何强制ode45在T轴上采取0.01的步长?

Con*_*ngo 5 matlab

我正在使用Matlab来解决微分方程.我想强制ode45采取恒定步长,因此在求解方程时它总是在T轴上增加0.01.我该怎么做呢?

ode45始终采用优化的随机步骤,我似乎无法弄清楚如何使其采取0.01的一致,小步骤.这是代码:

options= odeset('Reltol',0.001,'Stats','on');

%figure(1);
%clf;
init=[xo yo zo]';
tspan=[to tf];
%tspan = t0:0.01:tf;

[T,Y]=ode45(name,tspan,init,options);
Run Code Online (Sandbox Code Playgroud)

gno*_*ice 12

根据文档,ode45在求解方程时,您似乎无法控制内部步骤的大小,但您可以控制生成输出的时间点.您可以按照注释掉的行中的说明执行此操作:

tspan = to:0.01:tf;  % Obtain solution at specific times
[T, Y] = ode45(name, tspan, init, options);
Run Code Online (Sandbox Code Playgroud)

关于使用固定步长时解决方案的准确性,请参阅以上链接中的摘录:

如果tspan有两个以上的元素[t0,t1,t2,...,tf],则求解器返回在给定点评估的解.但是,求解器不会精确地指向每个指定的点tspan.相反,求解程序使用自己的内部步骤来计算解决方案,然后在所请求的点处评估解决方案tspan.在指定点生成的解与在每个内部步骤计算的解具有相同的精度.

指定几个中间点对计算效率几乎没有影响,但对于大型系统,它可能会影响内存管理.

因此,即使您指定要在输出中的特定时间点使用解决方案,解算器仍然会您指示的时间点之间内部采取一些自适应步骤,接近这些固定时间点的值.


Bre*_*dan 5

ode45总是使用自适应步长,文档解决了这个问题,并推荐其他求解器用于固定步长 - 参见ode4(四阶Runge-Kutta),这是解决大多数颂歌的相当安全的选择 - 至少根据Numerical Recipes