1. 计算特征值和特征向量
1.1 幂迭代法(The power iteration method)
在本节中,我们概述了一种计算可对角化矩阵的特征值和特征向量的技术。幂迭代(Power Iteration,PI)方法可能是计算矩阵一个特征值/特征向量对的最简单方法。它的收敛速度相对较慢,并且存在一些局限性。然而,我们在这里介绍它,因为它构成了许多其他更精细的特征值计算算法的基础。还有许多其他计算特征值和特征向量的技术,其中一些是为具有特殊结构的矩阵设计的,例如稀疏矩阵、带状矩阵或对称矩阵
设A∈Rn,n,假设A可对角化,并记λ1,⋯,λn为A的特征值,按模递减顺序排列,即∣λ1∣>∣λ2∣≥⋯≥∣λn∣(注意我们假设∣λ1∣严格大于∣λ2∣,即A有一个主导特征值)。由于A可对角化,我们可以将其写为A=UΛU−1,其中我们可以在不失一般性的情况下假设构成U列的特征向量u1,⋯,un已归一化,使得∥ui∥2=1。我们有Ak=UΛkU−1,那么
AkU=UΛk
现在令x∈Cn为随机选择的试验向量,且∥x∥2=1。由于U的列彼此线性无关,它们可以张成整个Cn。可以定义x=Uw,并考虑
Akx=AkUw=UΛkw=i=1∑nwiλikui
请注意,如果随机选择x,那么w的第一个元素w1以概率1非零。将前面的表达式乘以和除以λ1k,我们可以得到
Akx=λ1ki=1∑nwi(λ1λi)kui=w1λ1k(u1+i=2∑nw1wi(λ1λi)kui)
也就是说,Akx在u1的方向上有一个分量αku1,并且在u2,⋯,un的方向上有一个分量αkz,即
Akx=αku1+αkz,αk=w1λ1k∈C,z=i=2∑nw1wi(λ1λi)kui
对于z分量的大小,设βi=wi/w1,我们有
∥z∥2==≤i=2∑nβi(λ1λi)kui2≤i=2∑nβi(λ1λi)kui2i=2∑n∣βi∣λ1λik∥ui∥2=i=2∑n∣βi∣λ1λikλ1λ2ki=2∑n∣βi∣
最后的不等式是由特征值模的大小顺序得出的。由于∣λ2/λ1∣<1,我们有z分量的大小在k→∞时趋于零,收敛速率由比值∣λ2∣/∣λ1∣决定。因此Akx→αku1,这意味着随着k→∞,Akx趋向于与u1平行。因此,通过对向量Akx进行归一化,我们得到
k→∞lim∥Akx∥2Akx=u1
定义
x(k)=∥Akx∥2Akx
并且还注意到x(k)→u1意味着Ax(k)→Au1=λ1u1,因此x†(k)Ax(k)→λ1u1†u1(†表示厄米共轭,因为ui向量可以是复数值的)。因此,回想一下u1†u1=∥u1∥22=1,我们有
k→∞limx†(k)Ax(k)=λ1
也就是说,乘积x†(k)Ax(k)会收敛到A的模最大的特征值
======x†(k)Ax(k)∥Akx∥22(Akx)†A(Akx)(αku1+αkz)(αku1+αkz)(αku1+αkz)†A(αku1+αkz)(u1+z)(u1+z)(u1+z)†A(u1+z)u1†u1+u1†z+z†u1+z†zu1†Au1+u1†Az+z†Au1+z†Az1+u1†z+z†u1+z†zu1†λ1u1+u1†Az+z†λ1u1+z†Az1+u1†z+z†u1+z†zλ1+u1†Az+z†λ1u1+z†Az
其他项中u1和A均不会随k而变化,而z中含有(λi/λ1)k,因此k→∞时z→0。因此x†(k)Ax(k)会收敛到λ1,收敛速度由∣λ2∣/∣λ1∣比例决定,并且以线性速度收敛
以上推理提出了以下迭代算法

