4.1_幂迭代法

4.1 幂迭代法

幂迭代法是计算特征值和特征向量的一种简单易用的算法。幂迭代法虽然简单,但它却建立了计算特征值和特征向量的算法的一个基本框架。

4.1.1 算法介绍

任意给定一个非零向量 x(0)x^{(0)} ,不断用 AA 左乘该向量,得到向量序列:

x(0),Ax(0),A2x(0),A3x(0),.x ^ {(0)}, A x ^ {(0)}, A ^ {2} x ^ {(0)}, A ^ {3} x ^ {(0)}, \dots .

在一定条件下, 可以证明该向量序列收敛到模最大特征值 λ1\lambda_{1} 所对应的特征向量, 然后通过计算 Rayleigh 商 (Rayleigh 商的定义见 (5.10)) 就可以得到 λ1\lambda_{1} . 这就是幂迭代法, 算法描述如下, 为了防止溢出, 每次计算后对向量进行单位化处理.

算法4.1.幂迭代法 (PowerIteration)

1: Choose an initial guess x(0)x^{(0)} with x(0)2=1\| x^{(0)}\|_2 = 1
2: set k=0k = 0
3: while not convergence do
4: y(k+1)=Ax(k)y^{(k + 1)} = Ax^{(k)}

5: x(k+1)=y(k+1)/y(k+1)2x^{(k + 1)} = y^{(k + 1)} / \| y^{(k + 1)}\| _2 %\% 单位化, 防止溢出
6: μk+1=(Ax(k+1),x(k+1))\mu_{k+1} = (Ax^{(k+1)}, x^{(k+1)}) %\% 计算 Rayleigh 商
7: k=k+1k = k + 1
8: end while

4.1.2 收敛性分析

下面讨论幂迭代法的收敛性. 我们假定

(1) ARn×nA \in \mathbb{R}^{n \times n} 是可对角化的, 即 A=VΛV1A = V\Lambda V^{-1} , 其中 Λ=diag(λ1,λ2,,λn)Cn×n,V=[v1,v2,,vn]Cn×n\Lambda = \mathrm{diag}(\lambda_1, \lambda_2, \ldots, \lambda_n) \in \mathbb{C}^{n \times n}, V = [v_1, v_2, \ldots, v_n] \in \mathbb{C}^{n \times n} , 且 vi2=1,i=1,2,,n\|v_i\|_2 = 1, i = 1, 2, \ldots, n .
(2) λ1>λ2λ3λn|\lambda_1| > |\lambda_2| \geq |\lambda_3| \geq \dots \geq |\lambda_n| .

由于 VCn×nV \in \mathbb{C}^{n \times n} 非奇异, 所以它的列向量组构成 Cn\mathbb{C}^n 的一组基. 因此迭代初始向量 x(0)x^{(0)} 可表示为

x(0)=α1v1+α2v2++αnvn=V[α1,α2,,αn]T.x ^ {(0)} = \alpha_ {1} v _ {1} + \alpha_ {2} v _ {2} + \dots + \alpha_ {n} v _ {n} = V [ \alpha_ {1}, \alpha_ {2}, \dots , \alpha_ {n} ] ^ {\mathsf {T}}.

我们假定 α10\alpha_{1} \neq 0 ,即 x(0)x^{(0)} 不属于 span{v2,v3,,vn}\operatorname{span}\{v_{2}, v_{3}, \ldots, v_{n}\} (由于 x(0)x^{(0)} 是随机选取的,从概率意义上讲,这个假设通常是成立的)。于是我们可得

Akx(0)=(VΛV1)kV[α1α2αn]=VΛk[α1α2αn]=V[α1λ1kα2λ2kαnλnk]=α1λ1kV[1α2α1(λ2λ1)kαnα1(λnλ1)k].A ^ {k} x ^ {(0)} = (V \Lambda V ^ {- 1}) ^ {k} V \left[ \begin{array}{c} \alpha_ {1} \\ \alpha_ {2} \\ \vdots \\ \alpha_ {n} \end{array} \right] = V \Lambda^ {k} \left[ \begin{array}{c} \alpha_ {1} \\ \alpha_ {2} \\ \vdots \\ \alpha_ {n} \end{array} \right] = V \left[ \begin{array}{c} \alpha_ {1} \lambda_ {1} ^ {k} \\ \alpha_ {2} \lambda_ {2} ^ {k} \\ \vdots \\ \alpha_ {n} \lambda_ {n} ^ {k} \end{array} \right] = \alpha_ {1} \lambda_ {1} ^ {k} V \left[ \begin{array}{c} 1 \\ \frac {\alpha_ {2}}{\alpha_ {1}} \left(\frac {\lambda_ {2}}{\lambda_ {1}}\right) ^ {k} \\ \vdots \\ \frac {\alpha_ {n}}{\alpha_ {1}} \left(\frac {\lambda_ {n}}{\lambda_ {1}}\right) ^ {k} \end{array} \right].

