我有一个带有句柄@func
的函数,其初始条件为y0
,我希望通过t = [0, tspan]
进行测试。我需要做些什么来增加ode45
使用的时间步长的数量,而不更改tspan
?
我看到了ode45
的MATLAB文档,发现我需要以某种方式将options
输入更改为ode45
。但是,我真的不明白如何做到这一点,因为没有提供示例代码。
答案 0 :(得分:4)
您需要查看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'
属性设置为这些属性的索引 组件。