Appearance
01 浮点数、舍入误差与条件数
1. 实数在机器中只有有限表示
规格化浮点数可抽象为
其中
不要把
IEEE 754 将一个浮点数拆成符号、指数和尾数。以二进制规格化数为例,隐藏的首位恒为
单精度有 24 位有效二进制数字,
相邻浮点数的间距随指数成倍变化。因此“保留多少位小数”不是固定概念;更合适的尺度是 ulp(末位单位)和相对误差。
2. 标准舍入模型
若没有溢出或下溢,单次基本运算常写成
其中
前提是
3. 内积与矩阵-向量乘法
顺序计算内积时,
并可按分量控制
这是一条典型后向误差解释:机器算出的结果,是一个邻近输入问题的精确结果。
4. 前向误差、后向误差与条件数
- 前向误差:输出
与真实输出 相差多少。 - 后向误差:要把输入改动多少,才能使
成为精确答案。 - 条件数:问题本身将输入扰动放大多少。
对可逆线性系统
其中
5. 灾难性消去
两个接近的数相减,会保留绝对误差却损失大量有效数字。例如
在
通常更稳定。数值计算中,“数学等价”不等于“浮点行为等价”。
6. 残差不等于误差
若近似解
因此
7. 稳定计算中的代数改写
另外三个常见改写是
以及在 expm1(x) 计算
8. 可计算的后向误差
线性系统更实用的无量纲后向误差是
它回答“相对扰动多大的
9. 绝对条件数与相对条件数
对标量函数
因此绝对条件数与相对条件数分别是
例如
10. 分量误差与范数误差
范数界便于推导,但可能掩盖不同分量的尺度差异。矩阵乘法的分量误差界
比单纯写
11. 误差分析的三步闭环
- 向后分析算法:证明计算结果精确对应于某个邻近输入。
- 扰动分析问题:估计邻近输入会让精确解变化多少。
- 合成前向界:通常得到“前向误差
条件数 后向误差”。
这一区分非常重要:病态但向后稳定,说明算法已经尽责;良态却误差很大,则应怀疑算法或实现。
12. 一个可复现实验:Hilbert 矩阵
Hilbert 矩阵
- 小残差可以和大前向误差共存;
- 稳定分解不能抵消
; - 用已知真解的构造实验可以把算法误差与数据误差分开。
13. 自检
- [ ] 能解释单位舍入误差与最小正数的区别。
- [ ] 能使用
与 记号合并多次误差。 - [ ] 能区分问题病态与算法不稳定。
- [ ] 会通过代数改写避免灾难性消去。
- [ ] 会用相对后向误差和条件数解释小残差。
下一章:三角求解与 LU 分解。