为什么将 RK45 用作非刚性 ODE 的“默认”方法而不是多步方法?

计算科学 matlab 数字 龙格库塔
2021-12-12 04:54:57

根据我的阅读,非刚性 ODE 的“默认”首选方法是 Dormand-Prince Runge-Kutta 对;例如,在Matlab 文档中,“大多数时候,ode45应该是您尝试的第一个求解器”。

但是,据我了解,多步方法应该能够以更少的功能评估(每步一个而不是 Dormand--Prince 的每步七个)实现相当的精度(相同的收敛顺序)。我知道使用多步方法更改步长更困难,但有一些策略可以做到这一点,我认为这不是一个主要困难。

Runge-Kutta 方法比多步方法更好的选择背后的逻辑是什么?是什么补偿了计算成本增加了 7 倍?

2个回答

首先,让我们确定它们是一个不错的选择。SciMLBenchmarks可能是目前最全面的现代方法。这使用了DifferentialEquations.jl中可用的大量方法让我们检查一下非刚性 ODE:

为了确保这一点,让我们看看一些针对 MATLAB、Python 和 R的基准测试,看看这些实现是如何优化的,比 MATLAB/Python/R 中的实现高出 50 倍以上。因此,对于快速实现,Runge-Kutta 方法似乎在非刚性 ODE 上表现良好,而且考虑到多步方法的成本/错误真正具有竞争力时,这种情况非常罕见。

为什么?

是什么补偿了计算成本增加了 7 倍?

有两个主要因素。其中之一是稳定性。显式的 Adams-Bashforth 方法非常不稳定,随着它们有序增长而失去稳定性,因此它们在实践中不是很有竞争力。

亚当斯-巴什福斯

因此,使用多步方法的非刚性 ODE 优化软件通常不使用 Adams-Bashforth 方法,而是使用Adams-Bashforth-Moulton 系数

但是等等,ABM 是隐含的,这是否意味着它适用于僵硬的方程?不,这是一个非常简单的观点。事实上,刚性方程也有显式积分器,因此“隐式 = 刚性”的观点过于简单。相反,隐式方法可用于非刚性方程,方法是使用不太稳定的方法来求解非线性系统。即你作弊一点,不要使用牛顿(更稳定),而是使用定点迭代(带有预测校正器)形式。但是,一旦您进入这种形式,更新需要求解定点迭代,因此“多步方法只需一次f调用即可更新”从方程中看起来是正确的,但在实践中并不正确。因此,微积分变得更加模糊。即使这样,

abm

到 5 阶时,您就处于像欧拉方法一样的稳定性……因此,虽然像CVODE亚当斯系数、VCABMode113等的方法在技术上都可以达到 13 阶,并且只需很少的函数迭代就可以迈出巨大的步伐,但实际上这不会发生往往是因为稳定性的限制。

作为参考,请查看 Dormand-Prince 8/7 方法的稳定区域:

休眠王子 8/7

这个实际上并没有在实践中使用(与普遍看法相反,Dormand-Prince 8/7 方法不是 dop853 中使用的方法,而是一种不同的画面,仅在软件本身中有详细记录,但我离题了),但它的稳定区域仍然大很多。这意味着,如果事情开始变得有点稳定,它可能会采取更大的成本措施。

但是所有这些其他数字是什么?这将我们带到第二个主要因素:截断误差的主要系数。与大多数数学家所希望的相反,数值 ODE 求解的目的不是使事实上,恰恰相反:你想让尽可能大(以达到你希望的容错为准)。因此,考虑渐近过于简单。Runge-Kutta 世界的人注意到,如果你优化截断误差的前导系数,那么即使不为零,最大误差项仍然很小,这可以允许采取更大的步长。的确,Δt0ΔtO(Δtn)ΔtDormand-Prince 方法(ode45 背后的画面)是这些“领先的截断误差优化”方法之一。(实际上,它做了一个假设并在该约束下进行了优化,而 Tsitouras 在 2011 年放松了这一约束并创建了一个系数降低 20% 的画面,如果你回过头来查看基准,你会发现这Tsit5就是平均表现略好于DP5,但这是细节)。但无论如何,与此相比,多步方法具有相当大的前导系数值,这意味着要达到容错能力,它们可能需要更小的,因此最终需要更多的工作。Δt

这两个因素共同构成了一些重要因素。还有一些其他细节也很重要,但我认为你可以为此贡献大部分行为。

ode15s现在,为什么 BDF 方法CVODE适用于刚性方程?不会应用相同的前导截断错误参数吗?是的,确实如此,但是这些方法在刚性方程上进行了优化,因为它们采取的步骤很小这是另一个完全不同的故事。

反对您的评论的一个论点

但是,据我了解,多步方法应该能够以更少的功能评估(每步一个而不是 Dormand--Prince 的每步七个)实现相当的精度(相同的收敛顺序)。

是多步方法(Adams-Bashforth)的稳定性区域随着阶数的增加而变小,而一步法(Runge-Kutta)的稳定性区域变大。

我认为最终您无需某些起点即可获得可比的性能。

见:切布芬