矩阵条件数
矩阵条件数是数值线性代数中衡量矩阵“病态”程度的关键指标。它量化了线性方程组 \(A\mathbf{x} = \mathbf{b}\) 的解对输入数据(即矩阵 \(A\) 和向量 \(\mathbf{b}\))微小变化的敏感度。一个大的条件数意味着即使 \(A\) 或 \(\mathbf{b}\) 有微小扰动,解 \(\mathbf{x}\) 也可能发生巨大变化,这类问题称为“病态问题”。相反,小的条件数则对应“良态问题”,解是稳定的。
第一步:理解线性方程组的敏感性
考虑线性方程组 \(A\mathbf{x} = \mathbf{b}\)。在实际计算中,\(A\) 和 \(\mathbf{b}\) 可能来自测量或先前计算,存在误差或扰动。设扰动后的系统为 \((A + \delta A)(\mathbf{x} + \delta \mathbf{x}) = \mathbf{b} + \delta \mathbf{b}\),其中 \(\delta A\) 和 \(\delta \mathbf{b}\) 是微小扰动。关键问题是:扰动 \(\delta \mathbf{x}\) 有多大?条件数正是描述 \(\|\delta \mathbf{x}\| / \|\mathbf{x}\|\) 与 \(\|\delta A\| / \|A\|\)、\(\|\delta \mathbf{b}\| / \|\mathbf{b}\|\) 之间关系的量。
第二步:定义向量和矩阵的范数
为了量化“大小”,需引入范数(norm)。常用向量范数包括:
- 1-范数:\(\|\mathbf{x}\|_1 = \sum_i |x_i|\)
- 2-范数(欧几里得范数):\(\|\mathbf{x}\|_2 = \sqrt{\sum_i x_i^2}\)
- ∞-范数:\(\|\mathbf{x}\|_\infty = \max_i |x_i|\)
矩阵范数需与向量范数相容,即 \(\|A\mathbf{x}\| \leq \|A\| \|\mathbf{x}\|\)。常用矩阵范数:
- 1-范数:\(\|A\|_1 = \max_j \sum_i |a_{ij}|\)(列和最大值)
- 2-范数(谱范数):\(\|A\|_2 = \sqrt{\lambda_{\max}(A^T A)}\),其中 \(\lambda_{\max}\) 是最大特征值
- ∞-范数:\(\|A\|_\infty = \max_i \sum_j |a_{ij}|\)(行和最大值)
- Frobenius范数:\(\|A\|_F = \sqrt{\sum_{i,j} a_{ij}^2}\)
第三步:条件数的正式定义
矩阵 \(A\) 的条件数 \(\kappa(A)\) 定义为:
\[\kappa(A) = \|A\| \|A^{-1}\| \]
其中 \(\|\cdot\|\) 是某种矩阵范数。若 \(A\) 是奇异矩阵(不可逆),则条件数为无穷大。常用的条件数基于2-范数:
\[\kappa_2(A) = \|A\|_2 \|A^{-1}\|_2 = \sqrt{\frac{\lambda_{\max}(A^T A)}{\lambda_{\min}(A^T A)}} \]
对于正规矩阵(如对称矩阵),\(\kappa_2(A) = \frac{|\lambda_{\max}(A)|}{|\lambda_{\min}(A)|}\),即最大与最小特征值模长的比值。
第四步:条件数与误差放大
条件数直接控制误差放大程度。对于扰动 \(\delta \mathbf{b}\),有界:
\[\frac{\|\delta \mathbf{x}\|}{\|\mathbf{x}\|} \leq \kappa(A) \frac{\|\delta \mathbf{b}\|}{\|\mathbf{b}\|} \]
对于扰动 \(\delta A\),有:
\[\frac{\|\delta \mathbf{x}\|}{\|\mathbf{x} + \delta \mathbf{x}\|} \leq \kappa(A) \frac{\|\delta A\|}{\|A\|} \]
这表明,若 \(\kappa(A)\) 很大,微小相对扰动可能导致解的巨大相对误差。
第五步:计算条件数的实际方法
直接计算 \(A^{-1}\) 的成本高且不稳定。实用中:
- 范数估计:使用迭代算法(如幂迭代)估计 \(\|A\|_2\) 和 \(\|A^{-1}\|_2\),避免显式求逆。
- 奇异值分解(SVD):对 \(A\) 进行SVD:\(A = U \Sigma V^T\),其中 \(\Sigma\) 是奇异值矩阵。则 \(\kappa_2(A) = \frac{\sigma_{\max}}{\sigma_{\min}}\),即最大与最小奇异值之比。SVD是计算条件数最可靠的方法。
- 预条件技术:对于病态问题,通过预条件矩阵 \(P\) 将原系统转化为 \(P^{-1}A\mathbf{x} = P^{-1}\mathbf{b}\),使得 \(\kappa(P^{-1}A) \ll \kappa(A)\),从而改善数值稳定性。
第六步:条件数在数值算法中的应用
条件数影响多种算法:
- 线性方程组求解:高斯消去法或LU分解中,舍入误差放大倍数约与 \(\kappa(A)\) 成正比。
- 矩阵求逆:逆矩阵的相对误差满足 \(\frac{\|\delta A^{-1}\|}{\|A^{-1}\|} \leq \kappa(A) \frac{\|\delta A\|}{\|A\|}\)。
- 最小二乘问题:解 \(\mathbf{x}\) 的敏感性由 \(\kappa(A)\) 和 \(\kappa(A)^2 \frac{\|A\mathbf{x} - \mathbf{b}\|}{\|A\|\|\mathbf{x}\|}\) 共同决定。
- 特征值问题:特征值的敏感性取决于矩阵的条件数及特征值间的间隔。
通过理解矩阵条件数,可以预估数值结果的可靠性,并选择适当的算法或预处理策略以控制误差。