4.4_QR迭代法

4.4 QR迭代法

QR迭代法的基本思想是通过不断的正交相似变换,使得 AA 趋向于一个上三角形式(或拟上三角形式).算法形式非常简洁,描述如下:

算法4.5. QR迭代法 (QRIteration)

1: Set A1=AA_{1} = A and k=1k = 1
2: while not convergence do
3: [Qk,Rk]=QR(Ak)%QR[Q_k, R_k] = \mathsf{QR}(A_k) \quad \% \quad \mathsf{QR} 分解
4: compute Ak+1=RkQkA_{k + 1} = R_kQ_k
5: k=k+1k = k + 1
6: end while

在该算法中, 我们有

Ak+1=RkQk=(QkQk)RkQk=Qk(QkRk)Qk=QkAkQk.A _ {k + 1} = R _ {k} Q _ {k} = \left(Q _ {k} ^ {\top} Q _ {k}\right) R _ {k} Q _ {k} = Q _ {k} ^ {\top} \left(Q _ {k} R _ {k}\right) Q _ {k} = Q _ {k} ^ {\top} A _ {k} Q _ {k}.

由这个递推关系可得

Ak+1=QkTAkQk=QkTQk1TAk1Qk1Qk==QkTQk1TQ1TAQ1Qk1Qk.A _ {k + 1} = Q _ {k} ^ {\mathsf {T}} A _ {k} Q _ {k} = Q _ {k} ^ {\mathsf {T}} Q _ {k - 1} ^ {\mathsf {T}} A _ {k - 1} Q _ {k - 1} Q _ {k} = \dots = Q _ {k} ^ {\mathsf {T}} Q _ {k - 1} ^ {\mathsf {T}} \dots Q _ {1} ^ {\mathsf {T}} A Q _ {1} \dots Q _ {k - 1} Q _ {k}.

Q~k=Q1Qk1Qk=[q~1(k),q~2(k),,q~n(k)]\tilde{Q}_k = Q_1\cdots Q_{k-1}Q_k = \left[\tilde{q}_1^{(k)}, \tilde{q}_2^{(k)}, \ldots, \tilde{q}_n^{(k)}\right] , 则

Ak+1=Q~kTAQ~k,(4.1)A _ {k + 1} = \tilde {Q} _ {k} ^ {\mathsf {T}} A \tilde {Q} _ {k}, \tag {4.1}

Ak+1A_{k + 1}AA 正交相似

4.4.1 QR迭代与幂迭代的关系

R~k=RkRk1R1\tilde{R}_k = R_k R_{k-1} \cdots R_1 ,则有

Q~kR~k=Q~k1(QkRk)R~k1=Q~k1(Ak)R~k1=Q~k1(Q~k1TAQ~k1)R~k1=AQ~k1R~k1,\tilde {Q} _ {k} \tilde {R} _ {k} = \tilde {Q} _ {k - 1} (Q _ {k} R _ {k}) \tilde {R} _ {k - 1} = \tilde {Q} _ {k - 1} (A _ {k}) \tilde {R} _ {k - 1} = \tilde {Q} _ {k - 1} (\tilde {Q} _ {k - 1} ^ {\mathsf {T}} A \tilde {Q} _ {k - 1}) \tilde {R} _ {k - 1} = A \tilde {Q} _ {k - 1} \tilde {R} _ {k - 1},

由此递推下去, 即可得

Q~kR~k=Ak1Q~1R~1=Ak1Q1R1=Ak.(4.2)\tilde {Q} _ {k} \tilde {R} _ {k} = A ^ {k - 1} \tilde {Q} _ {1} \tilde {R} _ {1} = A ^ {k - 1} Q _ {1} R _ {1} = A ^ {k}. \tag {4.2}

Q~kR~ke1=Ake1,\tilde {Q} _ {k} \tilde {R} _ {k} e _ {1} = A ^ {k} e _ {1},

这说明QR迭代与幂迭代有关

假设 λ1>λ2λn|\lambda_1| > |\lambda_2| \geq \dots \geq |\lambda_n| , 则当 kk 充分大时, Ake1A^k e_1 收敛到 AA 的模最大特征值 λ1\lambda_1 所对应的特征向量, 故 Q~k\tilde{Q}_k 的第一列 q~1(k)\tilde{q}_1^{(k)} 也收敛到 λ1\lambda_1 所对应的特征向量. 因此, 当 kk 充分大时, Aq~1(k)λ1q~1(k)A\tilde{q}_1^{(k)} \to \lambda_1\tilde{q}_1^{(k)} , 此时由 (4.1) 可知, Ak+1A_{k+1} 的第一列

