首页 文章

Matlab ODE求解器中的时间步长计算

提问于
浏览
0

我试图找出MATLAB如何使用例如 ode45 求解器来计算步长(而不是初始值)来解决ODE . 源代码非常复杂,所以有人知道它有用吗?

1 回答

  • 0

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


    获得一般简化的想法:总误差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)得到

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

    这不需要非常精确,因此如果原子误差不在很大范围之外,那么可以使用适应的步长用于下一步骤 .

    另一种方法是比较局部误差| y4-y5 | / h是否落在所需局部误差E / T附近的括号内,并将步长增大/减小一个常数因子,如果步长重复步长需要减少 .

    高级/实际实现还有更多内容,考虑到相对和绝对误差目标,检测刚度,即局部误差公式出现故障,......

相关问题