【发布时间】:2015-11-04 19:41:20
【问题描述】:
我有一个带有句柄@func 的函数,其初始条件为y0,我想在t = [0, tspan] 上进行测试。确切地说,我需要做什么来增加ode45 使用的时间步数,而不更改tspan?
我看到了 ode45 的 MATLAB 文档,发现我需要以某种方式将 options 输入更改为 ode45。但是,由于没有提供示例代码,我并不真正了解如何执行此操作。
【问题讨论】:
我有一个带有句柄@func 的函数,其初始条件为y0,我想在t = [0, tspan] 上进行测试。确切地说,我需要做什么来增加ode45 使用的时间步数,而不更改tspan?
我看到了 ode45 的 MATLAB 文档,发现我需要以某种方式将 options 输入更改为 ode45。但是,由于没有提供示例代码,我并不真正了解如何执行此操作。
【问题讨论】:
您需要查看 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'属性设置为这些的索引 组件。
【讨论】: