数值线性代数

数值稳定性

计算结果出错可能有两种不同的原因,把它们分开很有价值。其一是问题本身:有些问题无论谁来解都会放大任何输入误差(这就是病态问题)。其二是算法:笨拙的方法会给本来良好的问题平添误差。数值稳定性是算法的属性,衡量它额外引入了多少误差。

前向误差问的是显而易见的问题:计算结果 x-hat 与真实答案 x 相差多远,以 ||x-hat - x|| / ||x|| 度量?后向误差问的则更微妙:x-hat 恰好是哪个邻近问题的精确解?若一个算法总能返回某个与原问题仅相差极小相对量(约为机器精度量级)的问题的精确解,则称它是后向稳定的。

后向稳定性之所以是黄金标准,正因为它既可达成又有意义。你通常无法保证前向误差小——那取决于条件性,超出了算法的掌控。但你往往能保证算法所做的,不过是把数据轻微扰动了一下。两者由一条经验法则联系起来:前向误差 <~ 条件数 乘以 后向误差。

所以,当一个算法是后向稳定的而你的答案仍然很糟时,错不在算法——是问题病态。这是数值线性代数的核心诊断。带选主元的高斯消元、基于 Householder 反射的 QR、以及对称 QR 特征求解器都是后向稳定的;这正是它们值得信赖的原因。

forward error <~ cond(A) * backward error

把三个概念联系起来的经验法则:即使后向误差极小,大的条件数也能使前向误差暴涨。

后向稳定的算法仍可能给出大错特错的答案——如果问题病态的话。稳定性说的是算法尽了本分;条件性说的是问题尽了本分。两者都要检查。

又称
backward stabilityforward stability