我对 ODE 的固定步长模拟感兴趣。
我知道的方法要么是具有规定误差容限的可变步长,要么是没有误差控制的固定步长。
是否有已知的方法可以在固定时间网格上工作(用于输入和输出)并允许指定误差容限?
下一个时间步的解应该尽可能高效地计算,因此是自适应的,例如 RK12 - RK45。它可以尝试 RK12 并在必要时增加订单。这样的方案在效率方面有意义吗?如何改进?
我对 ODE 的固定步长模拟感兴趣。
我知道的方法要么是具有规定误差容限的可变步长,要么是没有误差控制的固定步长。
是否有已知的方法可以在固定时间网格上工作(用于输入和输出)并允许指定误差容限?
下一个时间步的解应该尽可能高效地计算,因此是自适应的,例如 RK12 - RK45。它可以尝试 RK12 并在必要时增加订单。这样的方案在效率方面有意义吗?如何改进?
这是个有趣的问题。没有使用固定步长和错误控制的实现是有充分理由的。 无法保证您将能够满足规定的局部误差容限。
通过减小步长,您可以减小误差扩展中所有项的大小。由于一些“幸运/不幸”的取消,步长的特别减少仍然可能不会减少错误(即所有这些项的总和)。但是,很容易看出,通过足够减小步长,您可以满足任何误差容限(至少,在没有舍入的情况下)。
现在如果步长是固定的,但可以增加阶数怎么办?通过增加顺序,您可以保证某些(以前非零)错误项消失。但是,您还可以更改乘以所有剩余项的常数。一般来说,其中一些常数会更大,而其他常数会更小。因此不能保证高阶方法会有更小的误差。它通常会,但有时误差会更大。事实上,如果您仔细研究最先进的外推求解器,您会发现它们有时会通过接受比已计算的最大值低阶的解来解释这种可能性。
危险在于您可能会无限期地增加订单而没有达到容错。确保避免这种情况的唯一方法是使用一系列方法,其中剩余高阶项的所有误差常数随着阶数的增加而减小。这样的序列是否存在是一个悬而未决的问题。Gragg-Bulirsch-Stoer 外推法当然没有这个性质。
使用任意递增顺序的方法序列(包括 GBS 外推法),您可能会发现您的方法大部分时间都有效(尤其是对于更简单的问题),但偶尔会完全失败。
最后一点:在实际实现中,重要的(为了能够完成集成)不是实际的本地错误,而是您对它的估计。因此,您可能希望找到具有上述属性的估计器序列。