Skip to content

040 Multistep Methods 多步法

在前一节我们讨论了求初值问题 的近似解的过程。我们使用 时的数值计算下一个点 时解 的近似值。也就是说,在计算 在某点处的近似值仅仅依赖之前的一个点的值。因此这称为单步法(one-step method)。不过一旦有了 开始的一些点解的近似值,我们不禁要问能不能利用这些信息来求解下一个点的近似值?也就是说如果在点 处近似值 已经得到了,如何利用这些信息来计算计算 处的值 ?使用这些信息而不仅是最后一个点的信息的方法称为多步法(multistep method)。这一节会讨论两种多步法:亚当斯法和后向差分法。取决于依赖前面多少点的数据,我们能够达到任意精度。为了简单起见,这里的讨论假定步长 是常量。

亚当斯法

之前讨论过初值问题 满足 亚当斯法的核心思想是时用 阶多项式 来近似 的系数由前 个点的数据决定。

比如这里假定一阶多项式 ,那么需要前面两个点 的数据。为了使 处都能对 进行插值,要求 以及 同时成立。对于整数 可以用 表示 ,因此 必须满足 解的 替换 并求解积分 得到 使用 替换 ,然后进行一些代数运算得到 公式 是二阶亚当斯-巴什弗思公式(second-order Adams-Bashforth formula)。通过 表示 的显式公式,其局部截断误差正比于

使用零阶 就得到一阶亚当斯-巴什弗思公式(first-order Adams-Bashforth formula),这就是欧拉公式。因为此时 被积分的式子就是 ,右边就等于

