2

I have a function with the handle @func with initial condition y0 that I want to test over t = [0, tspan]. What, exactly, do I need to do to increase the number of time steps ode45 uses, without changing tspan?

I saw the MATLAB documentation of ode45 and saw that I need to somehow change the options input to ode45. However, I do not really understand how to do this because no example code was provided.

4

1 回答 1

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'属性设置为这些组件的索引。

于 2015-11-04T20:02:34.217 回答