艾特肯之前的艾特肯加速法Aitken acceleration before Aitken
开普勒方程 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 年发表的级数加速法的一个特例。
相关文章
需要完整排版与评论请前往来源站点阅读。