Matlab - ODE45 - 改变时间步数

Posted

技术标签:

【中文标题】Matlab - ODE45 - 改变时间步数【英文标题】:Matlab - ODE45 - change the number of time steps 【发布时间】:2015-11-04 19:41:20 【问题描述】:

我有一个带有句柄@func 的函数,其初始条件为y0,我想在t = [0, tspan] 上进行测试。确切地说,我需要做什么来增加ode45 使用的时间步数,而不更改tspan

我看到了 ode45 的 MATLAB 文档,发现我需要以某种方式将 options 输入更改为 ode45。但是,由于没有提供示例代码,我并不真正了解如何执行此操作。

【问题讨论】:

【参考方案1】:

您需要查看 odeset,它创建了用于 ODE 求解器的选项结构,例如 ode45。您正在考虑更改 MaxStep 参数。

此文档(MATLAB R2015a)说:

MaxStep - 步长上限 [正标量]

MaxStep 在所有求解器中默认为 tspan 区间的十分之一。

因此,您可以将其设置为小于 0.1*tspan... 之类的 1e-6 或类似的东西。这取决于tspan 是什么,因此如果要增加时间步/输出点的总数,则需要使其小于0.1*tspan

因此,创建一个odeset 结构并覆盖MaxStep 参数。其余值将保持默认值:

options = odeset('MaxStep', 1e-6);

现在您已经完成了,请致电ode45 解决您的问题:

[tout,yout] = ode45(@func, tspan, y0, options);

只需使用MaxStep,直到获得所需的粒度。

小提示

虽然有点隐蔽,但文档确实会告诉您如何更改选项。这是讨论如何使用选项调用ode45 的部分。请注意以粗体突出显示的内容。这是 MATLAB R2015a 的文档:

[TOUT,YOUT] = ode45(ODEFUN,TSPAN,Y0,OPTIONS) 默认解决如上 由OPTIONS 中的值替换的集成属性,创建了一个参数 使用ODESET 函数。详情请参阅ODESET。常用选项 是标量相对误差容限'RelTol'(默认为1e-3)和向量 绝对误差容限'AbsTol'(默认所有组件1e-6)。 如果解决方案的某些组件必须是非负的,请使用 ODESET'NonNegative' 属性设置为这些的索引 组件。

【讨论】:

以上是关于Matlab - ODE45 - 改变时间步数的主要内容,如果未能解决你的问题,请参考以下文章

Matlab ode45 基本设置

MATLAB 中的 Ode45

如何在 MatLab 中使用 ode45 修复分配错误(ode45 函数的第 488 行)

matlab欧拉方程求解微分方程并和ode45对比结果

如何在 Matlab 中设置 ode 函数 [关闭]

matlab ode45求解常微分方程模板