Ak+1(:,1)=Q~kTAq~1(k)λ1Q~kTq~1(k)=λ1e1,A _ {k + 1} (:, 1) = \tilde {Q} _ {k} ^ {\mathsf {T}} A \tilde {q} _ {1} ^ {(k)} \rightarrow \lambda_ {1} \tilde {Q} _ {k} ^ {\mathsf {T}} \tilde {q} _ {1} ^ {(k)} = \lambda_ {1} e _ {1},

Ak+1A_{k + 1} 的第一列的第一个元素收敛到 λ1\lambda_1 ,而其它元素都趋向于0,收敛速度取决于 λ2/λ1\left|\lambda_2 / \lambda_1\right| 的大小.

4.4.2 QR迭代与反迭代的关系

下面观察 Q~k\tilde{Q}_k 的最后一列.由(4.1)可知

AQ~k=Q~kAk+1=Q~kQk+1Rk+1=Q~k+1Rk+1,A \tilde {Q} _ {k} = \tilde {Q} _ {k} A _ {k + 1} = \tilde {Q} _ {k} Q _ {k + 1} R _ {k + 1} = \tilde {Q} _ {k + 1} R _ {k + 1},

所以有

Q~k+1=AQ~kRk+11.\tilde {Q} _ {k + 1} = A \tilde {Q} _ {k} R _ {k + 1} ^ {- 1}.

由于 Q~k+1\tilde{Q}_{k + 1}Q~k\tilde{Q}_k 都是正交矩阵,上式两边转置后求逆,可得

Q~k+1=(Q~k+1T)1=((Rk+11)TQ~kTAT)1=(AT)1Q~kRk+1T.\tilde {Q} _ {k + 1} = \left(\tilde {Q} _ {k + 1} ^ {\mathsf {T}}\right) ^ {- 1} = \left(\left(R _ {k + 1} ^ {- 1}\right) ^ {\mathsf {T}} \tilde {Q} _ {k} ^ {\mathsf {T}} A ^ {\mathsf {T}}\right) ^ {- 1} = \left(A ^ {\mathsf {T}}\right) ^ {- 1} \tilde {Q} _ {k} R _ {k + 1} ^ {\mathsf {T}}.

观察等式两边矩阵的最后一列,可得

q~n(k+1)=c1(AT)1q~n(k),\tilde {q} _ {n} ^ {(k + 1)} = c _ {1} \left(A ^ {\mathsf {T}}\right) ^ {- 1} \tilde {q} _ {n} ^ {(k)},

其中 c1c_{1} 为某个常数.依此类推,可知

q~n(k+1)=c(AT)kq~n(1),\tilde {q} _ {n} ^ {(k + 1)} = c \left(A ^ {\mathsf {T}}\right) ^ {- k} \tilde {q} _ {n} ^ {(1)},

其中 cc 为某个常数. 假设 AA 的特征值满足 λ1λ2λn1>λn>0|\lambda_1| \geq |\lambda_2| \geq \dots \geq |\lambda_{n-1}| > |\lambda_n| > 0 , 则 λn1\lambda_n^{-1}(AT)1\left(A^{\mathsf{T}}\right)^{-1} 的模最大的特征值. 由幂迭代的收敛性可知, q~n(k+1)\tilde{q}_n^{(k+1)} 收敛到 (AT)1\left(A^{\mathsf{T}}\right)^{-1} 的模最大特征值 λn1\lambda_n^{-1} 所对应的特征向量, 即当 kk 充分大时, 有

(AT)1q~n(k+1)λn1q~n(k+1).\left(A ^ {\mathsf {T}}\right) ^ {- 1} \tilde {q} _ {n} ^ {(k + 1)} \rightarrow \lambda_ {n} ^ {- 1} \tilde {q} _ {n} ^ {(k + 1)}.

所以

ATq~n(k+1)λnq~n(k+1).A ^ {\mathsf {T}} \tilde {q} _ {n} ^ {(k + 1)} \to \lambda_ {n} \tilde {q} _ {n} ^ {(k + 1)}.

由(4.1)可知, Ak+1TA_{k + 1}^{\mathsf{T}} 的最后一列为

Ak+1T(:,n)=Q~kTATq~n(k)λnQ~kTq~n(k)=λnen,A _ {k + 1} ^ {\mathsf {T}} (:, n) = \tilde {Q} _ {k} ^ {\mathsf {T}} A ^ {\mathsf {T}} \tilde {q} _ {n} ^ {(k)} \rightarrow \lambda_ {n} \tilde {Q} _ {k} ^ {\mathsf {T}} \tilde {q} _ {n} ^ {(k)} = \lambda_ {n} e _ {n},

