81 lines
4.0 KiB
Markdown
81 lines
4.0 KiB
Markdown
---
|
||
title: 数值方法与误差
|
||
tags: numerical, error, iteration, conditioning, convergence
|
||
summary: 当精确答案不存在时,一个算出来的数字会有什么行为,以及算错、不够精确、不稳定这三者的区别。
|
||
---
|
||
|
||
# 数值方法与误差
|
||
|
||
轨道工作中的大多数量没有闭式解。摄动场中椭圆轨道的周期、经历一段阻力历史后的近地点角、卫星进入某视锥锥面的时刻:这些量由一个必须**求解**而非求值的方程定义。数值求解用另一个问题替换了一个有答案的问题,而后者没有答案。
|
||
|
||
## 定义
|
||
|
||
当一个数字被算出时,有三类不同的事情会出错,值得分开看待:
|
||
|
||
- **截断误差**。方法通过提前终止、或用更简单的函数替代原函数,得到精确答案的近似。
|
||
- **舍入误差**。数字本身的表示是有限的。双目精度大约保存十五到十七位有效十进制数字;再往后的位是噪声。
|
||
- **不稳定**。输入的微小误差,或中间步骤的微小误差,会放大为答案的大误差。
|
||
|
||
前两类是有界且可估计的。第三类是问题本身的性质,无法从算术中估计,必须靠识别。
|
||
|
||
## 数学含义
|
||
|
||
### 迭代
|
||
|
||
不动点通过反复代入达到,$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$,因此常用:每步代价是四次函数求值,步长减半代价增至八倍,而误差减少十六倍。
|
||
|
||
## 单位约定
|
||
|
||
- 容差相对于答案的量级,绝不用绝对值。半径 `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
|
||
|
||
## 另见
|
||
|
||
- [[units-and-dimensions]]:这些数字的含义
|
||
- [[ephemeris-interpolation]]:采样表的误差
|
||
- [[higher-order-gravity]]:级数不收敛的模型 |