1. 计算特征值和特征向量
1.1 幂迭代法(The power iteration method)
在本节中,我们概述了一种计算可对角化矩阵的特征值和特征向量的技术。幂迭代(Power Iteration,PI)方法可能是计算矩阵一个特征值/特征向量对的最简单方法。它的收敛速度相对较慢,并且存在一些局限性。然而,我们在这里介绍它,因为它构成了许多其他更精细的特征值计算算法的基础。还有许多其他计算特征值和特征向量的技术,其中一些是为具有特殊结构的矩阵设计的,例如稀疏矩阵、带状矩阵或对称矩阵
设A ∈ R n , n \bm{A} \in \mathbb{R} ^{n,n} A ∈ R n , n ,假设A \bm{A} A 可对角化,并记λ 1 , ⋯ , λ n \lambda _1 ,\cdots , \lambda _n λ 1 , ⋯ , λ n 为A \bm{A} A 的特征值,按模递减顺序排列,即∣ λ 1 ∣ > ∣ λ 2 ∣ ≥ ⋯ ≥ ∣ λ n ∣ \lvert \lambda _1 \rvert > \lvert \lambda _2 \rvert \geq \cdots \geq \lvert \lambda _n \rvert ∣ λ 1 ∣ > ∣ λ 2 ∣ ≥ ⋯ ≥ ∣ λ n ∣ (注意我们假设∣ λ 1 ∣ \lvert \lambda _1 \rvert ∣ λ 1 ∣ 严格大于∣ λ 2 ∣ \lvert \lambda _2 \rvert ∣ λ 2 ∣ ,即A \bm{A} A 有一个主导特征值)。由于A \bm{A} A 可对角化,我们可以将其写为A = U Λ U − 1 \bm{A} = \bm{U \Lambda U}^{-1} A = U Λ U − 1 ,其中我们可以在不失一般性的情况下假设构成U \bm{U} U 列的特征向量u 1 , ⋯ , u n \bm{u}_1 , \cdots , \bm{u}_n u 1 , ⋯ , u n 已归一化,使得∥ u i ∥ 2 = 1 \lVert \bm{u}_i \rVert_2 = 1 ∥ u i ∥ 2 = 1 。我们有A k = U Λ k U − 1 \bm{A}^k = \bm{U} \bm{\Lambda}^k \bm{U}^{-1} A k = U Λ k U − 1 ,那么
A k U = U Λ k \bm{A}^k \bm{U} = \bm{U\Lambda}^k
A k U = U Λ k
现在令x ∈ C n \bm{x} \in \mathbb{C} ^n x ∈ C n 为随机选择的试验向量,且∥ x ∥ 2 = 1 \lVert \bm{x} \rVert ^2 =1 ∥ x ∥ 2 = 1 。由于U \bm{U} U 的列彼此线性无关,它们可以张成整个C n \mathbb{C} ^{n} C n 。可以定义x = U w \bm{x} = \bm{Uw} x = Uw ,并考虑
A k x = A k U w = U Λ k w = ∑ i = 1 n w i λ i k u i \bm{A}^k \bm{x} = \bm{A}^k\bm{Uw} = \bm{U\Lambda}^k \bm{w} = \sum_{i=1}^{n} w_i \lambda_i^k \bm{u}_i
A k x = A k Uw = U Λ k w = i = 1 ∑ n w i λ i k u i
请注意,如果随机选择x \bm{x} x ,那么w \bm{w} w 的第一个元素w 1 w_1 w 1 以概率1 1 1 非零。将前面的表达式乘以和除以λ 1 k \lambda _1^k λ 1 k ,我们可以得到
A k x = λ 1 k ∑ i = 1 n w i ( λ i λ 1 ) k u i = w 1 λ 1 k ( u 1 + ∑ i = 2 n w i w 1 ( λ i λ 1 ) k u i ) \bm{A}^k \bm{x} = \lambda _1^k \sum_{i=1}^{n} w_i \left( \frac{\lambda _i}{\lambda _1} \right)^k \bm{u}_i = w_1 \lambda _1^k \left( \bm{u}_1 + \sum_{i=2}^{n} \frac{w_i}{w_1} \left( \frac{\lambda _i}{\lambda _1} \right)^k \bm{u}_i \right)
A k x = λ 1 k i = 1 ∑ n w i ( λ 1 λ i ) k u i = w 1 λ 1 k ( u 1 + i = 2 ∑ n w 1 w i ( λ 1 λ i ) k u i )
也就是说,A k x \bm{A}^k \bm{x} A k x 在u 1 \bm{u}_1 u 1 的方向上有一个分量α k u 1 \alpha _k \bm{u}_1 α k u 1 ,并且在u 2 , ⋯ , u n \bm{u}_2,\cdots ,\bm{u}_n u 2 , ⋯ , u n 的方向上有一个分量α k z \alpha _k \bm{z} α k z ,即
A k x = α k u 1 + α k z , α k = w 1 λ 1 k ∈ C , z = ∑ i = 2 n w i w 1 ( λ i λ 1 ) k u i \bm{A}^k \bm{x} = \alpha _k \bm{u}_1 + \alpha _k \bm{z}, \alpha _k = w_1 \lambda _1^k \in \mathbb{C} , \bm{z} = \sum_{i=2}^{n} \frac{w_i}{w_1} \left( \frac{\lambda _i}{\lambda _1} \right)^k \bm{u}_i
A k x = α k u 1 + α k z , α k = w 1 λ 1 k ∈ C , z = i = 2 ∑ n w 1 w i ( λ 1 λ i ) k u i
对于z \bm{z} z 分量的大小,设β i = w i / w 1 \beta _i = w_i / w_1 β i = w i / w 1 ,我们有
∥ z ∥ 2 = ∥ ∑ i = 2 n β i ( λ i λ 1 ) k u i ∥ 2 ≤ ∑ i = 2 n ∥ β i ( λ i λ 1 ) k u i ∥ 2 = ∑ i = 2 n ∣ β i ∣ ∣ λ i λ 1 ∣ k ∥ u i ∥ 2 = ∑ i = 2 n ∣ β i ∣ ∣ λ i λ 1 ∣ k ≤ ∣ λ 2 λ 1 ∣ k ∑ i = 2 n ∣ β i ∣ \begin{align*}
\lVert \bm{z} \rVert_2 =& \left \lVert \sum_{i=2}^{n} \beta _i \left( \frac{\lambda _i}{\lambda _1} \right)^k \bm{u}_i \right \rVert_2 \leq \sum_{i=2}^{n} \left \lVert \beta _i \left( \frac{\lambda _i}{\lambda _1} \right)^k \bm{u}_i \right \rVert_2 \\
=& \sum_{i=2}^{n} \lvert \beta _i \rvert \left \lvert \frac{\lambda _i}{\lambda _1} \right \rvert^k \lVert \bm{u}_i \rVert_2 = \sum_{i=2}^{n} \lvert \beta _i \rvert \left \lvert \frac{\lambda _i}{\lambda _1} \right \rvert^k \\
\leq & \left \lvert \frac{\lambda _2}{\lambda _1} \right \rvert^k \sum_{i=2}^{n}\lvert \beta _i \rvert
\end{align*}
∥ z ∥ 2 = = ≤ i = 2 ∑ n β i ( λ 1 λ i ) k u i 2 ≤ i = 2 ∑ n β i ( λ 1 λ i ) k u i 2 i = 2 ∑ n ∣ β i ∣ λ 1 λ i k ∥ u i ∥ 2 = i = 2 ∑ n ∣ β i ∣ λ 1 λ i k λ 1 λ 2 k i = 2 ∑ n ∣ β i ∣
最后的不等式是由特征值模的大小顺序得出的。由于∣ λ 2 / λ 1 ∣ < 1 \lvert \lambda _2 / \lambda _1 \rvert < 1 ∣ λ 2 / λ 1 ∣ < 1 ,我们有z \bm{z} z 分量的大小在k → ∞ k \to \infty k → ∞ 时趋于零,收敛速率由比值∣ λ 2 ∣ / ∣ λ 1 ∣ \lvert \lambda _2 \rvert / \lvert \lambda _1 \rvert ∣ λ 2 ∣ / ∣ λ 1 ∣ 决定。因此A k x → α k u 1 \bm{A}^k \bm{x} \to \alpha _k \bm{u}_1 A k x → α k u 1 ,这意味着随着k → ∞ k \to \infty k → ∞ ,A k x \bm{A}^k \bm{x} A k x 趋向于与u 1 \bm{u}_1 u 1 平行。因此,通过对向量A k x \bm{A}^k \bm{x} A k x 进行归一化,我们得到
lim k → ∞ A k x ∥ A k x ∥ 2 = u 1 \lim_{k \to \infty} \frac{\bm{A}^k \bm{x}}{\lVert \bm{A}^k \bm{x} \rVert_2} = \bm{u}_1
k → ∞ lim ∥ A k x ∥ 2 A k x = u 1
定义
x ( k ) = A k x ∥ A k x ∥ 2 x(k) = \frac{\bm{A}^k \bm{x}}{\lVert \bm{A}^k \bm{x} \rVert_2}
x ( k ) = ∥ A k x ∥ 2 A k x
并且还注意到x ( k ) → u 1 x(k) \to \bm{u}_1 x ( k ) → u 1 意味着A x ( k ) → A u 1 = λ 1 u 1 \bm{A}x(k) \to \bm{Au}_1 = \lambda _1 \bm{u}_1 A x ( k ) → Au 1 = λ 1 u 1 ,因此x † ( k ) A x ( k ) → λ 1 u 1 † u 1 \bm{x}^\dagger(k)\bm{A} x(k) \to \lambda _1 \bm{u}^\dagger _1 \bm{u}_1 x † ( k ) A x ( k ) → λ 1 u 1 † u 1 († \dagger † 表示厄米共轭,因为u i \bm{u}_i u i 向量可以是复数值的)。因此,回想一下u 1 † u 1 = ∥ u 1 ∥ 2 2 = 1 \bm{u}^\dagger _1 \bm{u}_1 = \lVert \bm{u}_1 \rVert_2^2 = 1 u 1 † u 1 = ∥ u 1 ∥ 2 2 = 1 ,我们有
lim k → ∞ x † ( k ) A x ( k ) = λ 1 \lim_{k \to \infty} \bm{x}^\dagger(k)\bm{A} x(k) = \lambda _1
k → ∞ lim x † ( k ) A x ( k ) = λ 1
也就是说,乘积x † ( k ) A x ( k ) \bm{x}^\dagger(k)\bm{A} x(k) x † ( k ) A x ( k ) 会收敛到A \bm{A} A 的模最大的特征值
x † ( k ) A x ( k ) = ( A k x ) † A ( A k x ) ∥ A k x ∥ 2 2 = ( α k u 1 + α k z ) † A ( α k u 1 + α k z ) ( α k u 1 + α k z ) ( α k u 1 + α k z ) = ( u 1 + z ) † A ( u 1 + z ) ( u 1 + z ) ( u 1 + z ) = u 1 † A u 1 + u 1 † A z + z † A u 1 + z † A z u 1 † u 1 + u 1 † z + z † u 1 + z † z = u 1 † λ 1 u 1 + u 1 † A z + z † λ 1 u 1 + z † A z 1 + u 1 † z + z † u 1 + z † z = λ 1 + u 1 † A z + z † λ 1 u 1 + z † A z 1 + u 1 † z + z † u 1 + z † z \begin{align*}
&x^\dagger (k)\bm{A} x(k) \\
=& \frac{(\bm{A}^k \bm{x})^\dagger\bm{A} (\bm{A}^k \bm{x})}{ \lVert \bm{A}^k \bm{x} \rVert_2^2} \\
=& \frac{(\alpha _k \bm{u}_1 + \alpha _k \bm{z})^\dagger \bm{A} (\alpha _k \bm{u}_1 + \alpha _k \bm{z})}{(\alpha _k \bm{u}_1 + \alpha _k \bm{z})(\alpha _k \bm{u}_1 + \alpha _k \bm{z})} \\
=& \frac{( \bm{u}_1 + \bm{z})^\dagger \bm{A} (\bm{u}_1 + \bm{z})}{( \bm{u}_1 + \bm{z})( \bm{u}_1 + \bm{z})} \\
=& \frac{\bm{u}^\dagger _1 \bm{A} \bm{u}_1 + \bm{u}^\dagger _1 \bm{A} \bm{z} + \bm{z}^\dagger \bm{A} \bm{u}_1 + \bm{z}^\dagger \bm{A} \bm{z}}{\bm{u}^\dagger _1 \bm{u}_1 + \bm{u}^\dagger _1 \bm{z} + \bm{z}^\dagger \bm{u}_1 + \bm{z}^\dagger \bm{z}} \\
=& \frac{\bm{u}^\dagger _1 \lambda _1 \bm{u}_1 + \bm{u}^\dagger _1 \bm{A} \bm{z} + \bm{z}^\dagger \lambda _1 \bm{u}_1 + \bm{z}^\dagger \bm{A} \bm{z}}{1 + \bm{u}^\dagger _1 \bm{z} + \bm{z}^\dagger \bm{u}_1 + \bm{z}^\dagger \bm{z}} \\
=& \frac{ \lambda _1 + \bm{u}^\dagger _1 \bm{A} \bm{z} + \bm{z}^\dagger \lambda _1 \bm{u}_1 + \bm{z}^\dagger \bm{A} \bm{z}}{1 + \bm{u}^\dagger _1 \bm{z} + \bm{z}^\dagger \bm{u}_1 + \bm{z}^\dagger \bm{z}}
\end{align*}
= = = = = = x † ( k ) A x ( k ) ∥ A k x ∥ 2 2 ( A k x ) † A ( A k x ) ( α k u 1 + α k z ) ( α k u 1 + α k z ) ( α k u 1 + α k z ) † A ( α k u 1 + α k z ) ( u 1 + z ) ( u 1 + z ) ( u 1 + z ) † A ( u 1 + z ) u 1 † u 1 + u 1 † z + z † u 1 + z † z u 1 † A u 1 + u 1 † A z + z † A u 1 + z † A z 1 + u 1 † z + z † u 1 + z † z u 1 † λ 1 u 1 + u 1 † A z + z † λ 1 u 1 + z † A z 1 + u 1 † z + z † u 1 + z † z λ 1 + u 1 † A z + z † λ 1 u 1 + z † A z
其他项中u 1 \bm{u}_1 u 1 和A \bm{A} A 均不会随k k k 而变化,而z \bm{z} z 中含有( λ i / λ 1 ) k \left( \lambda _i / \lambda _1 \right)^k ( λ i / λ 1 ) k ,因此k → ∞ k \to \infty k → ∞ 时z → 0 \bm{z} \to \bm{0} z → 0 。因此x † ( k ) A x ( k ) x^\dagger (k)\bm{A} x(k) x † ( k ) A x ( k ) 会收敛到λ 1 \lambda _1 λ 1 ,收敛速度由∣ λ 2 ∣ / ∣ λ 1 ∣ \lvert \lambda _2 \rvert / \lvert \lambda _1 \rvert ∣ λ 2 ∣ / ∣ λ 1 ∣ 比例决定,并且以线性速度收敛
以上推理提出了以下迭代算法
算法总结:
x \bm{x} x 可以任取,只需要满足∥ x ∥ 2 = 1 \lVert \bm{x} \rVert_2=1 ∥ x ∥ 2 = 1 便可以
不断对x \bm{x} x 左乘A \bm{A} A 并归一化便可以趋近于特征向量u 1 \bm{u} _1 u 1
在迭代的过程中x † A x x^\dagger \bm{A} x x † A x 也会趋近于标量λ 1 \lambda _1 λ 1
这里在求解λ 1 \lambda _1 λ 1 时不需要再次对向量归一化,因为λ 1 \lambda _1 λ 1 并不参与迭代,它的取值不会影响迭代速度
幂迭代的一个主要优点是该算法主要依赖于矩阵与向量的乘法,因此可以利用A \bm{A} A 的任何特殊结构,例如稀疏性。幂迭代方法的两个主要缺点是
它只能求出一个特征值(模最大的那个)及其对应的特征向量
它的收敛速度取决于∣ λ 2 ∣ / ∣ λ 1 ∣ \lvert \lambda _2 \rvert / \lvert \lambda _1 \rvert ∣ λ 2 ∣ / ∣ λ 1 ∣ ,因此当该比值接近1 1 1 时,性能可能会很差。克服这些问题的一种方法是对矩阵 A 的适当移位版本应用幂迭代算法,后续将进行讨论
1.2 移位-逆幂法
给定一个复标量σ \sigma σ ,以及A ∈ R n , n \bm{A} \in \mathbb{R} ^{n,n} A ∈ R n , n 可对角化,考虑矩阵
B σ = ( A − σ I ) − 1 \bm{B}_{\sigma } = (\bm{A} - \sigma \bm{I})^{-1}
B σ = ( A − σ I ) − 1
根据谱映射定理,见Section 3.7.2 ,B σ \bm{B}_{\sigma } B σ 与A \bm{A} A 有相同的特征向量,且B σ \bm{B}_{\sigma } B σ 的特征值为μ i = ( λ i − σ ) − 1 \mu _i = (\lambda _i - \sigma )^{-1} μ i = ( λ i − σ ) − 1 ,其中λ i , i = 1 , ⋯ , n \lambda _i,i=1,\cdots ,n λ i , i = 1 , ⋯ , n 是A \bm{A} A 的特征值。B σ \bm{B}_{\sigma } B σ 的最大模特征值 μ max \mu _{\max} μ m a x 现在对应于在复平面上最接近σ \sigma σ 的λ i \lambda _i λ i 。将幂法应用于B σ \bm{B}_{\sigma } B σ ,我们因此可以得到最接近所选σ \sigma σ 的特征值λ i \lambda _i λ i 以及相应的特征向量。移位-逆幂法如下所示
算法总结:
σ \sigma σ 选取要尽可能接近目标特征值,这样经过移位λ − σ \lambda -\sigma λ − σ 后,数值变为最小,再取逆后数值变为最大
B σ \bm{B}_{\sigma } B σ 与A \bm{A} A 有相同的特征向量,因此不断左乘B σ \bm{B}_{\sigma } B σ 得到的特征向量也是A \bm{A} A 的特征向量
由于最终要求解的是A \bm{A} A 的特征值,因此对特征向量左乘的矩阵是A \bm{A} A
移位-逆幂法相对于幂迭代法的优势在于,我们现在可以快速(但仍然是线性速度)收敛到任意所需的特征值,只需选择一个足够接近目标特征值的移位σ \sigma σ 。然而,移位-逆幂法要求预先已知目标特征值的一个较好的近似值。如果事先不知道这样的良好近似值,该方法的一个变体是先用一个粗略的近似值σ \sigma σ 启动算法,然后在某个时刻,当获得了特征向量的合理近似后,动态修改移位σ \sigma σ ,重复这个过程,不断迭代地改进σ \sigma σ 。这个思想将在下一段中讨论
1.3 瑞利商(Rayleigh quotient)迭代
假设在移位-逆幂算法的某一步中,我们有一个近似特征向量x ( k ) ≠ 0 \bm{x}(k) \neq \bm{0} x ( k ) = 0 。那么,我们寻找某个近似特征值σ k \sigma _k σ k ,即一个近似满足特征值/特征向量方程的标量
x ( k ) σ k ≈ A x ( k ) \bm{x}(k) \sigma _k \approx \bm{Ax}(k)
x ( k ) σ k ≈ Ax ( k )
这里所谓近似是指我们寻找σ k \sigma _k σ k ,使得方程残差的平方范数最小,即min ∥ x ( k ) σ k − A x ( k ) ∥ \min \lVert \bm{x}(k) \sigma _k - \bm{Ax}(k) \rVert min ∥ x ( k ) σ k − Ax ( k )∥ 。通过要求该函数对σ k \sigma _k σ k 的导数为零,我们得到
∂ ( x ( k ) σ k − A x ( k ) ) † ( x ( k ) σ k − A x ( k ) ) ∂ σ k = 0 ∂ ( σ k x † ( k ) x ( k ) σ k − 2 x † ( k ) A x ( k ) σ k ) ∂ σ k = 0 x † ( k ) A x ( k ) x † ( k ) x ( k ) = σ k \begin{align*}
\frac{\partial \big(\bm{x}(k) \sigma _k - \bm{Ax}(k))^\dagger (\bm{x}(k) \sigma _k - \bm{Ax}(k)\big)}{\partial \sigma_k} &= 0 \\
\frac{\partial \big(\sigma _k \bm{x}^\dagger (k) \bm{x}(k) \sigma _k - 2\bm{x}^\dagger (k)\bm{A} \bm{x}(k) \sigma _k \big)}{\partial \sigma_k} &= 0 \\
\frac{\bm{x}^\dagger (k)\bm{A} \bm{x}(k)}{\bm{x}^\dagger (k) \bm{x}(k)} &= \sigma _k
\end{align*}
∂ σ k ∂ ( x ( k ) σ k − Ax ( k ) ) † ( x ( k ) σ k − Ax ( k ) ) ∂ σ k ∂ ( σ k x † ( k ) x ( k ) σ k − 2 x † ( k ) A x ( k ) σ k ) x † ( k ) x ( k ) x † ( k ) A x ( k ) = 0 = 0 = σ k
这被称为瑞利商(Rayleigh quotient),参见Section第4.3.1节。如果我们按照在移位-逆幂算法中自适应地选择移位,就得到了所谓的瑞利商迭代法,如下所示。与幂迭代方法不同,瑞利商迭代法可以被证明具有局部二次收敛性 ,也就是说,在经过一定次数迭代后,第k + 1 k+1 k + 1 次迭代中解的收敛差距与第k k k 次迭代中解的差距的平方成正比
算法总结:
瑞利商迭代法需要先使用幂迭代算法或者移位-逆幂算法迭代一定次数,以得到近似的特征向量值
这里在求解σ k \sigma _k σ k 时需要再次对向量归一化,因为浮点数运算是有精度误差。如果归一化,这些微小的误差会在不断迭代中不断放大
1.4 使用幂迭代计算特征值分解
矩阵A ∈ R m , n \bm{A} \in \mathbb{R} ^{m,n} A ∈ R m , n 的奇异值分解的因子可以通过计算两个对称矩阵A A ⊤ \bm{AA}^\top AA ⊤ 和A ⊤ A \bm{A}^\top \bm{A} A ⊤ A 的谱分解来获得。事实上,我们在Section 5定理 5.1 的证明中已经看到,V \bm{V} V 因子是来自A ⊤ A \bm{A}^\top \bm{A} A ⊤ A 谱分解的特征向量矩阵
A ⊤ A = V Λ n V ⊤ \bm{A}^\top \bm{A} = \bm{V \Lambda}_n \bm{V}^\top
A ⊤ A = V Λ n V ⊤
并且U \bm{U} U 因子的列是A A ⊤ \bm{AA}^\top AA ⊤ 的特征向量矩阵
A A ⊤ = U Λ m U ⊤ \bm{AA}^\top = \bm{U \Lambda}_m \bm{U}^\top
AA ⊤ = U Λ m U ⊤
Λ n \bm{\Lambda }_n Λ n 和Λ m \bm{\Lambda }_m Λ m 是对角矩阵,其前r r r 个对角元素是平方奇异值σ i 2 , i = 1 , ⋯ , r \sigma_i^2,i=1,\cdots ,r σ i 2 , i = 1 , ⋯ , r 其余对角元素为零
接下来,我们将概述如何使用幂迭代法来确定与矩阵最大奇异值对应的左奇异向量和右奇异向量。基本思路是对对称矩阵A ⊤ A \bm{A}^\top \bm{A} A ⊤ A 和A A ⊤ \bm{AA}^\top AA ⊤ 应用幂迭代,但以隐式方式进行,从而绕过对该矩阵的显式计算,因为该矩阵通常是稠密的
u ( k + 1 ) = A v ( k ) ∥ A v ( k ) ∥ 2 v ( k + 1 ) = A ⊤ u ( k + 1 ) ∥ A ⊤ u ( k + 1 ) ∥ 2 \begin{align*}
\bm{u}(k+1) &= \frac{\bm{A}\bm{v}(k)}{\lVert \bm{A}\bm{v}(k) \rVert_2} \\
\bm{v}(k+1) &= \frac{\bm{A}^\top \bm{u}(k+1)}{\lVert \bm{A}^\top \bm{u}(k+1) \rVert_2}
\end{align*}
u ( k + 1 ) v ( k + 1 ) = ∥ A v ( k ) ∥ 2 A v ( k ) = ∥ A ⊤ u ( k + 1 ) ∥ 2 A ⊤ u ( k + 1 )
消去u ( k + 1 ) \bm{u}(k+1) u ( k + 1 ) 可以得到
v ( k + 1 ) = A ⊤ A v ( k ) ∥ A ⊤ A v ( k ) ∥ 2 \bm{v}(k+1) = \frac{\bm{A}^\top \bm{A} \bm{v}(k)}{\lVert \bm{A}^\top \bm{A} \bm{v}(k) \rVert_2}
v ( k + 1 ) = ∥ A ⊤ A v ( k ) ∥ 2 A ⊤ A v ( k )
因此v ( k ) \bm{v}(k) v ( k ) 的序列对应于对A ⊤ A \bm{A}^\top \bm{A} A ⊤ A 应用幂迭代;同样,u ( k ) \bm{u}(k) u ( k ) 的序列对应于对A A ⊤ \bm{AA}^\top AA ⊤ 应用幂迭代。因此,下面的算法计算矩阵A \bm{A} A 的最大奇异值σ 1 \sigma _1 σ 1 ,以及相关的左奇异向量u 1 \bm{u}_1 u 1 和右奇异向量v 1 \bm{v}_1 v 1 (σ = u 1 ⊤ A v 1 \sigma = \bm{u}_1^\top \bm{A} \bm{v}_1 σ = u 1 ⊤ A v 1 ),前提是有占优特征值
然后,这种技术可以递归地应用于矩阵A \bm{A} A 的紧凑版本,以确定其他奇异值及其对应的左奇异向量和右奇异向量。更准确地说,我们定义矩阵
A i = A i − 1 − σ i u i v i ⊤ , i = 1 , ⋯ , r ; A 0 = A , σ 0 = 0 \bm{A}_i = \bm{A}_{i-1} - \sigma _i \bm{u}_i \bm{v}_i^\top , i = 1,\cdots ,r; \bm{A}_0 = \bm{A},\sigma _0 = 0
A i = A i − 1 − σ i u i v i ⊤ , i = 1 , ⋯ , r ; A 0 = A , σ 0 = 0
其中r = rank ( A ) \bm{r} = \operatorname{rank}(\bm{A}) r = rank ( A ) ,并对A i \bm{A}_i A i 应用以下算法,以获得A \bm{A} A 的紧凑奇异值分解的所有项(假设奇异值彼此相差较大)
算法总结:
本质上是通过对A ⊤ A \bm{A}^\top \bm{A} A ⊤ A 应用幂迭代法来求解v ( k ) \bm{v}(k) v ( k )
对v ( k ) \bm{v}(k) v ( k ) 左乘A ⊤ \bm{A}^\top A ⊤ 并归一化便可以得到u ( k + 1 ) \bm{u}(k+1) u ( k + 1 )
对矩阵不断重复− σ i u i v i ⊤ - \sigma _i \bm{u}_i \bm{v}_i^\top − σ i u i v i ⊤ 便可以求出所有u \bm{u} u 和v \bm{v} v
2. 解方阵系统的线性方程组
在本节中,我们讨论求解形式为A x = y \bm{A} \bm{x} = \bm{y} A x = y 的线性方程组的数值方法,其中A ∈ R n , n \bm{A} \in \mathbb{R} ^{n,n} A ∈ R n , n ,A \bm{A} A 可逆。一般的矩形情况可以通过奇异值分解处理参考Section 6.4.3 节
2.1 对角系统
我们首先考虑线性方程组可能具有的最简单的结构,即对角结构。一个方阵(square)、对角(diagonal)、非奇异(nonsingular)的线性方程组的形式是
[ a 11 0 ⋯ 0 0 a 22 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 ⋯ 0 a n n ] x = [ y 1 y 2 ⋮ y n ] \begin{bmatrix}
a_{11} & 0 & \cdots & 0 \\
0 & a_{22} & 0 & \vdots \\
\vdots & \vdots & \ddots & \vdots \\
0 & \cdots & 0 & a_{nn}
\end{bmatrix}
\bm{x} =
\begin{bmatrix}
y_1 \\
y_2 \\
\vdots \\
y_n
\end{bmatrix}
a 11 0 ⋮ 0 0 a 22 ⋮ ⋯ ⋯ 0 ⋱ 0 0 ⋮ ⋮ a nn x = y 1 y 2 ⋮ y n
其中a 11 , a 22 , ⋯ , a n n ≤ 0 a_{11},a_{22},\cdots ,a_{nn} \leq 0 a 11 , a 22 , ⋯ , a nn ≤ 0 。很明显,这样一个系统的唯一解可以直接写出
x = [ y 1 / a 11 y 2 / a 22 ⋮ y n / a n n ] \bm{x} =
\begin{bmatrix}
y_1 / a_{11} \\
y_2 / a_{22} \\
\vdots \\
y_n / a_{nn}
\end{bmatrix}
x = y 1 / a 11 y 2 / a 22 ⋮ y n / a nn
2.2 三角系统
另一种方阵非奇异系统的解很容易获得的情况是A \bm{A} A 矩阵具有三角结构
A = [ a 11 a 12 ⋯ a 1 n 0 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ 0 ⋯ 0 a n n ] \bm{A} =
\begin{bmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
0 & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
0 & \cdots & 0 & a_{nn}
\end{bmatrix}
A = a 11 0 ⋮ 0 a 12 a 22 ⋮ ⋯ ⋯ ⋯ ⋱ 0 a 1 n a 2 n ⋮ a nn
或者形式为
A = [ a 11 0 ⋯ 0 a 12 a 22 ⋯ 0 ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n n ] \bm{A} =
\begin{bmatrix}
a_{11} & 0 & \cdots & 0 \\
a_{12} & a_{22} & \cdots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn}
\end{bmatrix}
A = a 11 a 12 ⋮ a n 1 0 a 22 ⋮ a n 2 ⋯ ⋯ ⋱ ⋯ 0 0 ⋮ a nn
假设a 11 , a 22 , ⋯ , a n n ≠ 0 a_{11},a_{22},\cdots ,a_{nn} \neq 0 a 11 , a 22 , ⋯ , a nn = 0 。例如,考虑下三角情况
[ a 11 0 ⋯ 0 a 12 a 22 ⋯ 0 ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n n ] x = [ y 1 y 2 ⋮ y n ] \begin{bmatrix}
a_{11} & 0 & \cdots & 0 \\
a_{12} & a_{22} & \cdots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn}
\end{bmatrix}
\bm{x} =
\begin{bmatrix}
y_1 \\
y_2 \\
\vdots \\
y_n
\end{bmatrix}
a 11 a 12 ⋮ a n 1 0 a 22 ⋮ a n 2 ⋯ ⋯ ⋱ ⋯ 0 0 ⋮ a nn x = y 1 y 2 ⋮ y n
可以通过所谓的前向代入法(forward substitution)得到解:从第一个方程开始,得到x 1 = y 1 / a 11 x_1 = y_1 / a_{11} x 1 = y 1 / a 11 ,然后将该值代入第二个方程,我们得到
a 21 x 1 + a 22 x 2 = a 21 y 1 / a 11 + a 22 x 2 = y 2 a_{21}x_1 + a_{22}x_2 = a_{21} y_1 / a_{11} + a_{22}x_2 = y_2
a 21 x 1 + a 22 x 2 = a 21 y 1 / a 11 + a 22 x 2 = y 2
因此,我们得到x 2 = y 2 − a 21 y 1 / a 11 a 22 x_2 = \frac{y_2- a_{21} y_1 / a_{11}}{a_{22}} x 2 = a 22 y 2 − a 21 y 1 / a 11 。接下来,我们将x 1 , x 2 x_1,x_2 x 1 , x 2 代入第三个方程以求得 x 3 x_3 x 3 ,然后以同样的方式继续,最终得到x n x_n x n 。如下所示
算法总结:
外层循环是遍历每一个未知数
内层循环是减去每一个已知数
对于上三角系统的求解,也可以很容易地设计出类似的算法,如下所示
备注7.1(运算计数) :通过反向代入求解三角系统所需的代数运算(除法、乘法和加减法)的总数很容易确定。在每一步i = n , … , 1 i=n,\dots ,1 i = n , … , 1 中,算法各执行n − i n − i n − i 次乘法和加法运算,还有一次除法运算。因此,总运算量为
∑ i = n 1 2 ( n − i ) + 1 = n 2 \sum_{i=n}^{1} 2(n-i)+1 = n^2
i = n ∑ 1 2 ( n − i ) + 1 = n 2
2.3 高斯消元法(Gaussian elimination)
三角形非奇异系统的解非常容易求得。对于一个一般的非奇异但可能不是三角形的矩阵可以通过适当的操作转化为等价的上三角系统,然后使用反向代入(backward substitution)求解得到的三角系统。这种迭代三角化技术被称为高斯消元法
考虑一个方形非奇异系统
[ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n n ] x = [ y 1 y 2 ⋮ y n ] \begin{bmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn} \\
\end{bmatrix}
\bm{x} =
\begin{bmatrix}
y_1 \\
y_2 \\
\vdots \\
y_n
\end{bmatrix}
a 11 a 21 ⋮ a n 1 a 12 a 22 ⋮ a n 2 ⋯ ⋯ ⋱ ⋯ a 1 n a 2 n ⋮ a nn x = y 1 y 2 ⋮ y n
从j = 2 j=2 j = 2 ,用方程j j j 减去方程1 1 1 乘以a j 1 / a 11 a_{j1} / a_{11} a j 1 / a 11 (假设a 11 ≠ 0 a_{11} \neq 0 a 11 = 0 )来替代每个方程,从而得到等价的方程组
[ a 11 a 12 a 13 ⋯ a 1 n 0 a 22 ( 1 ) a 23 ( 1 ) ⋯ a 2 n ( 1 ) 0 a 32 ( 1 ) a 33 ( 1 ) ⋯ a 3 n ( 1 ) ⋮ ⋮ ⋮ ⋱ ⋮ 0 a n 2 ( 1 ) a n 3 ( 1 ) ⋯ a n n ( 1 ) ] x = [ y 1 y 2 ( 1 ) y 3 ( 1 ) ⋮ y n ( 1 ) ] \begin{bmatrix}
a_{11} & a_{12} & a_{13} & \cdots & a_{1n} \\
0 & a_{22}^{(1)} & a_{23}^{(1)} & \cdots & a_{2n}^{(1)} \\
0 & a_{32}^{(1)} & a_{33}^{(1)} & \cdots & a_{3n}^{(1)} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
0 & a_{n2}^{(1)} & a_{n3}^{(1)} & \cdots & a_{nn}^{(1)}
\end{bmatrix}
\bm{x} =
\begin{bmatrix}
y_1 \\
y_2^{(1)} \\
y_3^{(1)} \\
\vdots \\
y_n^{(1)}
\end{bmatrix}
a 11 0 0 ⋮ 0 a 12 a 22 ( 1 ) a 32 ( 1 ) ⋮ a n 2 ( 1 ) a 13 a 23 ( 1 ) a 33 ( 1 ) ⋮ a n 3 ( 1 ) ⋯ ⋯ ⋯ ⋱ ⋯ a 1 n a 2 n ( 1 ) a 3 n ( 1 ) ⋮ a nn ( 1 ) x = y 1 y 2 ( 1 ) y 3 ( 1 ) ⋮ y n ( 1 )
共重复n − 1 n − 1 n − 1 次,最终可以确定一个与原系统等价的上三角形式的系统
[ a 11 a 12 a 13 ⋯ a 1 n 0 a 22 ( 1 ) a 23 ( 1 ) ⋯ a 2 n ( 1 ) 0 0 a 33 ( 2 ) ⋯ a 3 n ( 2 ) ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ a n n ( n − 1 ) ] x = [ y 1 y 2 ( 1 ) y 3 ( 2 ) ⋮ y n ( n − 1 ) ] \begin{bmatrix}
a_{11} & a_{12} & a_{13} & \cdots & a_{1n} \\
0 & a_{22}^{(1)} & a_{23}^{(1)} & \cdots & a_{2n}^{(1)} \\
0 & 0 & a_{33}^{(2)} & \cdots & a_{3n}^{(2)} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
0 & 0 & 0 & \cdots & a_{nn}^{(n-1)}
\end{bmatrix}
\bm{x} =
\begin{bmatrix}
y_1 \\
y_2^{(1)} \\
y_3^{(2)} \\
\vdots \\
y_n^{(n-1)}
\end{bmatrix}
a 11 0 0 ⋮ 0 a 12 a 22 ( 1 ) 0 ⋮ 0 a 13 a 23 ( 1 ) a 33 ( 2 ) ⋮ 0 ⋯ ⋯ ⋯ ⋱ ⋯ a 1 n a 2 n ( 1 ) a 3 n ( 2 ) ⋮ a nn ( n − 1 ) x = y 1 y 2 ( 1 ) y 3 ( 2 ) ⋮ y n ( n − 1 )
然后可以通过反向代入法求解系统
备注7.2(带选主元的消元) :注意,如果在消去中遇到对角元素为零,上述方法将会失败,因为无法用该元素进行除法。在实际中,如果该元素的绝对值非常小,也会出现问题。可以对算法进行修改,引入部分或完全选主元
完全选主元的思路非常简单:在过程的第k k k 阶段,我们寻找绝对值最大的元素a i j ( k − 1 ) , i > k , j ≥ k a_{ij}^{(k-1)},i>k,j \geq k a ij ( k − 1 ) , i > k , j ≥ k 。该元素称为主元,并将矩阵的行和列进行交换,使其进入( k , k ) (k,k) ( k , k ) 位置;然后消元阶段按之前描述的方法进行,并重复此过程。注意,当交换矩阵的两行时,向量y \bm{y} y 中的元素也需要相应地交换。同样地,当交换矩阵的两列时,相应的x x x 元素也需要交换
部分选主元的工作方式类似,但只在元素所在列的下方元素中搜索主元,因此在此情况下只需要交换两行。选主元增加了求解所需的数值工作量,因为每个阶段都需要进行主元搜索,同时还需要进行内存管理操作以交换行(在完全选主元的情况下还需交换列)
下面的算法描述了带部分主元的高斯消元法
接下来我们计算通过高斯消元法解方阵系统所需的基本操作次数。首先考虑高斯消元过程,我们看到在该过程的第一次迭代中,需要2 n + 1 2n+1 2 n + 1 次操作来更新矩阵的第二行(1 1 1 次除法和n n n 次乘法和减法运算以求出行的新的元素)。因此,为了将第一列中第一个元素以下的所有元素置零,并更新从第二行开始的所有行,需要( n − 1 ) ( 2 n + 1 ) (n-1)(2n+1) ( n − 1 ) ( 2 n + 1 ) 次操作。接下来,我们需要( n − 2 ) ( 2 n − 1 ) (n-2)(2n-1) ( n − 2 ) ( 2 n − 1 ) 次操作以将第二列置零并更新矩阵;对于第三列,我们需要( n − 3 ) ( 2 n − 3 ) (n-3)(2n-3) ( n − 3 ) ( 2 n − 3 ) 次操作,依此类推。这些操作的总和为
∑ i = 1 n − 1 ( n − i ) ( 2 ( n − i + 1 ) + 1 ) = ∑ i = 1 n − 1 ( n − i ) ( 2 n − 2 i + 3 ) = ∑ k = 1 n − 1 k ( 2 k + 3 ) = 2 ∑ k = 1 n − 1 k 2 + 3 ∑ k = 1 n − 1 k = n ( n − 1 ) ( 2 n − 1 ) 3 + 3 n ( n − 1 ) 2 = ∼ 2 3 n 3 \begin{align*}
& \sum_{i=1}^{n-1} \big(n-i\big)\big(2(n-i+1)+1\big) \\
=& \sum_{i=1}^{n-1} (n-i)(2n-2i+3) \\
=& \sum_{k=1}^{n-1} k(2k+3) \\
=& 2\sum_{k=1}^{n-1} k^2 + 3 \sum_{k=1}^{n-1} k \\
=& \frac{n(n-1)(2n-1)}{3} + \frac{3n(n-1)}{2} \\
=& \sim \frac{2}{3} n^3
\end{align*}
= = = = = i = 1 ∑ n − 1 ( n − i ) ( 2 ( n − i + 1 ) + 1 ) i = 1 ∑ n − 1 ( n − i ) ( 2 n − 2 i + 3 ) k = 1 ∑ n − 1 k ( 2 k + 3 ) 2 k = 1 ∑ n − 1 k 2 + 3 k = 1 ∑ n − 1 k 3 n ( n − 1 ) ( 2 n − 1 ) + 2 3 n ( n − 1 ) ∼ 3 2 n 3
这里的符号∼ \sim ∼ 表示多项式中的首项,这种表示法比通常的O ( ⋅ ) O(\cdot) O ( ⋅ ) 表示法更具信息性,因为它指出了首项的系数。我们最终需要对变换后的三角系统应用反向代入,这将额外需要n 2 n^2 n 2 次运算。这不会改变主导的复杂度项,因此求解一个一般的非奇异系统所需的总运算次数为∼ 2 3 n 3 \sim \frac{2}{3} n^3 ∼ 3 2 n 3
3. QR分解
QR分解是一种线性代数操作,它将一个矩阵分解为一个正交分量,该分量是矩阵列空间的基,以及一个三角分量。在QR分解中,矩阵A ∈ R m , n \bm{A} \in \mathbb{R} ^{m,n} A ∈ R m , n ,其中m ≥ n m \geq n m ≥ n ,且rank ( A ) \operatorname{rank}(\bm{A}) rank ( A ) ,因此被分解为
A = Q R \bm{A} = \bm{Q} \bm{R}
A = Q R
其中Q ∈ R m , n \bm{Q} \in \mathbb{R} ^{m,n} Q ∈ R m , n 具有正交列(即Q ⊤ Q = I n \bm{Q}^\top \bm{Q} = \bm{I}_n Q ⊤ Q = I n ),并且R ∈ R n , n \bm{R} \in \mathbb{R} ^{n,n} R ∈ R n , n 是上三角矩阵。计算 QR 分解的方法有很多,包括 Householder 变换法、改进的 Gram–Schmidt 算法以及快速 Givens 方法。这里,我们描述基于改进的 Gram–Schmidt 算法(modified Gram–Schmidt, MGS)的方法
3.1 改进的Gram–Schmidt过程
我们回忆一下Section第2.3.3节,当给定一组线性无关向量{ a ( 1 ) , ⋯ , a ( n ) } \left\{ \bm{a}^{(1)},\cdots , \bm{a}^{(n)}\right\} { a ( 1 ) , ⋯ , a ( n ) } 时,Gram–Schmidt(GS)过程会构造一个与原始向量组具有相同张成空间的正交归一向量组{ q ( 1 ) , ⋯ , q ( n ) } \left\{ \bm{q}^{(1)},\cdots , \bm{q}^{(n)}\right\} { q ( 1 ) , ⋯ , q ( n ) } ,具体如下:对于k = 1 , ⋯ n k = 1,\cdots n k = 1 , ⋯ n
ζ ( k ) = a ( k ) − ∑ i = 1 k − 1 ⟨ a ( k ) , q ( i ) ⟩ q ( i ) q ( k ) = ζ ( k ) ∥ ζ ( k ) ∥ \begin{gather*}
\bm{\zeta}^{(k)} = \bm{a}^{(k)} - \sum_{i=1}^{k-1} \left\langle \bm{a}^{(k)}, \bm{q}^{(i)} \right\rangle\bm{q}^{(i)} \\
\bm{q}^{(k)}= \frac{\bm{\zeta}^{(k)}}{\lVert \bm{\zeta}^{(k)} \rVert}
\end{gather*}
ζ ( k ) = a ( k ) − i = 1 ∑ k − 1 ⟨ a ( k ) , q ( i ) ⟩ q ( i ) q ( k ) = ∥ ζ ( k ) ∥ ζ ( k )
设S k − 1 = span { a ( 1 ) , ⋯ , a ( n ) } \mathcal{S}_{k-1} = \operatorname{span}\left\{ \bm{a}^{(1)},\cdots , \bm{a}^{(n)}\right\} S k − 1 = span { a ( 1 ) , ⋯ , a ( n ) } ,并设其正交补记为S k − 1 ⊥ \mathcal{S}_{k-1}^\perp S k − 1 ⊥ 。在上述方程中,GS 过程计算a ( k ) \bm{a}^{(k)} a ( k ) 在S k − 1 \mathcal{S}_{k-1} S k − 1 上的投影,然后从a ( k ) \bm{a}^{(k)} a ( k ) 中减去它,从而得到a ( k ) \bm{a}^{(k)} a ( k ) 在S k − 1 ⊥ \mathcal{S}_{k-1}^\perp S k − 1 ⊥ 上的投影。容易看出,上述方程中的投影运算可以用矩阵形式表示如下
ζ ( k ) = P S k − 1 ⊥ a ( k ) P S k − 1 ⊥ = I − P S k − 1 P S k − 1 = ∑ i = 1 k − 1 q ( i ) q ( i ) ⊤ \begin{gather*}
\bm{\zeta}^{(k)} = \mathcal{P}_{\mathcal{S}_{k-1}^\perp} \bm{a}^{(k)} \\
\mathcal{P}_{\mathcal{S}_{k-1}^\perp} = \bm{I} - \mathcal{P}_{\mathcal{S}_{k-1}} \\
\mathcal{P}_{\mathcal{S}_{k-1}} = \sum_{i=1}^{k-1} \bm{q}^{(i)} \bm{q}^{(i)\top}
\end{gather*}
ζ ( k ) = P S k − 1 ⊥ a ( k ) P S k − 1 ⊥ = I − P S k − 1 P S k − 1 = i = 1 ∑ k − 1 q ( i ) q ( i ) ⊤
其中P S 0 = 0 , P S 0 ⊥ = I \mathcal{P}_{\mathcal{S}_{0}} = 0,\mathcal{P}_{\mathcal{S}_{0}}^\perp = \bm{I} P S 0 = 0 , P S 0 ⊥ = I 。此外,正交投影矩阵P S k − 1 ⊥ = I − P S k − 1 \mathcal{P}_{\mathcal{S}_{k-1}^\perp} = \bm{I} - \mathcal{P}_{\mathcal{S}_{k-1}} P S k − 1 ⊥ = I − P S k − 1 可以表示为投影到各个q ( 1 ) , ⋯ , q ( k − 1 ) \bm{q}^{(1)},\cdots ,\bm{q}^{(k-1)} q ( 1 ) , ⋯ , q ( k − 1 ) 的正交子空间的初等投影的乘积 ,即
P S k − 1 ⊥ = P q ( k − 1 ) ⊥ ⋯ P q ( 1 ) ⊥ , k > 1 P q ( i ) ⊥ = I − q ( i ) q ( i ) ⊤ \begin{gather*}
\mathcal{P}_{\mathcal{S}_{k-1}^\perp} = \mathcal{P}_{\bm{q}^{(k-1) ^\perp}} \cdots \mathcal{P}_{\bm{q}^{(1) ^\perp}},k>1 \\
\mathcal{P}_{\bm{q}^{(i) ^\perp}} =\bm{I} - \bm{q}^{(i)} \bm{q}^{(i)\top}
\end{gather*}
P S k − 1 ⊥ = P q ( k − 1 ) ⊥ ⋯ P q ( 1 ) ⊥ , k > 1 P q ( i ) ⊥ = I − q ( i ) q ( i ) ⊤
这个事实可以很容易地直接验证:例如取k = 3 k=3 k = 3 (一般情况可以通过相同的论证得出)
P q ( 2 ) ⊥ P q ( 1 ) ⊥ = ( I − q ( 2 ) q ( 2 ) ⊤ ) ( I − q ( 1 ) q ( 1 ) ⊤ ) = I − q ( 2 ) q ( 2 ) ⊤ − q ( 1 ) q ( 1 ) ⊤ + q ( 2 ) q ( 2 ) ⊤ q ( 1 ) q ( 1 ) ⊤ = I − q ( 2 ) q ( 2 ) ⊤ − q ( 1 ) q ( 1 ) ⊤ = I − P S 2 = P S 2 ⊥ \begin{align*}
&\mathcal{P}_{\bm{q}^{(2) ^\perp}}\mathcal{P}_{\bm{q}^{(1) ^\perp}} \\
=& (\bm{I} - \bm{q}^{(2)} \bm{q}^{(2)\top})(\bm{I} - \bm{q}^{(1)} \bm{q}^{(1)\top}) \\
=& \bm{I} - \bm{q}^{(2)} \bm{q}^{(2)\top} - \bm{q}^{(1)} \bm{q}^{(1)\top} + \bm{q}^{(2)} \bm{q}^{(2)\top} \bm{q}^{(1)} \bm{q}^{(1)\top} \\
=& \bm{I} - \bm{q}^{(2)} \bm{q}^{(2)\top} - \bm{q}^{(1)} \bm{q}^{(1)\top} \\
=& \bm{I} - \mathcal{P}_{\mathcal{S}_{2}} \\
=& \mathcal{P}_{\mathcal{S}_{2}^\perp}
\end{align*}
= = = = = P q ( 2 ) ⊥ P q ( 1 ) ⊥ ( I − q ( 2 ) q ( 2 ) ⊤ ) ( I − q ( 1 ) q ( 1 ) ⊤ ) I − q ( 2 ) q ( 2 ) ⊤ − q ( 1 ) q ( 1 ) ⊤ + q ( 2 ) q ( 2 ) ⊤ q ( 1 ) q ( 1 ) ⊤ I − q ( 2 ) q ( 2 ) ⊤ − q ( 1 ) q ( 1 ) ⊤ I − P S 2 P S 2 ⊥
在 MGS 中,每个ζ ( k ) = P q ( k − 1 ) ⊥ ⋯ P q ( 1 ) ⊥ I a ( k ) \bm{\zeta}^{(k)} = \mathcal{P}_{\bm{q}^{(k-1) ^\perp}} \cdots \mathcal{P}_{\bm{q}^{(1) ^\perp}} \bm{I} \bm{a}^{(k)} ζ ( k ) = P q ( k − 1 ) ⊥ ⋯ P q ( 1 ) ⊥ I a ( k ) 按如下方式递归计算(注意以下计算的是一个ζ \bm{\zeta} ζ )
ζ ( k ) ( 1 ) = a ( k ) , ζ ( k ) ( 2 ) = P q ( 1 ) ⊥ ζ ( k ) ( 1 ) = ( I − q ( 1 ) q ( 1 ) ⊤ ) ζ ( k ) ( 1 ) = ζ ( k ) ( 1 ) − q ( 1 ) q ( 1 ) ⊤ ζ ( k ) ( 1 ) , ζ ( k ) ( 3 ) = P q ( 2 ) ⊥ ζ ( k ) ( 2 ) = ζ ( k ) ( 2 ) − q ( 2 ) q ( 2 ) ⊤ ζ ( k ) ( 2 ) , ⋮ ⋮ ⋮ ζ ( k ) ( k ) = P q ( k − 1 ) ⊥ ζ ( k ) ( k − 1 ) = ζ ( k ) ( k − 1 ) − q ( k − 1 ) q ( k − 1 ) ⊤ ζ ( k ) ( k − 1 ) . \begin{align*}
\bm{\zeta}^{(k)}(1) &= \bm{a}^{(k)}, \\
\bm{\zeta}^{(k)}(2) &= \mathcal{P}_{\bm{q}^{(1)\perp}} \bm{\zeta}^{(k)}(1) = \left(\bm{I} - \bm{q}^{(1)} \bm{q}^{(1)\top}\right) \bm{\zeta}^{(k)}(1) \\
&= \bm{\zeta}^{(k)}(1) - \bm{q}^{(1)} \bm{q}^{(1)\top} \bm{\zeta}^{(k)}(1), \\
\bm{\zeta}^{(k)}(3) &= \mathcal{P}_{\bm{q}^{(2)\perp}} \bm{\zeta}^{(k)}(2) = \bm{\zeta}^{(k)}(2) - \bm{q}^{(2)} \bm{q}^{(2)\top} \bm{\zeta}^{(k)}(2), \\
&\ \ \vdots \quad \vdots \quad \vdots \\
\bm{\zeta}^{(k)}(k) &= \mathcal{P}_{\bm{q}^{(k-1)\perp}} \bm{\zeta}^{(k)}(k-1) \\
&= \bm{\zeta}^{(k)}(k-1) - \bm{q}^{(k-1)} \bm{q}^{(k-1)\top} \bm{\zeta}^{(k)}(k-1).
\end{align*}
ζ ( k ) ( 1 ) ζ ( k ) ( 2 ) ζ ( k ) ( 3 ) ζ ( k ) ( k ) = a ( k ) , = P q ( 1 ) ⊥ ζ ( k ) ( 1 ) = ( I − q ( 1 ) q ( 1 ) ⊤ ) ζ ( k ) ( 1 ) = ζ ( k ) ( 1 ) − q ( 1 ) q ( 1 ) ⊤ ζ ( k ) ( 1 ) , = P q ( 2 ) ⊥ ζ ( k ) ( 2 ) = ζ ( k ) ( 2 ) − q ( 2 ) q ( 2 ) ⊤ ζ ( k ) ( 2 ) , ⋮ ⋮ ⋮ = P q ( k − 1 ) ⊥ ζ ( k ) ( k − 1 ) = ζ ( k ) ( k − 1 ) − q ( k − 1 ) q ( k − 1 ) ⊤ ζ ( k ) ( k − 1 ) .
虽然两种公式( GS 和 MGS )在数学上是等价的,但后者在数值上被证明更稳定。接下来将 MGS 过程形式化为一个算法
对于较大的m , n m,n m , n ,计算工作主要由算法的最内层循环支配:计算r i j = q ( i ) ⊤ ζ ( j ) r_{ij} = \bm{q}^{(i)\top} \bm{\zeta}^{(j)} r ij = q ( i ) ⊤ ζ ( j ) 需要m m m 次乘加运算(实际是m m m 次乘法和m − 1 m-1 m − 1 次加法),而计算ζ ( j ) = ζ ( j ) − r i j q ( i ) \bm{\zeta}^{(j)} = \bm{\zeta}^{(j)} - r_{ij}\bm{q}^{(i)} ζ ( j ) = ζ ( j ) − r ij q ( i ) 需要m m m 次乘减运算,因此每个内层循环总计4 m 4m 4 m 次操作。因此,算法的总体操作计数大约为
∑ i = 1 n ∑ j = i + 1 n 4 m = ∑ i = 1 n ( n − i ) 4 m = ( n 2 − n ( n + 1 ) 2 ) 4 m ∼ 2 m n 2 \sum_{i=1}^{n} \sum_{j=i+1}^{n} 4m = \sum_{i=1}^{n} (n-i)4m = \big( n^2 - \frac{n(n+1)}{2} \big)4m \sim 2mn^2
i = 1 ∑ n j = i + 1 ∑ n 4 m = i = 1 ∑ n ( n − i ) 4 m = ( n 2 − 2 n ( n + 1 ) ) 4 m ∼ 2 m n 2
接下来我们将展示 MGS 算法实际上提供了A \bm{A} A 的 QR 分解中的Q \bm{Q} Q 和R \bm{R} R 因子。设a ( 1 ) , ⋯ , a ( n ) \bm{a}^{(1)},\cdots ,\bm{a}^{(n)} a ( 1 ) , ⋯ , a ( n ) 表示A \bm{A} A 的各列。由于ζ ( 1 ) = a ( 1 ) \bm{\zeta}^{(1)} = \bm{a}^{(1)} ζ ( 1 ) = a ( 1 ) ,并且对于j > 1 j >1 j > 1
ζ ( j ) = a ( j ) − ∑ i = 1 j − 1 q ( i ) q ( i ) ⊤ a ( j ) \bm{\zeta}^{(j)} = \bm{a}^{(j)} - \sum_{i=1}^{j-1} \bm{q}^{(i)} \bm{q}^{(i)\top} \bm{a}^{(j)}
ζ ( j ) = a ( j ) − i = 1 ∑ j − 1 q ( i ) q ( i ) ⊤ a ( j )
现在设r j j = ∥ ζ ( j ) ∥ , r i j = q ( i ) ⊤ a ( j ) r_{jj} = \lVert \bm{\zeta}^{(j)} \rVert,r_{ij} = \bm{q}^{(i)\top} \bm{a}^{(j)} r jj = ∥ ζ ( j ) ∥ , r ij = q ( i ) ⊤ a ( j ) ,并回忆q ( j ) = ζ ( j ) / r j j \bm{q}^{(j)}= \bm{\zeta}^{(j)} / r_{jj} q ( j ) = ζ ( j ) / r jj 。前面的方程变为
r j j q ( j ) = a ( j ) − ∑ i = 1 j − 1 r i j q ( i ) r_{jj} \bm{q}^{(j)} = \bm{a}^{(j)} - \sum_{i=1}^{j-1} r_{ij} \bm{q}^{(i)}
r jj q ( j ) = a ( j ) − i = 1 ∑ j − 1 r ij q ( i )
那也就是说
a ( j ) = r j j q ( j ) + ∑ i = 1 j − 1 r i j q ( i ) \bm{a}^{(j)} = r_{jj} \bm{q}^{(j)} + \sum_{i=1}^{j-1} r_{ij} \bm{q}^{(i)}
a ( j ) = r jj q ( j ) + i = 1 ∑ j − 1 r ij q ( i )
这给出了所需的分解A = Q R \bm{A} = \bm{Q} \bm{R} A = Q R ,其中
[ a ( 1 ) ⋯ a ( n ) ] = [ q ( 1 ) ⋯ q ( n ) ] [ r 11 r 12 ⋯ r 1 n 0 r 22 ⋯ r 2 n ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ r n n ] [\bm{a}^{(1)} \cdots \bm{a}^{(n)}] = [\bm{q}^{(1)} \cdots \bm{q}^{(n)}]
\begin{bmatrix}
r_{11} & r_{12} & \cdots & r_{1n} \\
0 & r_{22} & \cdots & r_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \cdots & r_{nn} \\
\end{bmatrix}
[ a ( 1 ) ⋯ a ( n ) ] = [ q ( 1 ) ⋯ q ( n ) ] r 11 0 ⋮ 0 r 12 r 22 ⋮ 0 ⋯ ⋯ ⋱ ⋯ r 1 n r 2 n ⋮ r nn
以上推理构成了以下事实的构造性证明
定理7.1(QR 分解) :任意矩阵A ∈ R m , n \bm{A} \in \mathbb{R} ^{m,n} A ∈ R m , n ,且m ≥ n m \geq n m ≥ n ,rank ( A ) = n \operatorname{rank}(\bm{A}) = n rank ( A ) = n ,都可以分解为A = Q R \bm{A} = \bm{Q} \bm{R} A = Q R ,其中R ∈ R n , n \bm{R} \in \mathbb{R} ^{n,n} R ∈ R n , n 为上三角矩阵且对角线元素为正,Q ∈ R m , n \bm{Q} \in \mathbb{R} ^{m,n} Q ∈ R m , n 的列向量标准正交(即满足Q ⊤ Q = I n \bm{Q}^\top \bm{Q} = \bm{I}_n Q ⊤ Q = I n )
3.2 针对秩亏矩阵的 MGS 和 QR 分解
在标准的 GS 过程中,我们假设向量{ a ( 1 ) , ⋯ , a ( n ) } , a ( i ) ∈ R m \left\{ \bm{a}^{(1)},\cdots , \bm{a}^{(n)}\right\},\bm{a}^{(i)} \in \mathbb{R} ^m { a ( 1 ) , ⋯ , a ( n ) } , a ( i ) ∈ R m 是线性无关的,也就是说矩阵A = [ a ( 1 ) ⋯ a ( n ) ] ∈ R m , n \bm{A} = [\bm{a}^{(1)} \cdots \bm{a}^{(n)}] \in \mathbb{R} ^{m,n} A = [ a ( 1 ) ⋯ a ( n ) ] ∈ R m , n 是列满秩的。接下来,我们讨论如何将 GS 过程和 QR 分解推广到A \bm{A} A 不满秩的情况,即{ a ( 1 ) , ⋯ , a ( n ) } \left\{ \bm{a}^{(1)},\cdots , \bm{a}^{(n)}\right\} { a ( 1 ) , ⋯ , a ( n ) } 线性相关时。在这种情况下,令k ≤ n k \leq n k ≤ n 为最小整数,使得向量a ( k ) \bm{a}^{(k)} a ( k ) 可以表示为前面向量{ a ( 1 ) , ⋯ , a ( k − 1 ) } \left\{ \bm{a}^{(1)},\cdots , \bm{a}^{(k-1)}\right\} { a ( 1 ) , ⋯ , a ( k − 1 ) } 的线性组合(前k − 1 k-1 k − 1 个向量线性无关,前k k k 个向量线性相关),即
a ( k ) = ∑ i = 1 k − 1 α ~ i a ( i ) \bm{a}^{(k)} = \sum_{i=1}^{k-1} \tilde{\alpha }_i \bm{a}^{(i)}
a ( k ) = i = 1 ∑ k − 1 α ~ i a ( i )
α ~ i \tilde{\alpha }_i α ~ i 为标量。可知{ q ( 1 ) , ⋯ , q ( k − 1 ) } \left\{ \bm{q}^{(1)},\cdots , \bm{q}^{(k-1)}\right\} { q ( 1 ) , ⋯ , q ( k − 1 ) } 张成的子空间与 { a ( 1 ) , ⋯ , a ( k − 1 ) } \left\{ \bm{a}^{(1)},\cdots , \bm{a}^{(k-1)}\right\} { a ( 1 ) , ⋯ , a ( k − 1 ) } 相同,我们也有
a ( k ) = ∑ i = 1 k − 1 α i q ( i ) \bm{a}^{(k)} = \sum_{i=1}^{k-1} \alpha_i \bm{q}^{(i)}
a ( k ) = i = 1 ∑ k − 1 α i q ( i )
α i \alpha_i α i 为标量。由于向量q ( j ) , j = 1 , … , k − 1 \bm{q}^{(j)},j=1,\dots,k-1 q ( j ) , j = 1 , … , k − 1 是标准正交的
⟨ a ( k ) , q ( j ) ⟩ = ∑ i = 1 k − 1 α i ⟨ q ( i ) , q ( j ) ⟩ = α j \left\langle \bm{a}^{(k)}, \bm{q}^{(j)} \right\rangle = \sum_{i=1}^{k-1}\alpha_i \left\langle \bm{q}^{(i)}, \bm{q}^{(j)} \right\rangle = \alpha _j
⟨ a ( k ) , q ( j ) ⟩ = i = 1 ∑ k − 1 α i ⟨ q ( i ) , q ( j ) ⟩ = α j
因此,根据ζ ( k ) = a ( k ) − ∑ i = 1 k − 1 ⟨ a ( k ) , q ( i ) ⟩ q ( i ) \bm{\zeta}^{(k)} = \bm{a}^{(k)} - \sum_{i=1}^{k-1} \left\langle \bm{a}^{(k)}, \bm{q}^{(i)} \right\rangle\bm{q}^{(i)} ζ ( k ) = a ( k ) − ∑ i = 1 k − 1 ⟨ a ( k ) , q ( i ) ⟩ q ( i ) 可以得到ζ ( k ) = 0 \bm{\zeta}^{(k)} = \bm{0} ζ ( k ) = 0 ,因此标准程序无法继续。然而,广义程序通过丢弃所有满足ζ ( k ′ ) = 0 \bm{\zeta}^{(k')} = \bm{0} ζ ( k ′ ) = 0 的对应向量a ( k ′ ) , k ′ ≥ k \bm{a}^{(k')} ,k' \geq k a ( k ′ ) , k ′ ≥ k ,来继续进行,直到程序终止,或者找到一个ζ ( k ′ ) ≠ 0 \bm{\zeta}^{(k')} \neq \bm{0} ζ ( k ′ ) = 0 的向量a ( k ′ ) \bm{a}^{(k')} a ( k ′ ) 。在这种情况下,对应的标准向量q ( k ′ ) \bm{q}^{(k')} q ( k ′ ) 被加入标准正交集合中,并继续迭代该过程。终止时,该修改后的过程返回一组r = rank ( A ) r = \operatorname{rank}(\bm{A}) r = rank ( A ) 个正交向量{ q ( 1 ) , ⋯ , q ( r ) } \left\{ \bm{q}^{(1)},\cdots , \bm{q}^{(r)}\right\} { q ( 1 ) , ⋯ , q ( r ) } ,它们形成R ( A ) \mathcal{R}(\bm{A}) R ( A ) 的标准正交基
这个过程提供了一种广义的 QR 分解,因为A \bm{A} A 的每一列都可以表示为Q = [ q ( 1 ) ⋯ q ( r ) ] \bm{Q} = [\bm{q}^{(1)}\cdots \bm{q}^{(r)}] Q = [ q ( 1 ) ⋯ q ( r ) ] 列的线性组合,并且非零系数的数量是非递减的。具体而言,A \bm{A} A 的第一块n 1 ≥ 1 n_1 \geq 1 n 1 ≥ 1 列被表示为q ( 1 ) \bm{q}^{(1)} q ( 1 ) 的线性组合,A \bm{A} A 的第二块n 2 ≥ 1 n_2 \geq 1 n 2 ≥ 1 列被表示为q ( 1 ) , q ( 2 ) \bm{q}^{(1)},\bm{q}^{(2)} q ( 1 ) , q ( 2 ) 的线性组合,依此类推,直到A \bm{A} A 的第r r r 块n r n_r n r 列被表示为q ( 1 ) , ⋯ , q ( r ) \bm{q}^{(1)},\cdots,\bm{q}^{(r)} q ( 1 ) , ⋯ , q ( r ) 的线性组合,其中n 1 + n 2 + ⋯ + n r = n n_1 + n_2 + \cdots +n_r = n n 1 + n 2 + ⋯ + n r = n 。用公式表示为
A = Q R , R = [ R 11 R 12 ⋯ R 1 r 0 R 22 ⋯ R 2 r ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ R r r ] , R i j ∈ R 1 , n j \bm{A} = \bm{Q} \bm{R} , \bm{R} =
\begin{bmatrix}
\bm{R}_{11} & \bm{R}_{12} & \cdots & \bm{R}_{1r} \\
\bm{0} & \bm{R}_{22} & \cdots & \bm{R}_{2r} \\
\vdots & \vdots & \ddots & \vdots \\
\bm{0} & \bm{0} & \cdots & \bm{R}_{rr} \\
\end{bmatrix}
,\bm{R}_{ij} \in \mathbb{R} ^{1,n_j}
A = Q R , R = R 11 0 ⋮ 0 R 12 R 22 ⋮ 0 ⋯ ⋯ ⋱ ⋯ R 1 r R 2 r ⋮ R rr , R ij ∈ R 1 , n j
矩阵R \bm{R} R 是分块上三角形式。然后可以重新排列R \bm{R} R 的列,使得R i i \bm{R}_{ii} R ii 第一个元素所在的列移到第i i i 列,构造上三角矩阵。这可以写成
A = Q R E ⊤ , R = [ R ~ M ] \bm{A}=\bm{Q} \bm{R} \bm{E}^\top , \bm{R} = [\tilde{\bm{R}} \quad \bm{M}]
A = Q R E ⊤ , R = [ R ~ M ]
其中E \bm{E} E 是一个合适的列置换矩阵(注意置换是初等变换,因此矩阵是正交的),R ~ ∈ R r , r \tilde{\bm{R}} \in \mathbb{R} ^{r,r} R ~ ∈ R r , r 是上三角且可逆的,M ∈ R r , n − r \bm{M} \in \mathbb{R} ^{r,n-r} M ∈ R r , n − r
QR 分解的另一种完整形式使用Q \bm{Q} Q 矩阵中的所有m m m 列:在q ( 1 ) ⋯ q ( r ) \bm{q}^{(1)}\cdots \bm{q}^{(r)} q ( 1 ) ⋯ q ( r ) 的基础上添加m − r m-r m − r 个正交列,以完成R m \mathbb{R} ^m R m 的一组正交基。因此,在R \bm{R} R 矩阵中附加m − r m-r m − r 个全零的尾行,以得到
A = Q R E ⊤ , Q ∈ R m , Q ⊤ Q = I m , R = [ R ~ M 0 m − r , r 0 m − r , n − r ] \bm{A}=\bm{Q} \bm{R} \bm{E}^\top ,\bm{Q} \in \mathbb{R} ^m,\bm{Q}^\top \bm{Q} = \bm{I}_m, \bm{R} =
\begin{bmatrix}
\tilde{\bm{R}} & \bm{M} \\
\bm{0}_{m-r,r} & \bm{0}_{m-r,n-r}
\end{bmatrix}
A = Q R E ⊤ , Q ∈ R m , Q ⊤ Q = I m , R = [ R ~ 0 m − r , r M 0 m − r , n − r ]