矩阵分解与应用
条件数(condition number)
条件数是一个单一数字,它告诉你当数据带有微小误差时(而真实数据总是带误差),A*x = b 的答案有多可信。条件数小、接近 1,说明问题很乖:b 的微小抖动只会引起答案 x 的微小抖动。条件数大则警告你:极小的输入误差可能放大成结果中的巨大波动,这种情形称为病态(ill-conditioned)。
最干净的定义来自 SVD:条件数是最大奇异值与最小奇异值之比,kappa = sigma_max / sigma_min。当最小奇异值接近零时,矩阵接近奇异(几乎不可逆),这个比值就会爆炸,因为矩阵在某个方向上几乎不拉伸空间,于是反过来求解就会极大地放大任何误差。
有一点必须说清楚:条件数大是问题本身的属性,而不是你软件里的 bug。再聪明的算法也无法彻底拯救一个病态系统,因为这种敏感性已经刻进矩阵本身。实际的教训是:留意条件数,并在可能时重新表述问题,让它保持较小。
kappa(A) = sigma_max / sigma_min (large kappa => nearly singular, ill-conditioned)
若 kappa 约为 10^6,预期答案大约会损失 6 位精度。
条件数大是问题本身的属性,不是换个更好的算法就能彻底解决的。
又称
另见