定义
对于 n 阶矩阵,若存在非零列向量 x 和数 λ 满足 Ax=λx,则称 λ 和 x 为一组对应的特征值和特征向量。
在确定了特征值之后,可以得到对应的无穷多个解。
求解特征值和特征向量
求解特征值和特征向量:
容易发现,λ 是一个特征值,只需要满足 Ax=λx 有解,以 x 为元容易列出方程,其常数项为均 0,系数矩阵为。
⎡⎣⎢⎢⎢⎢⎢⎢⎢λ−A1,1−A2,1−A3,1⋮−An,1−A1,2λ−A2,2−A3,2⋮−An,2−A1,3−A2,3λ−A3,3⋮−An,3⋯⋯⋯⋮⋯−A1,n−A2,n−A3,n⋮λ−An,n⎤⎦⎥⎥⎥⎥⎥⎥⎥=λI−A
其中I是单位矩阵。
这个方程有非零解的充要条件是:det(λI−A)=0 (因为如果不为 0,则矩阵满秩,所有向量线性无关,无法得到0向量)
而 det(λI−A) 是一个 n 次多项式 p(λ),称为特征多项式,所有的特征值 λ 就是 p(λ) 的根。
应用
加速矩阵乘法:
由 Ax=λx,迭代该式可以得到 Anx=λnx 。
特殊矩阵的特征值
上三角矩阵
λI−A=⎡⎣⎢⎢⎢⎢⎢⎢⎢λ−A1,100⋮0−A1,2λ−A2,20⋮0−A1,3−A2,3λ−A3,3⋮0⋯⋯⋯⋮⋯−A1,n−A2,n−A3,n⋮λ−An,n⎤⎦⎥⎥⎥⎥⎥⎥⎥
带入行列式即可知道 det(λI−A)=∏(λ−Ai,i) 。
也就是说,主对角线上所有的 Ai,i 都是 det(λI−A)=0 的根。
零化多项式
对于一个矩阵 A,它的一个零化多项式 φ(λ) 是满足 φ(A)=0 的多项式,定义域包含矩阵。
最小多项式:次数最低的零化多项式。
Cayley-Hamilton 定理
特征多项式:p(λ)=|λI−A|,λ 定义域不止是 R,还可以是矩阵。
Cayley-Hamilton 定理指出:矩阵的特征多项式也是它的零化多项式。
即令:
φ(λ)=det(λI−A)=λn+a1λn−1+⋯+an−1λ+an
则有:
φ(A)=An+a1An−1+⋯+an−1A+an=O
证明:
将 φ(λ) 改写为:
φ(λ)=(λ−λ1)(λ−λ2)⋯(λ−λn)
由定理:任意的 n 阶矩阵都能相似为上三角矩阵 可知,存在可逆矩阵 P,使得:
PAP−1=⎡⎣⎢⎢⎢⎢⎢⎢λ1∗λ2⋯⋱⋱∗⋮∗λn⎤⎦⎥⎥⎥⎥⎥⎥
将 PAP−1 代入 φ(λ) 得到:
φ(PAP−1)=(PAP−1−λ1I)(PAP−1−λ2I)⋯(PAP−1−λnI)
计算:
⎡⎣⎢⎢⎢⎢⎢⎢0∗λ2−λ1⋯⋱⋱∗⋮∗λn−λ1⎤⎦⎥⎥⎥⎥⎥⎥×⎡⎣⎢⎢⎢⎢⎢⎢λ1−λ2∗0⋯⋱⋱∗⋮∗λn−λ2⎤⎦⎥⎥⎥⎥⎥⎥×⋯×⎡⎣⎢⎢⎢⎢⎢⎢λ1−λn∗λ2−λn⋯⋱⋱∗⋮∗0⎤⎦⎥⎥⎥⎥⎥⎥=O
即 φ(PAP−1)=Pφ(A)P−1=O,故有 φ(A)=O
求解特征多项式
带入 n 个数,求出得 det(xIn−A),得到 n 个矩阵,通过高斯消元可以 O(n3) 地求出行列式。
然后可 O(n2) 拉格朗日插值求出原来的多项式,总复杂度受限于高斯消元,为 O(n4) 。
求解最小多项式
构造矩阵序列 ai=Ai。
求出它的一个线性递推 ri,即:
∑j=0mrjai−j=∑j=0mrjAi−j=(∑j=0mrm−jAj)⋅Ai−m=0∴∑j=0mrm−jAj=0
所以可以由 ri 翻转得到 f(λ) 。
求解 ai 前 n 项的复杂度受限于矩阵乘法为 O(n4),求解递推式的复杂度为 O(n3) 。
考虑到实际求解递推式时,随机生成了两个向量 u,v 。
实际是计算标量序列 {uAiv} 的递推式,所以实际每次求出 uAi 复杂度应为 O(n2) 。
求这个递推式需要用到 ai 前 2n 项,求解复杂度为 O(n3) 。
因此总复杂度为 O(n3) 。
(但是如果只是求出来并没有什么用,因为求解方法是随机的,甚至连检查一次保证正确都需要 O(n2(n+e)) 的时间(e 为矩阵非 0 位置个数))
求解稀疏方程组
设方程系数用矩阵 A 表示,右侧每个方程的常数用向量 b 表示,答案用向量 x 表示,则满足关系式
Ax=b,即 x=A−1b 。
求出 {Aib} 线性递推式,反推出 A−1b 即可。
反推方法:
带入线性递推的 m 项,则 ∑i=0mAm−ib⋅ri=0
两边同乘 A−1,得到 A−1b⋅rm+∑i=0m−1Am−ibri=0
求解矩阵 k 次幂
我们要求解 Ak,常规做法是直接用快速幂
设矩阵 A 的一个零化多项式是 f(λ) ,显然,Ak 可以用一个多项式表示 Ak=∑k0wiAi。
{wi} 构成了一个 k+1 次多项式 Fk(x)。
存在一种合法的表示是 Fk(x)=xk。
∵f(A)=0∴∀i,f(A)Ai=0
所以对于任意实数 T,Gk(x)=xk−Tf(x) 也合法,也就是相当于我们要求出 xk 对于 f(x) 这个 n+1 多项式取模。
显然可以通过类似快速幂的方式倍增求解这个多项式,每次对 f(x) 取模复杂度是 O(nlogn) ,总时间复杂度 O(nlogmlogn) 。
最后得到的 F(x) 是一个 n 次多项式,带入就可以快速求出 Ak,可以认为这个复杂度是受限于求解 A0,A1,⋯,An−1 的 O(n4) 。
对于元矩阵 A 为稀疏矩阵的情况,设其包含 e 个非零位置。
那么求解 B⋅A 的过程是 O(n⋅e) 的,求解 A0,A1,⋯,An−1 的过程,是 O(n2e) 的。
求解零化多项式的复杂度也是 O(n2(n+e)) 的,因此总复杂度为 O(n2(n+e))。
而一般的矩阵快速幂是 O(n3logk) 的,这种方法适用情况非常特殊。
另外,对于并不需要知道整个矩阵的答案,并且 A0,A1,⋯,An−1 特殊的具体问题,这个方法也十分有效。
求解常系数线性齐次递推
问题是要求数列 fi=∑nj=1aj⋅fi−j 。
给出 f0,f1,⋯,fn−1,求第 k 项的值。
线性递推显然可以用初始向量列与转移矩阵的幂次的乘积表示,即fi=(S⋅Ai)n,其中A为转移矩阵,S为初始向量列,我们求的是第n项。
对于n=4的情况,我们的转移矩阵。
A=⎛⎝⎜⎜⎜111a4a3a2a1⎞⎠⎟⎟⎟
鉴于它的特殊性,我们可以直接求出它的特征多项式表达式。
由
λIn−A=⎛⎝⎜⎜⎜λ−1λ−1λ−1−a4−a3−a2λ−a1⎞⎠⎟⎟⎟
带入行列式最暴力的求法
枚举一个排列pi,设排列p的逆序对为f(p),|A|=∑(−1)f(p)ΠAi,pi
实际上合法的排列只有n个,就是
枚举pi=n
那么
pj=⎧⎩⎨jnj−1j<ij=ij>i
当 i=n 时,(−1)f(p)ΠAi,pi=λn−a1λn−1
当 i=1 时,f(p)=n−i
ΠAi,pi=(−1)n−i+1λi⋅an−i+1
(−1)f(p)ΠAi,pi=−λian−i+1
综上,转移矩阵A的特征多项式有简单的表达
p(λ)=|λIn−A|=λn−a1λn−1−a2λn−2−⋯−an
假设有f0这一项(不需要知道是多少),那么认为初始向量列为S=(f−(n−1),f−(n−2),⋯,f0)
这个问题,我们要求的是 S⋅Ak 的第 n 项,不需要知道整个矩阵
类似求出 Ak 的过程,求出 Fk(x)modp(λ)
我们要求解 (S⋅Ak)n=∑n1[xi]F(x)(S⋅Ai)n
而 (S⋅Ai)n=fi 已知,求出 F(x) 后直接带入即可
需要用到多项式取模,求解这个表达式是 O(nlognlogk) 的,求完直接带入即可