4.1 幂迭代法
幂迭代法是计算特征值和特征向量的一种简单易用的算法。幂迭代法虽然简单,但它却建立了计算特征值和特征向量的算法的一个基本框架。
4.1.1 算法介绍
任意给定一个非零向量 x(0) ,不断用 A 左乘该向量,得到向量序列:
x(0),Ax(0),A2x(0),A3x(0),…. 在一定条件下, 可以证明该向量序列收敛到模最大特征值 λ1 所对应的特征向量, 然后通过计算 Rayleigh 商 (Rayleigh 商的定义见 (5.10)) 就可以得到 λ1 . 这就是幂迭代法, 算法描述如下, 为了防止溢出, 每次计算后对向量进行单位化处理.
算法4.1.幂迭代法 (PowerIteration)
1: Choose an initial guess x(0) with ∥x(0)∥2=1
2: set k=0
3: while not convergence do
4: y(k+1)=Ax(k)
5: x(k+1)=y(k+1)/∥y(k+1)∥2 % 单位化, 防止溢出
6: μk+1=(Ax(k+1),x(k+1)) % 计算 Rayleigh 商
7: k=k+1
8: end while
4.1.2 收敛性分析
下面讨论幂迭代法的收敛性. 我们假定
(1) A∈Rn×n 是可对角化的, 即 A=VΛV−1 , 其中 Λ=diag(λ1,λ2,…,λn)∈Cn×n,V=[v1,v2,…,vn]∈Cn×n , 且 ∥vi∥2=1,i=1,2,…,n .
(2) ∣λ1∣>∣λ2∣≥∣λ3∣≥⋯≥∣λn∣ .
由于 V∈Cn×n 非奇异, 所以它的列向量组构成 Cn 的一组基. 因此迭代初始向量 x(0) 可表示为
x(0)=α1v1+α2v2+⋯+αnvn=V[α1,α2,…,αn]T. 我们假定 α1=0 ,即 x(0) 不属于 span{v2,v3,…,vn} (由于 x(0) 是随机选取的,从概率意义上讲,这个假设通常是成立的)。于是我们可得
Akx(0)=(VΛV−1)kVα1α2⋮αn=VΛkα1α2⋮αn=Vα1λ1kα2λ2k⋮αnλnk=α1λ1kV1α1α2(λ1λ2)k⋮α1αn(λ1λn)k. 又 ∣λi/λ1∣<1,i=2,3,…,n, 所以
k→∞lim(λ1λi)k=0,i=2,3,…,n. 故当 k 趋向于无穷大时,向量
[1,α1α2(λ1λ2)k,…,α1αn(λ1λn)k]T,k=0,1,2,… 收敛到 e1=[1,0,…,0]T .所以向量 x(k)=Akx(0)/∥Akx(0)∥2 收敛到 ±v1 ,即 A 的对应于(模)最大的特征值 λ1 的特征向量.而 μk=(Ax(k),x(k)) 则收敛到 v1∗Av1=λ1
显然,幂迭代的收敛快慢取决于 ∣λ2/λ1∣ 的大小, ∣λ2/λ1∣ 越小,收敛越快
结论
(1) x(k) 收敛到 ±v1 ; (2) μk 收敛到 λ1 ; (3) ∣λ2/λ1∣ 越小, 收敛越快.
通过上面的分析可知, 幂迭代只能用于计算矩阵的模最大的特征值和其相应的特征向量. 如果 A 的模最大的特征值是唯一的, 则称其为主特征值. 当 ∣λ2/λ1∣ 接近于 1 时, 收敛速度会非常慢. 同时, 如果 A 的模最大特征值不唯一, 比如一对共轭复特征值, 则幂迭代就可能就会失效.

思考:如果 A 不可以对角化,则能否得到类似的结论?
如果需要计算其他特征值, 比如模第二大特征值 λ2 , 则可以在模最大特征值 λ1 计算出来后, 采用收缩 (Deflation) 技术: 构造酉矩阵 U , 使得
U∗AU=[λ10A12A22]. 然后将幂迭代作用到 A22 上, 就可以求出 λ2 . 以此类推, 可以依次求出所有特征值 (这里假定特征值互不相同).

思考:上面的收缩技术中的 U 怎么选取?
4.1.3 位移策略
前面已经提到, 幂迭代法的收敛速度取决于 ∣λ2/λ1∣ 的大小. 当它的值接近于 1 时, 收敛速度会非常缓慢. 因此, 为了加快幂迭代法的收敛速度, 我们希望 ∣λ2/λ1∣ 的值越小越好.
一个简单易用的方法就是使用位移策略,即将计算 A 的特征值转化为计算 A−σI 的特征值,即对 A 做一个移位.这里 σ 是一个给定的数,称 σ 为位移 (shift).为了使得幂迭代作用到 A−σI 时具有更快的收敛速度,我们要求 σ 满足下面的两个条件:
(1) λ1−σ 是 A−σI 的模最大的特征值;
(2) max2≤i≤nλ1−σλi−σ 尽可能地小.
其中第一个条件保证最后所求得的特征值是我们所要的,第二个条件用于加快幂迭代的收敛速度.
显然, 在实际应用中, σ 的取值并不是一件容易的事.
例4.1 设 A=XΛX−1 , 其中 Λ 为对角矩阵, 分别用幂迭代法和带位移的幂迭代法计算 A 的主特征值. (见Eig_Power_shift.m)
位移策略在特征值计算中非常重要, 特别是在反迭代法和 QR 迭代法中.