算法总结:
- x可以任取,只需要满足∥x∥2=1便可以
- 不断对x左乘A并归一化便可以趋近于特征向量u1
- 在迭代的过程中x†Ax也会趋近于标量λ1
- 这里在求解λ1时不需要再次对向量归一化,因为λ1并不参与迭代,它的取值不会影响迭代速度
幂迭代的一个主要优点是该算法主要依赖于矩阵与向量的乘法,因此可以利用A的任何特殊结构,例如稀疏性。幂迭代方法的两个主要缺点是
- 它只能求出一个特征值(模最大的那个)及其对应的特征向量
- 它的收敛速度取决于∣λ2∣/∣λ1∣,因此当该比值接近1时,性能可能会很差。克服这些问题的一种方法是对矩阵 A 的适当移位版本应用幂迭代算法,后续将进行讨论
1.2 移位-逆幂法
给定一个复标量σ,以及A∈Rn,n可对角化,考虑矩阵
Bσ=(A−σI)−1
根据谱映射定理,见Section 3.7.2 ,Bσ与A有相同的特征向量,且Bσ的特征值为μi=(λi−σ)−1,其中λi,i=1,⋯,n是A的特征值。Bσ的最大模特征值 μmax现在对应于在复平面上最接近σ的λi。将幂法应用于Bσ,我们因此可以得到最接近所选σ的特征值λi以及相应的特征向量。移位-逆幂法如下所示

算法总结:
- σ选取要尽可能接近目标特征值,这样经过移位λ−σ后,数值变为最小,再取逆后数值变为最大
- Bσ与A有相同的特征向量,因此不断左乘Bσ得到的特征向量也是A的特征向量
- 由于最终要求解的是A的特征值,因此对特征向量左乘的矩阵是A
移位-逆幂法相对于幂迭代法的优势在于,我们现在可以快速(但仍然是线性速度)收敛到任意所需的特征值,只需选择一个足够接近目标特征值的移位σ。然而,移位-逆幂法要求预先已知目标特征值的一个较好的近似值。如果事先不知道这样的良好近似值,该方法的一个变体是先用一个粗略的近似值σ启动算法,然后在某个时刻,当获得了特征向量的合理近似后,动态修改移位σ,重复这个过程,不断迭代地改进σ。这个思想将在下一段中讨论
1.3 瑞利商(Rayleigh quotient)迭代
假设在移位-逆幂算法的某一步中,我们有一个近似特征向量x(k)=0。那么,我们寻找某个近似特征值σk,即一个近似满足特征值/特征向量方程的标量
x(k)σk≈Ax(k)
这里所谓近似是指我们寻找σk,使得方程残差的平方范数最小,即min∥x(k)σk−Ax(k)∥。通过要求该函数对σk的导数为零,我们得到
∂σk∂(x(k)σk−Ax(k))†(x(k)σk−Ax(k))∂σk∂(σkx†(k)x(k)σk−2x†(k)Ax(k)σk)x†(k)x(k)x†(k)Ax(k)=0=0=σk
这被称为瑞利商(Rayleigh quotient),参见Section第4.3.1节。如果我们按照在移位-逆幂算法中自适应地选择移位,就得到了所谓的瑞利商迭代法,如下所示。与幂迭代方法不同,瑞利商迭代法可以被证明具有局部二次收敛性,也就是说,在经过一定次数迭代后,第k+1次迭代中解的收敛差距与第k次迭代中解的差距的平方成正比

算法总结:
- 瑞利商迭代法需要先使用幂迭代算法或者移位-逆幂算法迭代一定次数,以得到近似的特征向量值
- 这里在求解σk时需要再次对向量归一化,因为浮点数运算是有精度误差。如果归一化,这些微小的误差会在不断迭代中不断放大
1.4 使用幂迭代计算特征值分解
矩阵A∈Rm,n的奇异值分解的因子可以通过计算两个对称矩阵AA⊤和A⊤A的谱分解来获得。事实上,我们在Section 5定理 5.1 的证明中已经看到,V因子是来自A⊤A谱分解的特征向量矩阵
A⊤A=VΛnV⊤
并且U因子的列是AA⊤的特征向量矩阵
AA⊤=UΛmU⊤
Λn和Λm是对角矩阵,其前r个对角元素是平方奇异值σi2,i=1,⋯,r其余对角元素为零
接下来,我们将概述如何使用幂迭代法来确定与矩阵最大奇异值对应的左奇异向量和右奇异向量。基本思路是对对称矩阵A⊤A和AA⊤应用幂迭代,但以隐式方式进行,从而绕过对该矩阵的显式计算,因为该矩阵通常是稠密的
u(k+1)v(k+1)=∥Av(k)∥2Av(k)=∥A⊤u(k+1)∥2A⊤u(k+1)
消去u(k+1)可以得到
v(k+1)=∥A⊤Av(k)∥2A⊤Av(k)
因此v(k)的序列对应于对A⊤A应用幂迭代;同样,u(k)的序列对应于对AA⊤应用幂迭代。因此,下面的算法计算矩阵A的最大奇异值σ1,以及相关的左奇异向量u1和右奇异向量v1(σ=u1⊤Av1),前提是有占优特征值
然后,这种技术可以递归地应用于矩阵A的紧凑版本,以确定其他奇异值及其对应的左奇异向量和右奇异向量。更准确地说,我们定义矩阵
Ai=Ai−1−σiuivi⊤,i=1,⋯,r;A0=A,σ0=0
其中r=rank(A),并对Ai应用以下算法,以获得A的紧凑奇异值分解的所有项(假设奇异值彼此相差较大)

