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

81 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 数值方法与误差
tags: numerical, error, iteration, conditioning, convergence
summary: 当精确答案不存在时,一个算出来的数字会有什么行为,以及算错、不够精确、不稳定这三者的区别。
---
# 数值方法与误差
轨道工作中的大多数量没有闭式解。摄动场中椭圆轨道的周期、经历一段阻力历史后的近地点角、卫星进入某视锥锥面的时刻:这些量由一个必须**求解**而非求值的方程定义。数值求解用另一个问题替换了一个有答案的问题,而后者没有答案。
## 定义
当一个数字被算出时,有三类不同的事情会出错,值得分开看待:
- **截断误差**。方法通过提前终止、或用更简单的函数替代原函数,得到精确答案的近似。
- **舍入误差**。数字本身的表示是有限的。双目精度大约保存十五到十七位有效十进制数字;再往后的位是噪声。
- **不稳定**。输入的微小误差,或中间步骤的微小误差,会放大为答案的大误差。
前两类是有界且可估计的。第三类是问题本身的性质,无法从算术中估计,必须靠识别。
## 数学含义
### 迭代
不动点通过反复代入达到,`x` 变为 `g(x)`。当根附近导数绝对值小于一时收敛:
```text
|g'(x)| < 1 收敛
|g'(x)| > 1 发散
```
开普勒方程 `M = E - e sin E` 对 `E` 没有闭式解,用牛顿法求解:
```text
E_{n+1} = E_n - (E_n - e sin E_n - M) / (1 - e cos E_n)
```
当 `e` 不接近一时在根附近二次收敛。该迭代很快,其收敛率取决于偏心率;对接近抛物线的轨道分母趋近于零,需要改用其他形式。
二分法每步更慢但不会发散,因为它把一个已知包含根的区间减半。选哪一种取决于发散与代价哪一个更要紧。
### 条件数
答案对输入扰动的敏感程度是**条件数**。对函数 `f`,
```text
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
## 另见
- [[units-and-dimensions]]:这些数字的含义
- [[ephemeris-interpolation]]:采样表的误差
- [[higher-order-gravity]]:级数不收敛的模型