我只是想知道Dormand-Prince 数值方法 还是Cash-Karp 数值方法 更准确。
哪种 Runge-Kutta 方法更准确:Dormand-Prince 或 Cash-Karp?
由于我刚刚在一个软件中完成了很多优化,DifferentialEquations.jl,我决定只对主要的 Order 4/5 方法进行比较。Fehlberg 方法被排除在外,因为众所周知它比 DP5 方法效率低。
背景故事
冬眠王子 4/5
Dormand-Prince 方法被开发为精确为 4/5 对,使用局部外推(即使用 5 阶对进行步进。这是因为它被设计为接近最优(即最小)原则截断误差系数(在限制也有最少的步骤来实现 5 阶)。它有一个免费的 4 阶插值,但需要额外的步骤来实现 5 阶插值。
现金卡普 4/5
Cash-Karp 方法的开发是为了满足不同的约束条件,即更好地处理非光滑问题。他们选择了,时间步长的百分比第一步(即是时间th step 被计算为尽可能均匀,但仍然达到 5 阶。然后它也被推导出来嵌入 1 阶、2 阶、3 阶和 4 阶方法,具有这种均匀性. 它们以这样的方式隔开,您可以找出刚性部分从哪里开始,差异很大。此外,请注意,方程越僵硬,高阶方法的效果就越差(因为它需要高阶导数的界限)。因此他们制定了一种策略,使用 5 种嵌入式方法“提前退出”:即如果您检测到僵硬,则在阶段停止减少函数调用的次数并节省时间。所以最后,这个“对”是在考虑到许多其他限制的情况下开发的,因此没有理由期望它会“更准确”,至少作为 4/5 对。如果您添加所有这些其他机器,那么在(半)刚性问题上,它会更准确(但在这种情况下,您可能希望使用不同的方法,如 W-Rosenbrock 方法)。这就是为什么这对没有成为 DP5 对的标准,但它仍然有用的一个原因(也许它对于在遇到刚度时切换到刚度求解器的混合方法会很好?)。
Bogacki & Shampine 4/5
为了完善答案,让我们讨论一下评论中提到的 Bogacki 和 Shampine 对。BS5 方法放弃了“使用最少的函数调用”的约束(它使用 8 而不是 6)为了做两件事:
获得非常低的原则截断误差系数。
生成具有较低误差系数的 5 阶插值。
这些系数是如此之低,以至于对于用户可能使用的许多公差问题,它的测量就像它的 6 阶一样。他们的论文表明,对于廉价的函数调用,这可以比 DP5 更有效,在 DP5 上的效率与 RKF5(Fehlberg 方法)大致相同。
你可以把二加二放在一起看看:等一下,Shampine 是开发 MATLAB ODE 套件的同一个人,这是在 BS5 pair 论文发表之后,MATLAB 的为什么不ode45
使用 BS5 pair?一个原因是,它主要是在 BS5 对发布之前完成的。另一个原因是因为该ode45
功能是为了最大限度地减少时间而开发的。虽然 BS5 对更有效(即获得更低的准确度),但ode45
就是要有足够好的错误来制作足够好的情节。这意味着,为了处理大的步骤,它还在每个步骤之间产生两个额外的插值解决方案。对于 DP5 方法,有一个“免费”的 4 阶插值,因此这比使用 BS5 快得多。由于它在中等容差下也“足够准确”,因此将此方法设置为标准,因为它在进行交互式计算时提供了比 BS5 更好的标准用户体验(因此此选择是特定于上下文的)。
曲折的 4/5
这里少有人知道。它是在这篇论文中得出的。它是使用比 DP5 方法更少的假设推导出来的,并试图获得具有较低原则截断误差系数的对。在其测试中,它声明它实现了这一点。它还具有与 DP5 方法类似的自由 4 阶插值。
数值测试
我编写了数值包DifferentialEquations.jl,作为Julia 的一套非常全面的求解器。沿着战争路径,我实施了 100 多种 Runge-Kutta 方法,并进行了大量手动优化。三个手动优化的积分器是 DP5、BS5 和 Tsit5 方法(我没有做 CK5,因为正如背景故事中所指出的,它的主要情况是解决有点僵硬的问题。我认为处理它们的更好方法是使用 DP5/BS5 并根据需要以 LSODE 之类的方式切换到刚性求解器,但这是不同时期的故事)(查看它们接近最优的一种方法是这些方法比 Hairerdopri5
实现更快,所以它们至少是体面的实现)。非刚性方程的许多龙格-库塔方法之间的检验可以在基准文件夹中找到。我正在添加更多,但你可以从线性 ODE 和三体问题工作精度图中看到,我测量 DP5 和 Tsit5 方法具有几乎相同的效率,在线性 ODE 中击败了 BS5 方法,而DP5和BS5在三体问题上几乎相同,Tsit5落后。从这些信息来看,至少目前,我已将 DP5 方法作为默认方法,与之前的建议相匹配。这可能会随着未来的测试而改变(或者您可以添加基准测试!随意贡献,或为 repo 加注星标以提供更多支持)。
结论
总之,Order 5 对是这样的:
Dormand-Prince 4/5 对是一个很好的选择,因为它在原则截断误差系数方面得到了很好的优化,并且具有廉价的 4 阶插值,这使得它可以快速生成体面的图。
Cash-Karp 对有更多的约束以更好地处理僵硬的方程。但是,要获得全部好处,您需要使用完整的算法和 5 种嵌入式方法。
Bogacki & Shampine Order 5 方法在每个函数调用产生错误方面可能是最有效的(它有一个双重错误估计器,因此在更难的问题中它可能做得更好),但这允许它花费更大的时间步长。但是,如果您只是想生成一个平滑的图,那么您必须抵消这种方法:使用较低的容差(因此它需要比 DP5 更长的时间但错误更少)或使用更多的插值步骤。最后,这意味着它对于交互式应用程序可能不是更好,尽管它可能对某些科学计算应用程序更好。
Tsitorous 4/5。是在最近(2011 年)开发的,以在正面比较中击败 DP5。我的测试并没有让我有理由相信它比 DP5 好得多,以至于它现在应该被视为新的标准方法,但未来的测试可能会开始对它有利。
编辑
我确实改进了 Tsit5 的实现。它现在在大多数测试中都比 DP5 做得更好,DifferentialEquations.jl 和 Hairer dopri 实现(尽管人们可能会惊讶于 DifferentialEquations.jl 实现实际上更快,这当然有助于 Tsit5 实现)。我现在推荐它作为默认的 4/5 顺序方法。
如果您有兴趣比较两个积分器求解
具有初始值和对于他们俩。然后绘制错误
对于一个合理的范围(0 到 100,总共 1000 个时间步)并选择误差较小的积分器。此谐波振荡器测试将毫不费力地向您显示相位和幅度误差。
- PJ Channell 和 C Scovel。哈密顿系统的辛积分。计算物理学杂志 73, 468 (1973)。