返回 2026-06-09
⚙️ 工程

艾特肯之前的艾特肯加速法Aitken acceleration before Aitken

johndcook.com·2026-06-07

开普勒方程 M = E − e sin(E) 的求解实质上是一个寻找不动点的迭代过程。开普勒曾提出通过将猜测值反复代入方程右侧进行迭代,并认为少量迭代即可达到收敛效果。文章探讨了在这种不动点迭代中,如何在实际应用中通过加速技术大幅提高收敛效率。这种加速方法比艾特肯正式提出的时间更早,展现了早期数学家在数值计算领域的深刻洞察。

John

开普勒求解了以他名字命名的方程

M = E − e sin(E)

其方法是寻找下式的不动点:

E = M + e sin(E).

因此,先猜测一个 E 的值并将其代入等式右边。然后再将得到的值再次代入等式右边。开普勒认为,迭代几次应该就足够了。如果偏心率 e 很小,且对精度要求不高,那么几次迭代确实足够了。

收敛速度由 e 决定。开普勒潜意识里考虑的是较小的 e 值,因为他当时并不知道有围绕太阳作高度椭圆轨道运行的天体。这里有一个偏心率为 0.05 的例子,这大约是木星和土星轨道的偏心率。

from math import sin

M, E, e = 1, 1, 0.05
for _ in range(5):
    E = M + e*sin(E)
    residual = M - (E - e*sin(E))
    print(residual)

仅仅两次迭代后的残差为 2.77 × 10−5。如果将 e 改为 0.2(即水星轨道的偏心率),则需要三次迭代才能达到相当的精度。在开普勒可能知道的所有天体中,水星的轨道偏心率是最大的。

现在假设你要计算哈雷彗星在 M = 1 时的 E 值,并希望误差小于 10−8。此时就需要 16 次迭代。

1891 年,C. F. W. Peters 发现了一种更快的算法。

E1 = M + e sin(E0) E2 = M + e sin(E1) E3 = (E2 E0 − E1²)/(E2 − 2E1 + E0)

让我们来看看对哈雷彗星使用 Peters 方法进行三次迭代的结果。

M, E0, e = 1, 1, 0.967
for _ in range(3):
    E1 = M + e*sin(E0)
    E2 = M + e*sin(E1)
    E3 = (E2*E0 - E1**2)/(E2 - 2*E1 + E0)
    residual = M - (E - e*sin(E3))
    print(residual)
    E0 = E3 # for next iteration

得到的残差为 −7.23 × 10−10。Peters 方法的每次迭代计算量略大于开普勒方法的两倍,但 Peters 方法的 3 次迭代取得的效果却超过了开普勒方法的 16 次迭代。

Peters 在 1891 年提出的算法是 Alexander Aitken 于 1926 年发表的级数加速法的一个特例。

相关文章

  • Aitken 加速
  • Euler 加速
  • Cohen 加速
  • 需要完整排版与评论请前往来源站点阅读。