【问题标题】:Time step computation in Matlab ODE solverMatlab ODE求解器中的时间步计算
【发布时间】:2016-02-17 12:48:41
【问题描述】:

我试图找出 MATLAB 如何计算步长(不是初始步长)以使用 ode45 求解器等求解 ODE。源码真的很复杂,有没有人知道hot它好用吗?

【问题讨论】:

    标签: matlab ode


    【解决方案1】:

    您应该知道步长是动态调整的,没有“The”步长。


    得到一个一般简化的想法:总误差 E 由每个时间步的原子误差组成。一阶是求和,更确切地说是对所涉及的原子误差进行某种累积放大。

    一个明智的方法是,长度为 h 的每个时间步长应该有一个大约 E·h/T 的原子误差,其中 T 是积分间隔的长度。 4 阶方法的局部误差为 C·h^5,其中 C 是 ODE 函数前 4 个导数中的零阶多项式。由于该方法计算 4 阶和 5 阶步,称它们为 y4 和 y5,因此可以将 y5 作为更精确的步长,因此大约 C·h^5 = |y4-y5|。这允许计算 C 并调整步长 a·h 以获得所需的原子误差,因为可以解决 C·(a·h)^5=E/T·(a·h) 得到 ​​p>

    a = pow( E/T·h/norm(y4-y5), 1/4)
    

    这不需要非常精确,这样如果原子误差没有在很大程度上超出范围,就可以将调整后的步长用于下一步。

    另一种方法是比较局部误差 |y4-y5|/h 是否落在所需局部误差 E/T 周围的括号内,然后将步长增加/减小一个常数因子,如果重复该步长需要减小步长。

    还有更多的高级/实际实现,考虑到相对和绝对误差目标,检测刚度,即局部误差公式失效的地方,......

    【讨论】:

    • 很抱歉,我没有得到您想要解释的内容。你能用更简单的话解释一下吗?
    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2017-08-19
    相关资源
    最近更新 更多