首页 文章

Matlab - ODE45 - 改变时间步数

提问于
浏览
2

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

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

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中的值替换,OPTIONS是使用ODESET函数创建的参数 . 有关详细信息,请参阅ODESET . 常用选项是标量相对误差容限'RelTol'(默认为1e-3)和绝对误差容限矢量'AbsTol'(默认情况下为所有组件1e-6) . 如果解决方案的某些组件必须是非负的,请使用ODESET将“NonNegative”属性设置为这些组件的索引 .

相关问题