Ak+1A_{k + 1} 的最后一行的最后一个元素收敛到 λn\lambda_{n} , 而其它元素都趋向于0, 收敛速度取决于 λn/λn1\left|\lambda_{n} / \lambda_{n - 1}\right| 的大小.

4.4.3 QR迭代与正交迭代的关系

下面的定理给出了QR迭代法与正交迭代法(取 Z0=IZ_{0} = I )之间的关系.

定理4.2 设正交迭代法4.4和QR算法4.5中所涉及的QR分解都是唯一的。设 AkA_{k} 是由QR迭代法4.5生成的矩阵, ZkZ_{k} 是由正交迭代法4.4(取 Z0=IZ_{0} = I )生成的矩阵,则有

Ak+1=ZkTAZk.A _ {k + 1} = Z _ {k} ^ {\mathsf {T}} A Z _ {k}.

(板书)

证明. 我们用归纳法证明该结论

k=0k = 0 时, A1=AA_{1} = A , Z0=IZ_{0} = I . 结论显然成立.

Ak=Zk1TAZk1A_{k} = Z_{k - 1}^{\mathsf{T}}AZ_{k - 1} .由于 Zk1Z_{k - 1} 是正交矩阵,我们有

ZkR^k=Yk=AZk1=(Zk1Zk1T)AZk1=Zk1Ak=(Zk1Qk)Rk,Z _ {k} \hat {R} _ {k} = Y _ {k} = A Z _ {k - 1} = (Z _ {k - 1} Z _ {k - 1} ^ {\mathsf {T}}) A Z _ {k - 1} = Z _ {k - 1} A _ {k} = (Z _ {k - 1} Q _ {k}) R _ {k},

ZkR^kZ_{k}\hat{R}_{k}(Zk1Qk)Rk(Z_{k - 1}Q_k)R_k 都是 YkY_{k} 的QR分解.由QR分解的唯一性可知, Zk=Zk1Qk,R^k=RkZ_{k} = Z_{k - 1}Q_{k},\hat{R}_{k} = R_{k} 所以

ZkAZk=(Zk1Qk)A(Zk1Qk)=QkAkQk=Qk(QkRk)Qk=RkQk=Ak+1,Z _ {k} ^ {\top} A Z _ {k} = \left(Z _ {k - 1} Q _ {k}\right) ^ {\top} A \left(Z _ {k - 1} Q _ {k}\right) = Q _ {k} ^ {\top} A _ {k} Q _ {k} = Q _ {k} ^ {\top} \left(Q _ {k} R _ {k}\right) Q _ {k} = R _ {k} Q _ {k} = A _ {k + 1},

Ak+1=ZkAZkA_{k + 1} = Z_k^\top A Z_k 由归纳法可知,定理结论成立

4.4.4 QR迭代的收敛性

定理4.3 设 A=VΛV1Rn×nA = V\Lambda V^{-1} \in \mathbb{R}^{n \times n} , 其中 Λ=diag(λ1,λ2,,λn)\Lambda = \mathrm{diag}(\lambda_1, \lambda_2, \dots, \lambda_n) , 且 λ1>λ2>>λn>0|\lambda_1| > |\lambda_2| > \dots > |\lambda_n| > 0 . 若 V1V^{-1} 的所有顺序主子矩阵都非奇异(即 V1V^{-1} 存在 LU 分解),则 AkA_k 的对角线以下的元素均收敛到 0. (板书)

证明. 设 V=QvRvV = Q_{v}R_{v}VV 的QR分解, V1=LvUvV^{-1} = L_{v}U_{v}V1V^{-1} 的LU分解, 其中 LvL_{v} 是单位下三角矩阵. 则

Ak=VΛkV1=QvRvΛkLvUv=QvRv(ΛkLvΛk)ΛkUv.A ^ {k} = V \Lambda^ {k} V ^ {- 1} = Q _ {v} R _ {v} \Lambda^ {k} L _ {v} U _ {v} = Q _ {v} R _ {v} \left(\Lambda^ {k} L _ {v} \Lambda^ {- k}\right) \Lambda^ {k} U _ {v}.

注意到矩阵 ΛkLvΛk\Lambda^k L_v\Lambda^{-k} 是一个下三角矩阵, 且其 (i,j)(i,j) 位置上的元素为