λi/λ1<1,i=2,3,,n,|\lambda_i / \lambda_1| < 1, i = 2,3,\ldots ,n, 所以

limk(λiλ1)k=0,i=2,3,,n.\lim _ {k \rightarrow \infty} \left(\frac {\lambda_ {i}}{\lambda_ {1}}\right) ^ {k} = 0, \quad i = 2, 3, \dots , n.

故当 kk 趋向于无穷大时,向量

[1,α2α1(λ2λ1)k,,αnα1(λnλ1)k]T,k=0,1,2,\left[ 1, \frac {\alpha_ {2}}{\alpha_ {1}} \left(\frac {\lambda_ {2}}{\lambda_ {1}}\right) ^ {k}, \dots , \frac {\alpha_ {n}}{\alpha_ {1}} \left(\frac {\lambda_ {n}}{\lambda_ {1}}\right) ^ {k} \right] ^ {\mathsf {T}}, \quad k = 0, 1, 2, \dots

收敛到 e1=[1,0,,0]Te_1 = [1,0,\dots ,0]^{\mathsf{T}} .所以向量 x(k)=Akx(0)/Akx(0)2x^{(k)} = A^k x^{(0)} / \| A^k x^{(0)}\| _2 收敛到 ±v1\pm v_{1} ,即 AA 的对应于(模)最大的特征值 λ1\lambda_{1} 的特征向量.而 μk=(Ax(k),x(k))\mu_k = \left(Ax^{(k)},x^{(k)}\right) 则收敛到 v1Av1=λ1v_{1}^{*}Av_{1} = \lambda_{1}

显然,幂迭代的收敛快慢取决于 λ2/λ1|\lambda_2 / \lambda_1| 的大小, λ2/λ1|\lambda_2 / \lambda_1| 越小,收敛越快

结论

(1) x(k)x^{(k)} 收敛到 ±v1\pm v_{1} ; (2) μk\mu_{k} 收敛到 λ1\lambda_{1} ; (3) λ2/λ1|\lambda_2 / \lambda_1| 越小, 收敛越快.

通过上面的分析可知, 幂迭代只能用于计算矩阵的模最大的特征值和其相应的特征向量. 如果 AA 的模最大的特征值是唯一的, 则称其为主特征值. 当 λ2/λ1\left|\lambda_{2} / \lambda_{1}\right| 接近于 1 时, 收敛速度会非常慢. 同时, 如果 AA 的模最大特征值不唯一, 比如一对共轭复特征值, 则幂迭代就可能就会失效.

思考:如果 AA 不可以对角化,则能否得到类似的结论?

如果需要计算其他特征值, 比如模第二大特征值 λ2\lambda_{2} , 则可以在模最大特征值 λ1\lambda_{1} 计算出来后, 采用收缩 (Deflation) 技术: 构造酉矩阵 UU , 使得

UAU=[λ1A120A22].U ^ {*} A U = \left[ \begin{array}{c c} \lambda_ {1} & A _ {1 2} \\ 0 & A _ {2 2} \end{array} \right].

然后将幂迭代作用到 A22A_{22} 上, 就可以求出 λ2\lambda_{2} . 以此类推, 可以依次求出所有特征值 (这里假定特征值互不相同).

思考:上面的收缩技术中的 UU 怎么选取?

4.1.3 位移策略

前面已经提到, 幂迭代法的收敛速度取决于 λ2/λ1|\lambda_2 / \lambda_1| 的大小. 当它的值接近于 1 时, 收敛速度会非常缓慢. 因此, 为了加快幂迭代法的收敛速度, 我们希望 λ2/λ1|\lambda_2 / \lambda_1| 的值越小越好.

一个简单易用的方法就是使用位移策略,即将计算 AA 的特征值转化为计算 AσIA - \sigma I 的特征值,即对 AA 做一个移位.这里 σ\sigma 是一个给定的数,称 σ\sigma 为位移 (shift).为了使得幂迭代作用到 AσIA - \sigma I 时具有更快的收敛速度,我们要求 σ\sigma 满足下面的两个条件:

(1) λ1σ\lambda_{1} - \sigmaAσIA - \sigma I 的模最大的特征值;
(2) max2inλiσλ1σ\max_{2 \leq i \leq n} \left| \frac{\lambda_i - \sigma}{\lambda_1 - \sigma} \right| 尽可能地小.

其中第一个条件保证最后所求得的特征值是我们所要的,第二个条件用于加快幂迭代的收敛速度.

显然, 在实际应用中, σ\sigma 的取值并不是一件容易的事.

例4.1 设 A=XΛX1A = X\Lambda X^{-1} , 其中 Λ\Lambda 为对角矩阵, 分别用幂迭代法和带位移的幂迭代法计算 AA 的主特征值. (见Eig_Power_shift.m)

位移策略在特征值计算中非常重要, 特别是在反迭代法和 QR 迭代法中.