跳到主要内容

算法稳定性

阐述​

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

一般的定义​

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

∥f~(x)−f(x~)∥=∥f(x)∥O(ε);∥x~−x∥=∥x∥O(ε)\|\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∥=∥x∥O(ε)\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~−x∥∥f(x)∥/∥x∥∥x~−x∥∥x∥≤Kf(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)=∥J∥∥f(x)∥/∥x∥K_f(x)=\frac{\|J\|}{\|f(x)\|/\|x\|}

矩阵的条件数​

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

Kf(x)=∥A∥∥Ax∥/∥x∥≤∥A∥sup⁡x≠0∥x∥∥Ax∥K_f(x)=\frac{\|A\|}{\|Ax\|/\|x\|}\le\|A\|\sup_{x\ne 0}\frac{\|x\|}{\|Ax\|}

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

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

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

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

sup⁡x≠0x∗A∗Axx∗x\sqrt{\sup_{x\ne 0}\frac{x^*A^*Ax}{x^*x}}

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

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

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

实例​

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

∣f~(x)−f(x)∣≤nεmachine∑i∣xi∣+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ε∑i∣xi∣∣∑ixi∣\frac{|\tilde f(x)-f(x)|}{|f(x)|}\le n\varepsilon\frac{\sum_i|x_i|}{\left|\sum_ix_i\right|}

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

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

性质​

相关内容​

参考文献​