跳到主要内容

算法稳定性

阐述

算法稳定性是指输出的误差积累相对于输入的误差的大小。

一般的定义

对于函数 f(x)f(x) 以及它的浮点数算法 f~(x)\tilde f(x),它是稳定的,如果存在一个邻近的 x~\tilde x 使得

f~(x)f(x~)=f(x)O(ε);x~x=xO(ε)\|\tilde f(x)-f(\tilde x)\|=\|f(x)\|O(\varepsilon); \quad \|\tilde x-x\|=\|x\|O(\varepsilon)

也就是说,这样的算法对几乎正确的输入总是给出几乎正确的输出。

后向稳定性

对于函数 f(x)f(x) 以及它的浮点数算法 f~(x)\tilde f(x),它是后向稳定的,如果存在一个邻近的 x~\tilde x 使得

f~(x)=f(x~);x~x=xO(ε)\tilde f(x)=f(\tilde x); \quad \|\tilde x-x\|=\|x\|O(\varepsilon)

注意,OO 中的常数项可以与问题的大小有关,但是不能与 xx 有关。也就是说,这样的算法对几乎正确的输入总是给出正确的输出。

前向稳定性

前向稳定性可以定义为

f~(x)f(x)=f(x)O(ε)\|\tilde f(x)-f(x)\|=\|f(x)\|O(\varepsilon)

但是这个基本上不会成立,而后向稳定性基本上可以满足。

如果是后向稳定的,我们可以用下式来估算前向误差:

f~(x)f(x)f(x)=f(x~)f(x)/x~xf(x)/xx~xxKf(x)O(εmachine)\frac{\|\tilde f(x)-f(x)\|}{\|f(x)\|}=\frac{\|f(\tilde x)-f(x)\|/\|\tilde x-x\|}{\|f(x)\|/\|x\|}\frac{\|\tilde x-x\|}{\|x\|}\le K_f(x)O(\varepsilon_{\rm machine})

这里,Kf(x)K_f(x) 的定义是这一比例在 ε0\varepsilon\to 0 时的上确界,它与具体的算法无关,只与函数本身的性质有关。如果函数可微,那么可以用 Jacobian 来估算 KK

Kf(x)=Jf(x)/xK_f(x)=\frac{\|J\|}{\|f(x)\|/\|x\|}

矩阵的条件数

考虑函数 f(x)=Axf(x)=Ax,那么

Kf(x)=AAx/xAsupx0xAxK_f(x)=\frac{\|A\|}{\|Ax\|/\|x\|}\le\|A\|\sup_{x\ne 0}\frac{\|x\|}{\|Ax\|}

如果 AA 是可逆的方阵,那么上式可以简化为

κ(A)=AA1\kappa(A)=\|A\|\|A^{-1}\|

对于正交矩阵,这个条件数为 1;而对于接近奇异的矩阵,这个条件数非常大。

以下我们主要讨论 2-范数,注意到 2-范数等价于

supx0xAAxxx\sqrt{\sup_{x\ne 0}\frac{x^*A^*Ax}{x^*x}}

其中 AA=HA^*A=H 是 Hermitian 矩阵,其 Rayleigh 商满足 RH(x)=xHx/xxR_H(x)=x^*Hx/x^*x。所以,我们得到:

  • L2L_2-诱导范数等价于 AAA^*A 的最大特征值的平方根
  • 逆矩阵的诱导范数等价于 AAA^*A 的最小特征值的平方根倒数

但是,研究 AAA^*A 还是不够方便,这引出了奇异值分解

实例

例如,对于简单求和算法来说,

f~(x)f(x)nεmachineixi+O(ε2)|\tilde f(x)-f(x)|\le n\varepsilon_{\rm machine}\sum_i|x_i|+O(\varepsilon^2)

也就是说,相对误差大概是

f~(x)f(x)f(x)nεixiixi\frac{|\tilde f(x)-f(x)|}{|f(x)|}\le n\varepsilon\frac{\sum_i|x_i|}{\left|\sum_ix_i\right|}

后一项称为问题的条件数,如果求和项都是正的,则为 1;如果总和接近 0,则条件数很大。

容易证明,上述的简单求和算法是后向稳定的。

性质

相关内容

参考文献