(ΛkLvΛk)(i,j)={0,i<j,1,i=j,Lv(i,j)λik/λjk,i>j.\left(\Lambda^ {k} L _ {v} \Lambda^ {- k}\right) (i, j) = \left\{ \begin{array}{l l} 0, & i < j, \\ 1, & i = j, \\ L _ {v} (i, j) \lambda_ {i} ^ {k} / \lambda_ {j} ^ {k}, & i > j. \end{array} \right.

由于当 i>ji > j 时有 λi/λj<1\left|\lambda_i / \lambda_j\right| < 1 , 故当 kk 充分大时, λik/λjk\lambda_i^k /\lambda_j^k 趋向于0. 所以我们可以把 ΛkLvΛk\Lambda^k L_v\Lambda^{-k} 写成

ΛkLvΛk=I+Ek,\Lambda^ {k} L _ {v} \Lambda^ {- k} = I + E _ {k},

其中 EkE_{k} 满足 limkEk=0.\lim_{k\to \infty}E_k = 0. 于是

Ak=QvRv(I+Ek)ΛkUv=Qv(I+RvEkRv1)RvΛkUv.(4.3)A ^ {k} = Q _ {v} R _ {v} \left(I + E _ {k}\right) \Lambda^ {k} U _ {v} = Q _ {v} \left(I + R _ {v} E _ {k} R _ {v} ^ {- 1}\right) R _ {v} \Lambda^ {k} U _ {v}. \tag {4.3}

对矩阵 I+RvEkRv1I + R_{v}E_{k}R_{v}^{-1} 做QR分解: I+RvEkRv1=QEkREkI + R_{v}E_{k}R_{v}^{-1} = Q_{E_{k}}R_{E_{k}} 由于 Ek0E_{k}\to 0 ,所以 QEkI,Q_{E_k}\rightarrow I, REkI.R_{E_k}\rightarrow I. 将其代入 (\refeq:2)(\ref{eq:2}) 可得

Ak=QvQEkREkRvΛkUv=QvQEkDk(Dk1REkRvΛkUv),(4.4)A ^ {k} = Q _ {v} Q _ {E _ {k}} R _ {E _ {k}} R _ {v} \Lambda^ {k} U _ {v} = Q _ {v} Q _ {E _ {k}} D _ {k} \left(D _ {k} ^ {- 1} R _ {E _ {k}} R _ {v} \Lambda^ {k} U _ {v}\right), \tag {4.4}

其中 DkD_{k} 是对角矩阵, 其对角线元素的模均为 1, 它使得上三角矩阵 Dk1REkRvΛkUvD_{k}^{-1}R_{E_{k}}R_{v}\Lambda^{k}U_{v} 的对角线元素均为正. 这样, (??) 就构成 AkA^{k} 的 QR 分解. 又由 (4.2) 可知 Ak=Q~kR~kA^{k} = \tilde{Q}_{k}\tilde{R}_{k} , 根据 QR 分解的唯一性, 我们可得

Q~k=QvQEkDk,R~k=Dk1REkRvΛkUv.\tilde {Q} _ {k} = Q _ {v} Q _ {E _ {k}} D _ {k}, \qquad \tilde {R} _ {k} = D _ {k} ^ {- 1} R _ {E _ {k}} R _ {v} \Lambda^ {k} U _ {v}.

所以由 (4.1) 可知

Ak+1=Q~kTAQ~k=(QvQEkDk)VΛV1QvQEkDk=DkQEkQvQvRvΛRv1Qv1QvQEkDk=DkQEkRvΛRv1QEkDk.\begin{array}{l} A _ {k + 1} = \tilde {Q} _ {k} ^ {\mathsf {T}} A \tilde {Q} _ {k} \\ = \left(Q _ {v} Q _ {E _ {k}} D _ {k}\right) ^ {\intercal} V \Lambda V ^ {- 1} Q _ {v} Q _ {E _ {k}} D _ {k} \\ = D _ {k} ^ {\top} Q _ {E _ {k}} ^ {\top} Q _ {v} ^ {\top} Q _ {v} R _ {v} \Lambda R _ {v} ^ {- 1} Q _ {v} ^ {- 1} Q _ {v} Q _ {E _ {k}} D _ {k} \\ = D _ {k} ^ {\top} Q _ {E _ {k}} ^ {\top} R _ {v} \Lambda R _ {v} ^ {- 1} Q _ {E _ {k}} D _ {k}. \\ \end{array}

由于 QEkIQ_{E_k} \to I , 所以当 kk \to \infty 时, Ak+1A_{k+1} 收敛到一个上三角矩阵. 收敛速度取决于

max1i<nλi+1λi\max _ {1 \leq i < n} \left| \frac {\lambda_ {i + 1}}{\lambda_ {i}} \right|

的大小. □需要指出的是,由于 DkD_{k} 的元素不一定收敛,故 Ak+1A_{k + 1} 对角线以上

(不含对角线)的元素不一定收敛, 但这不妨碍 Ak+1A_{k+1} 的对角线元素收敛到 AA 的特征值(即 Ak+1A_{k+1} 的对角线元素是收敛的).

例4.3 QR迭代法演示.设

A=X[9531]X1,A = X \left[ \begin{array}{c c c c} 9 & & & \\ & 5 & & \\ & & 3 & \\ & & & 1 \end{array} \right] X ^ {- 1},

其中 XX 是由MATLAB随机生成的非奇异矩阵

在迭代过程中, 对于 AkA_{k} 的下三角部分中元素, 如果其绝对值小于某个阈值 tol\text{tol} , 则直接将其设为 0, 即

aij(k)=0i fi>ja n daij(k)<tol.a _ {i j} ^ {(k)} = 0 \quad \text {i f} \quad i > j \text {a n d} | a _ {i j} ^ {(k)} | < t o l.

这里我们取 tol=106max1i,jn{aij(k)}.tol = 10^{-6}\max_{1\leq i,j\leq n}\{|a_{ij}^{(k)}|\} . (Eig_QR.m)

4.4.5 带位移的QR迭代法

为了加快 QR 迭代的收敛速度, 我们可以采用位移策略和反迭代思想.

算法4.6.带位移的QR迭代法(QRIterationwithshift)

1: Set A1=AA_{1} = A and k=1k = 1
2: while not convergence do
3: Choose a shift σk\sigma_{k}
4: [Qk,Rk]=QR(AkσkI)%QR[Q_k, R_k] = \mathsf{QR}(A_k - \sigma_k I) \quad \% \quad \mathsf{QR} 分解
5: Compute Ak+1=RkQk+σkIA_{k + 1} = R_kQ_k + \sigma_kI
6: k=k+1k = k + 1
7: end while

与不带位移的QR迭代一样,我们有

Ak+1=RkQk+σkI=(QkTQk)RkQk+σkI=QkT(AkσkI)Qk+σkI=QkTAkQkA _ {k + 1} = R _ {k} Q _ {k} + \sigma_ {k} I = (Q _ {k} ^ {\mathsf {T}} Q _ {k}) R _ {k} Q _ {k} + \sigma_ {k} I = Q _ {k} ^ {\mathsf {T}} (A _ {k} - \sigma_ {k} I) Q _ {k} + \sigma_ {k} I = Q _ {k} ^ {\mathsf {T}} A _ {k} Q _ {k}

所以, 带位移的 QR 算法中所得到的矩阵 AkA_{k} 仍然与 A1=AA_{1} = A 正交相似.

在带位移的QR迭代法中, 一个很重要的问题就是位移 σk\sigma_{k} 的选取. 在前面的分析中我们已经知道, Ak+1(n,n)A_{k + 1}(n,n) 将收敛到 AA 的模最小的特征值, 且收敛速度取决于模最小特征值与模第二小特征值之间的比值. 显然, 若 σk\sigma_{k} 就是 AA 的一个特征值, 则 AkσkIA_{k} - \sigma_{k}I 的模最小特征值为0, 故QR算

法迭代一步就收敛.此时

Ak+1=RkQk+σkI=[Ak+1(n1)×(n1)0σk].A _ {k + 1} = R _ {k} Q _ {k} + \sigma_ {k} I = \left[ \begin{array}{c c} A _ {k + 1} ^ {(n - 1) \times (n - 1)} & * \\ 0 & \sigma_ {k} \end{array} \right].

如果需要计算 AA 的其它特征值, 则可对子矩阵 Ak+1(n1)×(n1)A_{k+1}^{(n-1) \times (n-1)} 使用带位移的 QR 迭代法.

通常, 如果 σk\sigma_{k}AA 的某个特征值非常接近, 则收敛速度通常会很快. 由于 Ak(n,n)A_{k}(n,n) 收敛到 AA 的一个特征值, 所以在实际使用中, 一个比较直观的位移选择策略是 σk=Ak(n,n)\sigma_{k} = A_{k}(n,n) . 事实上, 这样的位移选取方法通常会使得 QR 迭代有二次收敛速度.

例4.4带位移的QR迭代法演示.所有数据和设置与例4.3相同,在迭代过程中,取 σk=Ak(n,n)\sigma_{k} = A_{k}(n,n) 如果 Ak(n,n)A_{k}(n,n) 已经收敛,则取 σk=Ak(n1,n1)\sigma_{k} = A_{k}(n - 1,n - 1) (Eig_QR_shift.m)