apsis-book/content/concepts/foundation/numerical-methods.zh.md

3.9 KiB
Raw Blame History

title tags summary
数值方法与误差 numerical, error, iteration, conditioning, convergence 当精确答案不存在时,一个算出来的数字会有什么行为,以及算错、不够精确、不稳定这三者的区别。

数值方法与误差

轨道工作中的大多数量没有闭式解。摄动场中椭圆轨道的周期、经历一段阻力历史后的近地点角、卫星进入某视锥锥面的时刻:这些量由一个必须求解而非求值的方程定义。数值求解用另一个问题替换了一个有答案的问题,而后者没有答案。

定义

当一个数字被算出时,有三类不同的事情会出错,值得分开看待:

  • 截断误差。方法通过提前终止、或用更简单的函数替代原函数,得到精确答案的近似。
  • 舍入误差。数字本身的表示是有限的。双目精度大约保存十五到十七位有效十进制数字;再往后的位是噪声。
  • 不稳定。输入的微小误差,或中间步骤的微小误差,会放大为答案的大误差。

前两类是有界且可估计的。第三类是问题本身的性质,无法从算术中估计,必须靠识别。

数学含义

迭代

不动点通过反复代入达到,x 变为 g(x)。当根附近导数绝对值小于一时收敛:

|g'(x)| < 1   收敛
|g'(x)| > 1   发散

开普勒方程 M = E - e sin E 对 E 没有闭式解,用牛顿法求解:

E_{n+1} = E_n - (E_n - e sin E_n - M) / (1 - e cos E_n)

当 e 不接近一时在根附近二次收敛。该迭代很快,其收敛率取决于偏心率;对接近抛物线的轨道分母趋近于零,需要改用其他形式。

二分法每步更慢但不会发散,因为它把一个已知包含根的区间减半。选哪一种取决于发散与代价哪一个更要紧。

条件数

答案对输入扰动的敏感程度是条件数。对函数 f,

kappa = | f'(x) | * | x| / | f(x) |

条件数大意味着小的输入误差变成大的输出误差,与方法无关。在奇点附近条件数发散:由半长轴与偏心率计算轨道半径是良态的,而由同样元素计算近地点时刻不是,因为分母中出现 sqrt(1 - e^2),当 e 趋近一时趋于零。问题病态而非算术病态,多给几位有效数字无济于事。

步长带来的截断

定步长积分的全局误差与步长成正比,局部误差与步长平方成正比。因此步长减半只让答案改善两倍而非四倍,"干脆把步长减半"因此是换精度的昂贵做法。

对 p 阶方法,全局误差按步长的 p 次幂下降。四阶 Runge-Kutta 给出 h^4,因此常用:每步代价是四次函数求值,步长减半代价增至八倍,而误差减少十六倍。

单位约定

  • 容差相对于答案的量级,绝不用绝对值。半径 7000 km 上的绝对容差 1e-9 远严于表示所能保存,迭代将无法终止。
  • 用于相对容差的尺度应取该量自身的大小而非其单位,这样在千米与米之间切换不会改变答案。

适用边界

收敛的方法未必准确。对开普勒方程用牛顿法,收敛到所提方程的根;若方程漏掉了某个摄动,解就是错误问题的根,而且会自信地收敛。

迭代也可能因判据过松而悄然停止。报告迭代次数而不只报告答案,能让调用方看出结果是否在预期步数内得到。

三类失效在实践中可分:舍入表现为可达精度的下限;截断表现为方法细化后缩小的误差;不稳定表现为会增大的误差。

标准

  • Newton,De analysi per aequationes numero terminas infinitas,1669
  • Higham,Accuracy and Stability of Numerical Algorithms,第二版,2002
  • Quarteroni、Sacco、Saleri,Numerical Mathematics,第二版,2007

另见