条件数
概述
条件数(condition number)$\kappa(A) = |A| \cdot |A^{-1}|$ 是衡量线性方程组 $Ax = b$ 对输入扰动的固有敏感程度的核心量。由阿兰·图灵于 1948 年系统引入(记作 $N(A)$),约翰·冯·诺依曼与 Goldstine 于 1947 年独立提出类似概念。条件数大(病态问题)意味着输入的微小扰动会被极度放大到输出,与算法选择无关;条件数小(良态问题)则意味着结果对误差不敏感。结合后向误差分析,条件数提供了数值计算可靠性的完整理论框架。
关键内容
定义
$$\kappa(A) = |A| \cdot |A^{-1}|$$
其中 $|\cdot|$ 是任意相容矩阵范数(常用 2-范数:$\kappa_2(A) = \sigma_{\max}/\sigma_{\min}$,即最大与最小奇异值之比)。
$$\kappa_2(A) = |\lambda_{\max}| / |\lambda_{\min}|$$
物理意义
条件数是问题对输入扰动的"放大倍数"上界:
$$\frac{|\delta x|}{|x|} \leq \kappa(A) \cdot \frac{|\delta b|}{|b|}$$
- 输入 $b$ 有相对误差 $\epsilon$,则解 $x$ 的相对误差最大为 $\kappa(A) \cdot \epsilon$
- 若计算精度为 $t$ 位有效数字,则结果约有 $t - \log_{10}\kappa(A)$ 位正确有效数字
病态与良态
| 条件数 | 分类 | 含义 |
|---|---|---|
| $\kappa(A) \approx 1$ | 极良态 | 误差几乎不被放大 |
| $\kappa(A) \sim 10^3$ | 适中 | 单精度计算仍可靠 |
| $\kappa(A) \sim 10^8$ | 病态 | 双精度(16位)只剩约 8 位有效数字 |
| $\kappa(A) \gtrsim 10^{16}$ | 极病态 | 双精度结果几乎全是噪声 |
图灵引入"病态"(ill-conditioned)和"良态"(well-conditioned)这对术语,至今是数值分析最常用的专业词汇。
条件数与后向误差分析的结合
后向误差分析(Wilkinson 1963–1965)将算法误差分解为:
$$\underbrace{\text{前向误差}}{\text{结果精度}} \approx \underbrace{\kappa(A)}{\text{问题固有难度}} \times \underbrace{\epsilon_{\text{backward}}}_{\text{算法稳定性}}$$
这一分解澄清了"结果不准"究竟是算法问题还是问题本身的问题——是图灵最重要的概念贡献之一。
图灵 vs 冯·诺依曼的定义对比
| 方面 | 图灵(1948) | 冯·诺依曼-Goldstine(1947) | |------|------------|--------------------------| | 定义形式 | $N(A) = |A|\cdot|A^{-1}|$(矩阵范数乘积)| $\lambda_{\max}/\lambda_{\min}$(特征值比)| | 误差模型 | 确定性最坏情况分析 | 统计模型(随机舍入假设)| | 主要对象 | 高斯消元法 | 矩阵求逆 | | 现代标准 | 更接近(便于推广)| 仅适用正规矩阵 |
条件数的推广
条件数概念已推广到几乎所有数值计算领域:
| 问题 | 条件数形式 |
|---|---|
| 特征值问题 | $1/ |
| 非线性方程 $f(x)=0$ | $ |
| 优化问题 | Hessian 矩阵的谱条件数 |
| 神经网络训练 | 梯度条件数(影响训练稳定性和速度) |
历史意义
图灵1948年论文否定了 Hotelling(1943)关于高斯消元法误差以 $4^n$ 指数增长的悲观预测:使用列主元选取(partial pivoting)后,误差界大致为 $\kappa(A) \cdot 2^{-t}$,不随 $n$ 指数增长。这对计算科学界是一个重要解脱,为使用大规模高斯消元法奠定了理论依据。
来源
- raw/books/数值分析/14_turing_rounding_errors.md
- raw/books/数值分析/13_von_neumann_stability.md