Skip to content

01 浮点数、舍入误差与条件数 ​

1. 实数在机器中只有有限表示 ​

规格化浮点数可抽象为

x=(−1)smβe,

其中 β 是基数,m 只有有限位有效数字。IEEE 754 双精度以二进制表示,尾数有效精度为 53 位。舍入到最近值时,单位舍入误差约为

u=2−53.

不要把 u 与“最小正浮点数”混淆:前者描述相对精度,后者描述可表示范围。

IEEE 754 将一个浮点数拆成符号、指数和尾数。以二进制规格化数为例,隐藏的首位恒为 1:

x=(−1)s(1.f)22e−bias.

单精度有 24 位有效二进制数字,u=2−24;双精度有 53 位,u=2−53。指数全零时表示次正规数,它用逐渐下溢填补 0 与最小规格化数之间的空隙;指数全一则用于 ±∞ 和 NaN。

相邻浮点数的间距随指数成倍变化。因此“保留多少位小数”不是固定概念;更合适的尺度是 ulp(末位单位)和相对误差。

2. 标准舍入模型 ​

若没有溢出或下溢,单次基本运算常写成

fl(x∘y)=(x∘y)(1+δ),|δ|≤u,

其中 ∘∈{+,−,×,/}。连续 n 次小误差的乘积可以压缩为

∏i=1n(1+δi)=1+θn,|θn|≤γn:=nu1−nu,

前提是 nu<1。

3. 内积与矩阵-向量乘法 ​

顺序计算内积时,

fl(xTy)=(x+Δx)Ty=xT(y+Δy),

并可按分量控制 |Δx|≤γn|x|。因此

fl(Ax)=(A+E)x,|E|≤γn|A|.

这是一条典型后向误差解释:机器算出的结果,是一个邻近输入问题的精确结果。

4. 前向误差、后向误差与条件数 ​

  • 前向误差:输出 y^ 与真实输出 y 相差多少。
  • 后向误差:要把输入改动多少,才能使 y^ 成为精确答案。
  • 条件数:问题本身将输入扰动放大多少。

对可逆线性系统 Ax=b,一阶相对扰动关系近似为

∥Δx∥∥x∥≲κ(A)(∥ΔA∥∥A∥+∥Δb∥∥b∥),

其中 κ(A)=∥A∥∥A−1∥。稳定算法只能保证没有额外放大太多;它无法治愈病态问题。

5. 灾难性消去 ​

两个接近的数相减,会保留绝对误差却损失大量有效数字。例如

sec⁡x−cos⁡x

在 x≈0 时直接计算会相消。等价改写

sec⁡x−cos⁡x=1−cos2⁡xcos⁡x=sin2⁡xcos⁡x

通常更稳定。数值计算中,“数学等价”不等于“浮点行为等价”。

6. 残差不等于误差 ​

若近似解 x^ 的残差为 r=b−Ax^,则

x−x^=A−1r.

因此 ∥r∥ 很小只有在 A−1 不太大时才意味着解误差小。报告迭代结果时,最好同时给相对残差与条件数估计。

7. 稳定计算中的代数改写 ​

另外三个常见改写是

x2+1−x=1x2+1+x,x≫1,1−cos⁡x=2sin2⁡(x/2),x≈0,

以及在 x≈0 时用专门的 expm1(x) 计算 ex−1。相消本身不是错误:若输入是精确数,相减仍满足浮点模型;危险在于输入已经带有误差,而相减后的真值很小,使原有绝对误差对应巨大的相对误差。

8. 可计算的后向误差 ​

线性系统更实用的无量纲后向误差是

η(x^)=∥b−Ax^∥∥A∥∥x^∥+∥b∥.

它回答“相对扰动多大的 A,b 才能让 x^ 成为精确解”。当 κ(A)η≪1 时,可得到近似前向误差界

∥x−x^∥∥x∥≲κ(A)η(x^).

9. 绝对条件数与相对条件数 ​

对标量函数 f,一阶展开给出

f(x+Δx)−f(x)≈f′(x)Δx.

因此绝对条件数与相对条件数分别是

κabs(x)=|f′(x)|,κrel(x)=|xf′(x)f(x)|.

例如 f(x)=x 的相对条件数恒为 1/2;而 f(x)=1/(1−x) 在 x→1 时变得病态。条件数属于问题,和使用哪种算法无关。

10. 分量误差与范数误差 ​

范数界便于推导,但可能掩盖不同分量的尺度差异。矩阵乘法的分量误差界

|fl(Ax)−Ax|≤γn|A||x|

比单纯写 ∥Δy∥≤γn∥A∥∥x∥ 更细。数据跨越多个数量级时,应优先考虑分量相对误差、缩放和等价平衡。

11. 误差分析的三步闭环 ​

  1. 向后分析算法:证明计算结果精确对应于某个邻近输入。
  2. 扰动分析问题:估计邻近输入会让精确解变化多少。
  3. 合成前向界:通常得到“前向误差 ≲ 条件数 × 后向误差”。

这一区分非常重要:病态但向后稳定,说明算法已经尽责;良态却误差很大,则应怀疑算法或实现。

12. 一个可复现实验:Hilbert 矩阵 ​

Hilbert 矩阵 Hn=(1/(i+j−1)) 对称正定,却迅速变得病态。令真解为全一向量,先构造 b=Hn1,再用浮点求解。随着 n 增大,残差可能仍接近机器精度,而解的有效数字明显减少。这同时展示了:

  • 小残差可以和大前向误差共存;
  • 稳定分解不能抵消 κ(Hn);
  • 用已知真解的构造实验可以把算法误差与数据误差分开。

13. 自检 ​

  • [ ] 能解释单位舍入误差与最小正数的区别。
  • [ ] 能使用 1+θn 与 γn 记号合并多次误差。
  • [ ] 能区分问题病态与算法不稳定。
  • [ ] 会通过代数改写避免灾难性消去。
  • [ ] 会用相对后向误差和条件数解释小残差。

下一章:三角求解与 LU 分解。