查看单个帖子
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何强制ode45在T轴上采取恰好0.01的步长?

我正在使用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);

回答:

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

tspan = to:0.01:tf; % Obtain solution at specific times [T, Y] = ode45(name, tspan, init, options); 关于使用固定步长时解决方案的准确性,请参考上面链接的摘录:
如果tspan具有两个以上的元素[t0,t1,t2,...,tf] ,则求解器将返回在给定点求值的解。但是,求解器不能精确地步进到tspan指定的每个点。相反,求解器使用其自己的内部步骤来计算解决方案,然后在tspan中的请求点上评估解决方案。在指定点生成的解的精度与在每个内部步骤计算出的解的精度相同。

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

因此,即使您指定要在输出中的特定时间点进行求解,求解器仍在内部在您指示的时间点之间采取许多自适应步骤,接近这些固定时间点的值。



更多&回答...
poster 当前离线   回复时引用此帖