算法总结:
- 本质上是通过对A⊤A应用幂迭代法来求解v(k)
- 对v(k)左乘A⊤并归一化便可以得到u(k+1)
- 对矩阵不断重复−σiuivi⊤便可以求出所有u和v
2. 解方阵系统的线性方程组
在本节中,我们讨论求解形式为Ax=y的线性方程组的数值方法,其中A∈Rn,n,A可逆。一般的矩形情况可以通过奇异值分解处理参考Section 6.4.3 节
2.1 对角系统
我们首先考虑线性方程组可能具有的最简单的结构,即对角结构。一个方阵(square)、对角(diagonal)、非奇异(nonsingular)的线性方程组的形式是
a110⋮00a22⋮⋯⋯0⋱00⋮⋮annx=y1y2⋮yn
其中a11,a22,⋯,ann≤0。很明显,这样一个系统的唯一解可以直接写出
x=y1/a11y2/a22⋮yn/ann
2.2 三角系统
另一种方阵非奇异系统的解很容易获得的情况是A矩阵具有三角结构
A=a110⋮0a12a22⋮⋯⋯⋯⋱0a1na2n⋮ann
或者形式为
A=a11a12⋮an10a22⋮an2⋯⋯⋱⋯00⋮ann
假设a11,a22,⋯,ann=0。例如,考虑下三角情况
a11a12⋮an10a22⋮an2⋯⋯⋱⋯00⋮annx=y1y2⋮yn
可以通过所谓的前向代入法(forward substitution)得到解:从第一个方程开始,得到x1=y1/a11,然后将该值代入第二个方程,我们得到
a21x1+a22x2=a21y1/a11+a22x2=y2
因此,我们得到x2=a22y2−a21y1/a11。接下来,我们将x1,x2代入第三个方程以求得 x3,然后以同样的方式继续,最终得到xn。如下所示

算法总结:
- 外层循环是遍历每一个未知数
- 内层循环是减去每一个已知数
对于上三角系统的求解,也可以很容易地设计出类似的算法,如下所示
备注7.1(运算计数):通过反向代入求解三角系统所需的代数运算(除法、乘法和加减法)的总数很容易确定。在每一步i=n,…,1中,算法各执行n−i次乘法和加法运算,还有一次除法运算。因此,总运算量为
i=n∑12(n−i)+1=n2
2.3 高斯消元法(Gaussian elimination)
三角形非奇异系统的解非常容易求得。对于一个一般的非奇异但可能不是三角形的矩阵可以通过适当的操作转化为等价的上三角系统,然后使用反向代入(backward substitution)求解得到的三角系统。这种迭代三角化技术被称为高斯消元法
考虑一个方形非奇异系统
a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1na2n⋮annx=y1y2⋮yn
从j=2,用方程j减去方程1乘以aj1/a11(假设a11=0)来替代每个方程,从而得到等价的方程组
a1100⋮0a12a22(1)a32(1)⋮an2(1)a13a23(1)a33(1)⋮an3(1)⋯⋯⋯⋱⋯a1na2n(1)a3n(1)⋮ann(1)x=y1y2(1)y3(1)⋮yn(1)
共重复n−1次,最终可以确定一个与原系统等价的上三角形式的系统
a1100⋮0a12a22(1)0⋮0a13a23(1)a33(2)⋮0⋯⋯⋯⋱⋯a1na2n(1)a3n(2)⋮ann(n−1)x=y1y2(1)y3(2)⋮yn(n−1)
然后可以通过反向代入法求解系统
备注7.2(带选主元的消元):注意,如果在消去中遇到对角元素为零,上述方法将会失败,因为无法用该元素进行除法。在实际中,如果该元素的绝对值非常小,也会出现问题。可以对算法进行修改,引入部分或完全选主元
完全选主元的思路非常简单:在过程的第k阶段,我们寻找绝对值最大的元素aij(k−1),i>k,j≥k。该元素称为主元,并将矩阵的行和列进行交换,使其进入(k,k)位置;然后消元阶段按之前描述的方法进行,并重复此过程。注意,当交换矩阵的两行时,向量y中的元素也需要相应地交换。同样地,当交换矩阵的两列时,相应的x元素也需要交换
部分选主元的工作方式类似,但只在元素所在列的下方元素中搜索主元,因此在此情况下只需要交换两行。选主元增加了求解所需的数值工作量,因为每个阶段都需要进行主元搜索,同时还需要进行内存管理操作以交换行(在完全选主元的情况下还需交换列)
下面的算法描述了带部分主元的高斯消元法

