Matlab - ODE45 - 改变时间步数

Matlab - ODE45 - change the number of time steps

我有一个句柄 @func 的函数,我想在 t = [0, tspan] 上测试它的初始条件 y0。在不改变 tspan 的情况下,我究竟需要做什么才能增加 数量 的时间步长 ode45

我看到了 ode45 的 MATLAB 文档,发现我需要以某种方式将 options 输入更改为 ode45。但是,我不太明白如何做到这一点,因为没有提供示例代码。

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

这个 (MATLAB R2015a) 的文档说:

MaxStep - Upper bound on step size [ positive scalar ]

MaxStep defaults to one-tenth of the tspan interval in all solvers.

因此,您可以使其小于 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) solves as above with default integration properties replaced by values in OPTIONS, an argument created with the ODESET function. See ODESET for details. Commonly used options are scalar relative error tolerance 'RelTol' (1e-3 by default) and vector of absolute error tolerances 'AbsTol' (all components 1e-6 by default). If certain components of the solution must be non-negative, use ODESET to set the 'NonNegative' property to the indices of these components.