Skip to content

矩阵的条件数

参考:王金戈《矩阵的条件数》。本文沿用其“矩阵会拉伸、也会压缩向量”的直觉,并补充范数、非方阵和数值计算中的限定。

条件数(condition number)刻画一个线性问题对输入扰动的敏感程度。对矩阵而言,它关注的是:矩阵对不同方向的向量施加的缩放有多么不均匀。条件数大通常意味着问题可能对噪声、测量误差和浮点舍入误差很敏感。

1. 从诱导矩阵范数开始

向量范数衡量向量的长度。若矩阵 \(A\) 被看作线性变换 \(x\mapsto Ax\),由向量范数诱导出的矩阵范数定义为

\[ \lVert A\rVert = \max_{x\ne 0}\frac{\lVert Ax\rVert}{\lVert x\rVert}. \]

它表示 \(A\) 对向量长度的最大放大倍数

\(A\) 可逆,则

\[\begin{aligned} \lVert A^{-1}\rVert &=\max_{b\neq0}\frac{\|A^{-1}b\|}{\|b\|}\\ &=\max_{x\neq0}\frac{\|x\|}{\|Ax\|}\\ &=\frac{1}{\min_{x\ne 0}\frac{\lVert Ax\rVert}{\lVert x\rVert}}. \end{aligned}\]

因此,\(\lVert A^{-1}\rVert\) 的倒数对应 \(A\)最小缩放倍数;它很大意味着存在某个方向被 \(A\) 压得非常短。

1.1 补充:奇异值对应的缩放方向

在 SVD 分解 \(A=U\Sigma V^\mathsf T\) 中,\(V\) 的列向量 \(v_i\) 是输入空间的一组标准正交方向,\(U\) 的列向量 \(u_i\) 是输出空间的一组标准正交方向。相应的奇异值满足

\[ A v_i=\sigma_i u_i,\qquad A^\mathsf T u_i=\sigma_i v_i, \]

其中 \(\sigma_i\ge0\),通常按 \(\sigma_1\ge\sigma_2\ge\cdots\) 排序。也就是说,\(A\) 在输入方向 \(v_i\) 上的作用非常简单:它不混合不同的奇异方向,只把 \(v_i\) 缩放 \(\sigma_i\) 倍,再转到方向 \(u_i\) 上。

奇异值也可以由

\[ A^\mathsf T A v_i=\sigma_i^2 v_i \]

得到:\(\sigma_i^2\) 是半正定矩阵 \(A^\mathsf T A\) 的特征值。于是,奇异值总是实数且非负。

从长度的角度看,最大的奇异值给出 \(A\) 能实现的最大放大倍数;最小的奇异值给出最小缩放倍数。若某个奇异值为 \(0\),对应方向会被直接压到零向量;若它很小,该方向的信息就几乎被丢失。这正是奇异值会出现在条件数中的原因。

在 2-范数下,\(\lVert A\rVert_2\) 等于 \(A\) 的最大奇异值 \(\sigma_{\max}(A)\)\(\|A^{-1}\|_2\) 等于 \(A\) 的最小奇异值的倒数 \(\sigma^{-1}_{\min}(A)\) .

2. 条件数的定义

2.1 可逆方阵

对可逆方阵 \(A\),在指定的诱导范数下定义

\[ \kappa(A)=\lVert A\rVert\,\lVert A^{-1}\rVert. \]

它同时比较最大放大倍数与最小缩放倍数。可逆时总有 \(\kappa(A)\ge 1\),且对任意非零标量 \(c\)

\[ \kappa(cA)=\kappa(A). \]

所以条件数不受整体单位或尺度变化影响。

2.2 2-范数与奇异值

\(A=U\Sigma V^\mathsf T\) 为奇异值分解。\(U,V\) 只做旋转(或反射),\(\Sigma\) 沿正交方向以奇异值 \(\sigma_i\) 缩放。因此,对可逆方阵

\[ \boxed{\kappa_2(A)=\frac{\sigma_{\max}(A)}{\sigma_{\min}(A)}}. \]

\(A\) 奇异,则 \(\sigma_{\min}=0\),定义 \(\kappa_2(A)=\infty\)

奇异矩阵(singular matrix):对方阵 \(A\),若它不可逆,就称 \(A\) 为奇异矩阵。以下说法彼此等价:\(\det(A)=0\)\(A\) 的行(或列)向量线性相关;存在非零向量 \(x\) 使得 \(Ax=0\)\(A\) 的最小奇异值为 \(0\)。反之,可逆的方阵称为非奇异矩阵。

2.3 非方阵也有条件数

条件数并不限于方阵。设 \(A\in\mathbb R^{m\times n}\)\(r=\min(m,n)\)。若 \(A\) 满秩,即 \(\operatorname{rank}(A)=r\),常定义

\[ \kappa_2(A)=\lVert A\rVert_2\lVert A^\dagger\rVert_2 =\frac{\sigma_1}{\sigma_r}, \]

其中 \(A^\dagger\) 是 Moore--Penrose 伪逆。

  • \(m>n\) 且满列秩时,它对应最小二乘问题中从 \(b\) 到解的敏感性;
  • \(m<n\) 且满行秩时,\(Ax=b\) 通常有无穷多个解,\(A^\dagger b\) 选取其中的最小范数解;
  • 若不满秩,最小奇异值为零,标准的 2-范数条件数记为 \(\infty\)