接下来我们计算通过高斯消元法解方阵系统所需的基本操作次数。首先考虑高斯消元过程,我们看到在该过程的第一次迭代中,需要2n+1次操作来更新矩阵的第二行(1次除法和n次乘法和减法运算以求出行的新的元素)。因此,为了将第一列中第一个元素以下的所有元素置零,并更新从第二行开始的所有行,需要(n−1)(2n+1)次操作。接下来,我们需要(n−2)(2n−1)次操作以将第二列置零并更新矩阵;对于第三列,我们需要(n−3)(2n−3)次操作,依此类推。这些操作的总和为
=====i=1∑n−1(n−i)(2(n−i+1)+1)i=1∑n−1(n−i)(2n−2i+3)k=1∑n−1k(2k+3)2k=1∑n−1k2+3k=1∑n−1k3n(n−1)(2n−1)+23n(n−1)∼32n3
这里的符号∼表示多项式中的首项,这种表示法比通常的O(⋅)表示法更具信息性,因为它指出了首项的系数。我们最终需要对变换后的三角系统应用反向代入,这将额外需要n2次运算。这不会改变主导的复杂度项,因此求解一个一般的非奇异系统所需的总运算次数为∼32n3
3. QR分解
QR分解是一种线性代数操作,它将一个矩阵分解为一个正交分量,该分量是矩阵列空间的基,以及一个三角分量。在QR分解中,矩阵A∈Rm,n,其中m≥n,且rank(A),因此被分解为
A=QR
其中Q∈Rm,n具有正交列(即Q⊤Q=In),并且R∈Rn,n是上三角矩阵。计算QR分解的方法有很多,包括 Householder 变换法、改进的 Gram–Schmidt 算法以及快速 Givens 方法。这里,我们描述基于改进的 Gram–Schmidt 算法(modified Gram–Schmidt, MGS)的方法
3.1 改进的Gram–Schmidt过程
我们回忆一下Section第2.3.3节,当给定一组线性无关向量{a(1),⋯,a(n)}时,Gram–Schmidt(GS)过程会构造一个与原始向量组具有相同张成空间的正交归一向量组{q(1),⋯,q(n)},具体如下:对于k=1,⋯n
ζ(k)=a(k)−i=1∑k−1⟨a(k),q(i)⟩q(i)q(k)=∥ζ(k)∥ζ(k)
设Sk−1=span{a(1),⋯,a(n)},并设其正交补记为Sk−1⊥。在上述方程中,GS 过程计算a(k)在Sk−1上的投影,然后从a(k)中减去它,从而得到a(k)在Sk−1⊥上的投影。容易看出,上述方程中的投影运算可以用矩阵形式表示如下
ζ(k)=PSk−1⊥a(k)PSk−1⊥=I−PSk−1PSk−1=i=1∑k−1q(i)q(i)⊤
其中PS0=0,PS0⊥=I。此外,正交投影矩阵PSk−1⊥=I−PSk−1可以表示为投影到各个q(1),⋯,q(k−1)的正交子空间的初等投影的乘积,即
PSk−1⊥=Pq(k−1)⊥⋯Pq(1)⊥,k>1Pq(i)⊥=I−q(i)q(i)⊤
这个事实可以很容易地直接验证:例如取k=3(一般情况可以通过相同的论证得出)
=====Pq(2)⊥Pq(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−PS2PS2⊥
在 MGS 中,每个ζ(k)=Pq(k−1)⊥⋯Pq(1)⊥Ia(k)按如下方式递归计算(注意以下计算的是一个ζ)
ζ(k)(1)ζ(k)(2)ζ(k)(3)ζ(k)(k)=a(k),=Pq(1)⊥ζ(k)(1)=(I−q(1)q(1)⊤)ζ(k)(1)=ζ(k)(1)−q(1)q(1)⊤ζ(k)(1),=Pq(2)⊥ζ(k)(2)=ζ(k)(2)−q(2)q(2)⊤ζ(k)(2), ⋮⋮⋮=Pq(k−1)⊥ζ(k)(k−1)=ζ(k)(k−1)−q(k−1)q(k−1)⊤ζ(k)(k−1).
虽然两种公式( GS 和 MGS )在数学上是等价的,但后者在数值上被证明更稳定。接下来将 MGS 过程形式化为一个算法

对于较大的m,n,计算工作主要由算法的最内层循环支配:计算rij=q(i)⊤ζ(j)需要m次乘加运算(实际是m次乘法和m−1次加法),而计算ζ(j)=ζ(j)−rijq(i)需要m次乘减运算,因此每个内层循环总计4m次操作。因此,算法的总体操作计数大约为
i=1∑nj=i+1∑n4m=i=1∑n(n−i)4m=(n2−2n(n+1))4m∼2mn2
接下来我们将展示 MGS 算法实际上提供了A的QR分解中的Q和R因子。设a(1),⋯,a(n)表示A的各列。由于ζ(1)=a(1),并且对于j>1
ζ(j)=a(j)−i=1∑j−1q(i)q(i)⊤a(j)
现在设rjj=∥ζ(j)∥,rij=q(i)⊤a(j),并回忆q(j)=ζ(j)/rjj。前面的方程变为
rjjq(j)=a(j)−i=1∑j−1rijq(i)
那也就是说
a(j)=rjjq(j)+i=1∑j−1rijq(i)
这给出了所需的分解A=QR,其中
[a(1)⋯a(n)]=[q(1)⋯q(n)]r110⋮0r12r22⋮0⋯⋯⋱⋯r1nr2n⋮rnn
以上推理构成了以下事实的构造性证明
定理7.1(QR分解):任意矩阵A∈Rm,n,且m≥n,rank(A)=n,都可以分解为A=QR,其中R∈Rn,n为上三角矩阵且对角线元素为正,Q∈Rm,n的列向量标准正交(即满足Q⊤Q=In)
3.2 针对秩亏矩阵的 MGS 和QR分解
在标准的 GS 过程中,我们假设向量{a(1),⋯,a(n)},a(i)∈Rm是线性无关的,也就是说矩阵A=[a(1)⋯a(n)]∈Rm,n是列满秩的。接下来,我们讨论如何将 GS 过程和QR分解推广到A不满秩的情况,即{a(1),⋯,a(n)}线性相关时。在这种情况下,令k≤n为最小整数,使得向量a(k)可以表示为前面向量{a(1),⋯,a(k−1)}的线性组合(前k−1个向量线性无关,前k个向量线性相关),即
a(k)=i=1∑k−1α~ia(i)
α~i为标量。可知{q(1),⋯,q(k−1)}张成的子空间与 {a(1),⋯,a(k−1)}相同,我们也有
a(k)=i=1∑k−1αiq(i)
αi为标量。由于向量q(j),j=1,…,k−1是标准正交的
⟨a(k),q(j)⟩=i=1∑k−1αi⟨q(i),q(j)⟩=αj
因此,根据ζ(k)=a(k)−∑i=1k−1⟨a(k),q(i)⟩q(i)可以得到ζ(k)=0,因此标准程序无法继续。然而,广义程序通过丢弃所有满足ζ(k′)=0的对应向量a(k′),k′≥k,来继续进行,直到程序终止,或者找到一个ζ(k′)=0的向量a(k′)。在这种情况下,对应的标准向量q(k′)被加入标准正交集合中,并继续迭代该过程。终止时,该修改后的过程返回一组r=rank(A)个正交向量{q(1),⋯,q(r)},它们形成R(A)的标准正交基
这个过程提供了一种广义的QR分解,因为A的每一列都可以表示为Q=[q(1)⋯q(r)]列的线性组合,并且非零系数的数量是非递减的。具体而言,A的第一块n1≥1列被表示为q(1)的线性组合,A的第二块n2≥1列被表示为q(1),q(2)的线性组合,依此类推,直到A的第r块nr列被表示为q(1),⋯,q(r)的线性组合,其中n1+n2+⋯+nr=n。用公式表示为
A=QR,R=R110⋮0R12R22⋮0⋯⋯⋱⋯R1rR2r⋮Rrr,Rij∈R1,nj
矩阵R是分块上三角形式。然后可以重新排列R的列,使得Rii第一个元素所在的列移到第i列,构造上三角矩阵。这可以写成
A=QRE⊤,R=[R~M]
其中E是一个合适的列置换矩阵(注意置换是初等变换,因此矩阵是正交的),R~∈Rr,r是上三角且可逆的,M∈Rr,n−r
QR分解的另一种完整形式使用Q矩阵中的所有m列:在q(1)⋯q(r)的基础上添加m−r个正交列,以完成Rm的一组正交基。因此,在R矩阵中附加m−r个全零的尾行,以得到
A=QRE⊤,Q∈Rm,Q⊤Q=Im,R=[R~0m−r,rM0m−r,n−r]