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

时间:2015-11-16 12:12:06

标签: matlab ode

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

1 个答案:

答案 0 :(得分: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附近的括号内,并且以常数因子增加/减小步长,重复步骤if步长需要减少。

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