矩阵范数与扰动
条件数
条件数告诉你一个问题在任何算法运行之前会把误差放大多少。对于求解 A x = b,它回答:若数据 b 抖动一个很小的相对量,答案 x 的相对抖动最大能有多大?条件数小意味着问题宽容、良态;大则意味着脆弱、病态。
形式上 kappa(A) = ||A|| ||A^-1||,使用所选的范数。在 2-范数下它变为最大奇异值与最小奇异值之比 kappa_2(A) = sigma_max / sigma_min,这让几何变得生动:它就是 A 产生的椭球有多扁。按惯例 kappa(A) >= 1,而正交矩阵达到完美的 kappa_2 = 1。
主导不等式是:x 的相对误差 <= kappa(A) 乘以 b 的相对误差。所以若 kappa(A) = 10^6 而你的数据精确到六位,答案可能一位都不准。接近奇异的矩阵其 sigma_min 接近零,||A^-1|| 爆炸,条件极差。
关键在于:条件是问题的性质,而非你代码的性质。一个完美的、后向稳定的算法仍救不了病态系统——前向误差等于条件数乘以后向误差。正确的应对是重新表述问题(正则化、重新缩放、选取更好的坐标),而不是去追求更多的小数位。
A = [1, 1; 1, 1.0001]: kappa_2(A) ~ 4.0 x 10^4
两行几乎平行使矩阵接近奇异;b 的微小改变会让 x 剧烈摆动。
双精度下的粗略经验法则:若 kappa(A) 约为 10^d,求解 A x = b 时大约会损失 16 位有效数字中的 d 位。当 kappa = 10^16 时答案可能纯属噪声。
又称
另见