因此,讨论非方阵时还应说明:到底研究的是最小二乘解、最小范数解,还是定义在值域上的逆映射。

3. 几何意义:单位球变成扁椭球

把单位球中的所有向量经过 \(A\) 变换:

  • 最长半轴长度为 \(\sigma_{\max}\)
  • 最短半轴长度为 \(\sigma_{\min}\)
  • 长短轴之比就是 \(\kappa_2(A)\)

\(\kappa_2(A)\approx 1\) 时,变换近似“等比例缩放加旋转”,各方向待遇相近;当 \(\kappa_2(A)\gg1\) 时,球被压成很扁的椭球,某些方向的信息几乎被丢失。数值上恢复这些方向就会很困难。

一个典型例子是

\[ A=\begin{pmatrix}1&0\\0&\varepsilon\end{pmatrix},\qquad 0<\varepsilon\ll1. \]

此时 \(\kappa_2(A)=1/\varepsilon\)。第二个坐标方向被压缩为原来的 \(\varepsilon\) 倍;反过来求解时,该方向的误差会被放大约 \(1/\varepsilon\) 倍。

4. 为什么它决定线性方程对噪声的敏感性

考虑可逆方阵的线性方程

\[ Ax=b. \]

保持 \(A\) 不变,只让观测值 \(b\) 发生扰动 \(\delta b\)

\[ A(x+\delta x)=b+\delta b. \]

由此 \(A\delta x=\delta b\)。两边同时取范数,有 \(\|A\delta x\| = \|\delta b\|\) 。根据诱导矩阵范数定义, \(\|A\| \ge \dfrac{\|A\delta x\|}{\|\delta x\|}=\dfrac{\|\delta b\|}{\|\delta x\|}\) ,所以有

\[\|A\|\|\delta x\| \ge \|\delta b\|. \tag{4-1}\]

同理,\(\|A^{-1}\| \ge \dfrac{\|x\|}{\|Ax\|}\)\(\|Ax\|=\|b\|\) ,于是有

\[\|A^{-1}\|\|b\|\ge\|x\|. \tag{4-2}\]

综合 (4-1) 和 (4-2) 式,有

\[\frac{1}{\kappa(A)}\frac{\lVert\delta b\rVert}{\lVert b\rVert} \le \frac{\lVert\delta x\rVert}{\lVert x\rVert}.\]

接下来,我们用类似的方法:

  • \(\|A\delta x\| = \|\delta b\|\)\(\|A^{-1}\| \ge \dfrac{\|\delta x\|}{\|A\delta x\|}\) 组合得到 \(\|A^{-1}\|\|\delta b\|\ge \|\delta x\|\)
  • \(\|Ax\|=\|b\|\)\(\|A\| \ge \dfrac{\|Ax\|}{\| x\|}\) 组合得到 \(\|A\|\|x\|\ge\|b\|\)

综合即得

\[\frac{\lVert\delta x\rVert}{\lVert x\rVert} \le \kappa(A)\frac{\lVert\delta b\rVert}{\lVert b\rVert}.\]

综上,对同一诱导范数,可得相对误差界

\[ \boxed{ \frac{1}{\kappa(A)}\frac{\lVert\delta b\rVert}{\lVert b\rVert} \le \frac{\lVert\delta x\rVert}{\lVert x\rVert} \le \kappa(A)\frac{\lVert\delta b\rVert}{\lVert b\rVert} }. \]

这说明:输入 \(b\) 的相对误差与解 \(x\) 的相对误差之比,最多可相差一个条件数的因子。若 \(\kappa(A)=10^6\),则极小的输入误差在最坏方向上也可能被放大百万倍。

条件数描述的是允许出现的最坏情况,不是对每个扰动的预测。即使矩阵条件数很大,某个特定方向的扰动也可能几乎不被放大;反之,最坏方向上的扰动可以逼近上界。

上式只处理 \(b\) 的扰动。实际计算中 \(A\) 本身也可能含有测量或舍入误差;这时需要分析 \((A+\delta A)(x+\delta x)=b+\delta b\),结论会额外依赖 \(\lVert\delta A\rVert/\lVert A\rVert\),而不只是上面的简单界。

6. 常见结论与注意点

  1. 条件数必须说明所用范数;不带下标时常默认 2-范数。
  2. 对实对称正定矩阵,奇异值就是特征值,故

$\(\kappa_2(A)=\lambda_{\max}(A)/\lambda_{\min}(A).\)$

对一般非正规矩阵,不能随意用特征值之比替代奇异值之比。 3. \(\sigma_{\min}\) 很小比 \(\sigma_{\max}\) 很大更值得警惕:它表示某些输入方向几乎不可恢复。 4. 条件数大不等于“矩阵元素很大”;整体乘以常数并不会改变条件数。 5. 计算条件数时通常基于 SVD 或专门估计器;避免为了求条件数而直接构造逆矩阵。

import numpy as np

A = np.array([[1.0, 0.0], [0.0, 1e-6]])
print(np.linalg.cond(A, 2))  # 1000000.0

7. 一句话总结

在 2-范数下,条件数就是矩阵最大、最小奇异值之比。它衡量线性变换对不同方向缩放得有多不均匀,也衡量求解相关线性问题时输入相对误差可能被放大到什么程度。