使用更高阶的多项式和更多的数据,按照之前的思路就能得到更精确的亚当斯公式。比如假定 是三阶多项式,系数由四个点 确定。代入 中替换 ,求积分,简化结果,得到四阶亚当斯-巴什弗思公式(fourth-order Adams-Bashforth formula 局部截断误差正比于

对亚当斯-巴什弗思公式的推导过程稍作变化,可以得到称为亚当斯-莫尔顿公式(Adams-Moulton formula)的结论。依旧看一个二阶的例子。令一阶多项式 ,但是由点 确定,那么 满足 那么 代入 简化得到 这就是二阶亚当斯-莫尔顿公式(second-order Adams-Moulton formula)。这里写作 来强调亚当斯-莫尔顿公式是隐式的,因为未知项 出现在了公式两边。局部截断误差正比于

一阶亚当斯-莫尔顿公式(first-order Adams-Moulton formula)就是后向欧拉公式。和之前类似, 的被积分式子就是 ,很容易推导出这个结论。

和之前一样,使用更高阶的多项式可以得到更精确的公式。四阶亚当斯-莫尔顿公式(fourth-order Adams-Moulton formula)的局部截断误差正比于 显然这也是一个隐式公式。

尽管同阶亚当斯-巴什弗思公式和亚当斯-莫尔顿公式的局部截断误差正比于同阶 的幂次,但是亚当斯-莫尔顿公式更精确。比如 的局部截断误差都正比于 ,但是亚当斯-莫尔顿公式的常量系数亚当斯-巴什弗思公式的常量系数的十分之一还要小。

那么是使用更快的显式亚当斯-巴什弗思公式还是慢一点但是更精确的隐式亚当斯-莫尔顿公式呢?这取决于是否可以通过使用更精确的公式以增加步长,进而减少步数来抵消每一步的附加开销。

事实上数值分析专家试图将这两类公式结合起来,推导处了预测-修正法(predictor-corrector method),从而兼顾计算的简便性与精度。一旦知道了 ,那么可以计算 ,使用亚当斯-巴什弗思公式 计算得到 ,那么可以得到 ,此时亚当斯-莫尔顿公式就是显式公式,得到更好的 。如果 的变化很大,那么可以继续使用 进一步修正 。不过如果需要超过一次甚至两次修正,说明步长 太大需要减少一些。

为了使用多步法,需要计算得到一些 。比如四阶亚当斯-莫尔顿公式需要 ,四阶亚当斯-巴什弗思公式还需要 。一种方法是使用精度相当的单步法计算这些值。比如使用四阶多步法,可以使用四阶龙格-库塔法计算开始的几个值。下面的例 1 就是这样做的。

另一种方式是使用低阶方法配合更小的 来计算 ,逐步增加步长和阶数直到计算得到了足够的初始值。

例 1 回到之前的初值问题 使用步长 ,分别使用四阶亚当斯-巴什弗思公式、四阶亚当斯-莫尔顿公式和四阶预测-修正法计算 时解 的近似值。

解:首先使用四阶龙格-库塔公式计算 ,这个在上一节的例子中已经计算得到了。这样就得到了相应的 使用四阶亚当斯-巴什弗思公式 可以计算得到 。相比 时的精确值 5.7942260,误差是 -0.0105955。

四阶亚当斯-莫尔顿公式 得到 那么 ,误差仅有 0.0000416。

最后,使用四阶亚当斯-巴什弗思公式的结果作为预测 ,那么 ,代入 修正得到 ,误差是 -0.0015539。

亚当斯-巴什弗思法最简单也最快,仅涉及显式公式,也最不精确。使用亚当斯-莫尔顿公式作为修正,公式仍旧是显式的,不过增加了一些计算量。这种方法将误差修正为预测值的七分之一。亚当斯-莫尔顿法最精确,比修正值误差的四十分之一。

不过亚当斯-莫尔顿法是隐式的,这意味着每一步需要求解方程。这个问题是线性问题,方程容易求解,如果是非线性的,那么这个过程会更耗时。

使用步长为 的龙格-库塔法求解的 ,误差是 -0.0014407。对于这个问题,它的精度和预测-修正法的精度差不多。

后向差分公式

另一个多步法是使用多项式 近似初值问题 中的 而不是它的导数 。然后对 求导,令 得到 的隐式公式。这称为后向差分公式(backward differentiation formula)。

最简单的例子是一阶多项式 ,那么要满足 ,那么 要满足 求解得到 由于 ,又因为 ,因此 。结合 就得到了一阶后向差分公式(first-order backward differentiation formula 这就是在 8.1 小节讨论的后向欧拉公式。

使用更高阶的多项式和相应更多的点,可以得到任意阶后向差分公式。下面是二阶后向差分公式(second-order backward differentiation formula 下面是四阶后向差分公式(fourth-order backward differentiation formula 这两个公式的局部截断误差分别正比于

例 2 使用步长 的四阶后向差分公式来估算例 1 中在 时解 的近似值。

解: 在例 1 中已经给出,,都代入 得到 因此 和精确值 相比,误差是 0.0025366。这比四阶亚当斯-巴什弗思的结果要好,但是不如四阶预测-修正法,远不如亚当斯-莫尔顿法。

比较单步法与多步法时,要综合考虑多个因素。四阶龙格-库塔法在每一步都需要求四次 函数的值;而四阶亚当斯-巴什弗思法(除了开始阶段)每步仅需一次求值,预测-修正法需要两次。因此,在给定步长 的情况下,后两种方法的运行速度很可能比龙格-库塔法快得多。不过,如果龙格-库塔法的精度更高,并因此可以采用更大的步长,更少的步数,那么这种速度上的差异就会缩小,甚至可能会消失。

亚当斯-莫尔顿和后向差分公式还考虑到在每一步中求解隐式方程的难度。所有多步法都存在一个潜在的缺点,开始步骤中的误差可能会反馈到后续计算中,从而产生不利结果。另一方面,多步法底层的多项式近似特性使得在需要时可以很容易地估算点之间任何位置的解。多步法变得流行的原因是它能相对容易地估算每一步的误差并调整阶数或步长来对其进行控制。