4.0 KiB
| title | tags | summary |
|---|---|---|
| 数值方法与误差 | numerical, error, iteration, conditioning, convergence | 当精确答案不存在时,一个算出来的数字会有什么行为,以及算错、不够精确、不稳定这三者的区别。 |
数值方法与误差
轨道工作中的大多数量没有闭式解。摄动场中椭圆轨道的周期、经历一段阻力历史后的近地点角、卫星进入某视锥锥面的时刻:这些量由一个必须求解而非求值的方程定义。数值求解用另一个问题替换了一个有答案的问题,而后者没有答案。
定义
当一个数字被算出时,有三类不同的事情会出错,值得分开看待:
- 截断误差。方法通过提前终止、或用更简单的函数替代原函数,得到精确答案的近似。
- 舍入误差。数字本身的表示是有限的。双目精度大约保存十五到十七位有效十进制数字;再往后的位是噪声。
- 不稳定。输入的微小误差,或中间步骤的微小误差,会放大为答案的大误差。
前两类是有界且可估计的。第三类是问题本身的性质,无法从算术中估计,必须靠识别。
数学含义
迭代
不动点通过反复代入达到,x 变为 g(x)。当根附近导数绝对值小于一时收敛:
\lvert g'(x) \rvert < 1 \quad \text{(收敛)}, \qquad
\lvert g'(x) \rvert > 1 \quad \text{(发散)}
开普勒方程 M = E - e\sin E 对 E 没有闭式解,用牛顿法求解:
E_{n+1} = E_n - \frac{E_n - e \sin E_n - M}{1 - e \cos E_n}
当 e 不接近一时在根附近二次收敛。该迭代很快,其收敛率取决于偏心率;对接近抛物线的轨道分母趋近于零,需要改用其他形式。
二分法每步更慢但不会发散,因为它把一个已知包含根的区间减半。选哪一种取决于发散与代价哪一个更要紧。
条件数
答案对输入扰动的敏感程度是条件数。对函数 f,
\kappa = \frac{\lvert f'(x) \rvert \, \lvert x \rvert}{\lvert f(x) \rvert}
条件数大意味着小的输入误差变成大的输出误差,与方法无关。在奇点附近条件数发散:由半长轴与偏心率计算轨道半径是良态的,而由同样元素计算近地点时刻不是,因为分母中出现 \sqrt{1 - e^2},当 e 趋近一时趋于零。问题病态而非算术病态,多给几位有效数字无济于事。
步长带来的截断
定步长积分的全局误差与步长成正比,局部误差与步长平方成正比。因此步长减半只让答案改善两倍而非四倍,"干脆把步长减半"因此是换精度的昂贵做法。
对 p 阶方法,全局误差按步长的 p 次幂下降。四阶 Runge-Kutta 给出 h^4,因此常用:每步代价是四次函数求值,步长减半代价增至八倍,而误差减少十六倍。
单位约定
- 容差相对于答案的量级,绝不用绝对值。半径
7000km 上的绝对容差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
另见
- units-and-dimensions:这些数字的含义
- ephemeris-interpolation:采样表的误差
- higher-order-gravity:级数不收敛的模型