5.10 阻尼倒数法
改进Gram-Schmidt分解中需要计算 r i i = ∥ a i ∥ r_{ii} = \|\mathbf{a}_i\| rii=∥ai∥ , q i = a i / r i i \mathbf{q}_i = \mathbf{a}_i/r_{ii} qi=ai/rii, r i i r_{ii} rii 表示子空间第 i i i 个坐标轴的高度,当其为 0 0 0 时,说明子空间少了该维度,矩阵 A A A 不是列满秩, a i \mathbf{a}_i ai 可由前面 i − 1 i-1 i−1 个 a j , j < i \mathbf{a}_j,j < i aj,j<i 表示,这样 q i \mathbf{q}_i qi 单位向量应该为 0 \mathbf{0} 0 向量,最优解的第 i i i 个分量应该为 0 0 0 。但实际计算时,由于舍入误差, r i i r_{ii} rii 不会等于 0 0 0 ,只会趋近 0 0 0 ,是个极小的数。如果还是按公式 q i = a i / r i i \mathbf{q}_i = \mathbf{a}_i/r_{ii} qi=ai/rii 计算,由于舍入误差 q i \mathbf{q}_i qi 会极不稳定,导致最优解的第 i i i 个分量远离 0 0 0 。所以我们希望当 r i i r_{ii} rii 很小时, 1 / r i i 1/r_{ii} 1/rii 实际计算时取 0 0 0 ,不是很小时,还是取原值。即要求
1 / r i i = { 1 / r i i f o r l a r g e r i i 0 f o r s m a l l r i i 1/r_{ii} = \left \{ \begin{array}{rc} 1/r_{ii} & for & large & r_{ii} \\ 0 & for & small & r_{ii} \end{array}\right. 1/rii={1/rii0forforlargesmallriirii
为了达到这个目的,可以采用各种数学技巧,阻尼倒数法就是著名的一种。
1 / r i i = r i i r i i 2 + λ 2 1/r_{ii} = \frac{r_{ii}}{r^2_{ii}+\lambda^2} 1/rii=rii2+λ2rii
λ \lambda λ 是阻尼系数,需要人为设定,当 r i i < λ r_{ii}<\lambda rii<λ 时,认为 r i i r_{ii} rii 过小,理论上是 0 0 0 。
阻尼倒数法有如下近似结果
r i i r i i 2 + λ 2 = { 1 r i i f o r ∣ r i i ∣ ≫ λ r i i λ 2 → 0 f o r ∣ r i i ∣ ≪ λ \frac{r_{ii}}{r^2_{ii}+\lambda^2} = \left \{ \begin{array}{rc} \frac{1}{r_{ii}} & for & |r_{ii}| \gg \lambda \\ \frac{r_{ii}}{\lambda^2} \to 0 & for & |r_{ii}| \ll \lambda \end{array}\right. rii2+λ2rii={rii1λ2rii→0forfor∣rii∣≫λ∣rii∣≪λ
为了减小阻尼系数 λ \lambda λ 对正常 r i i r_{ii} rii 的影响,可以令当 r i i r_{ii} rii 较大时, λ \lambda λ 趋近 0 0 0 。可采用分段函数
λ = { λ 0 ( 1 − ∣ r i i ∣ ϵ ) f o r ∣ r i i ∣ ≤ ϵ 0 f o r ∣ r i i ∣ > ϵ \lambda = \left \{ \begin{array}{rc} \lambda_0(1-\frac{|r_{ii}|}{\epsilon}) & for & |r_{ii}| \le \epsilon \\ 0 & for & |r_{ii}| > \epsilon \end{array}\right. λ={λ0(1−ϵ∣rii∣)0forfor∣rii∣≤ϵ∣rii∣>ϵ
也可采用高斯函数
λ = λ 0 e − ( ∣ r i i ∣ ϵ ) 2 \lambda = \lambda_0 e^{-(\frac{|r_{ii}|}{\epsilon})^2} λ=λ0e−(ϵ∣rii∣)2
其中 λ 0 \lambda_0 λ0 为名义阻尼系数, ϵ \epsilon ϵ 为判断奇异的阈值。
高斯函数比分段函数更光滑,这样最优解在奇异位置更平滑。高斯函数缺点是当 r i i r_{ii} rii 较大时, λ \lambda λ 不等于 0 0 0 ,会引入极小误差。
按照阻尼倒数法计算, q i = a i / r i i \mathbf{q}_i = \mathbf{a}_i/r_{ii} qi=ai/rii ,当 r i i r_{ii} rii 趋近 0 0 0 时, q i \mathbf{q}_i qi 趋近 0 \mathbf{0} 0 。最优解的第 i i i 分量 x ^ i = ( δ i − ∑ j = i + 1 n ( δ j x ^ j ) ) / r i i \hat{x}_i = (\delta_i - \sum^{n}_{j=i+1} (\delta_j\hat{x}_j))/r_{ii} x^i=(δi−∑j=i+1n(δjx^j))/rii 也趋近 0 0 0 ,达到稳定解的目的。阻尼倒数法涉及的参数如 λ 0 \lambda_0 λ0、 ϵ \epsilon ϵ ,其最优值很难确定。
r i i r_{ii} rii 趋近 0 0 0 ,矩阵 A A A 不是列满秩,此时矩阵是行列均不满秩,方程 A x = b A\mathbf{x}=\mathbf{b} Ax=b 的解理论需要采用奇异值分解,后面章节会解释。阻尼倒数法虽能得到较稳定的解,但只是其中一个解,没有包含所有解。