问题描述:
给定一个矩阵,如下:
A=[a11a21a12a22]
其中满足 a12=a21.也就是所谓的 对称矩阵。那么如何求解此矩阵的特征值以及特征向量呢?这里我们要用到 雅克比旋转。
雅克比旋转
Jacobi方法是求对称矩阵的全部特征值以及相应的特征向量的一种方法,它是基于以下两个结论:
任何实对称矩阵A可以通过正交相似变换成对角型,即存在正交矩阵Q,使得
QTAQ=diag(λ1,λ2,…,λn)
其中λi(i=1,2,…,n)是A的特征值,Q中各列为相应的特征向量。在正交相似变换下,矩阵元素的平方和不变. 即设A=(aij)n×n,Q为正交矩阵,记B=QTAQ=(bij)n×n , 则
∑i,j=1na2i,j=∑i,j=1nb2i,jJacobi方法的基本思想是通过一次正交变换,将A中的一对非零的非对角元素化成零并且使得非对角元素的平方和减小。反复进行上述过程,使变换后的矩阵的非对角元素的平方和趋于零,从而使该矩阵近似为对角矩阵,得到全部特征值和特征向量。
如下我们仅仅考虑二维矩阵。对于高维的以此类推。
考虑如下的旋转矩阵,
P=[cos(θ)−sin(θ)sin(θ)cos(θ)]
显然我们知道P是正交矩阵,即 PT=P−1orPPT=E。
对矩阵A实施正交变换,即如下:
A′=PTAP
.
则有:
a′11=cos2(θ)a11+sin2(θ)a22−2cos(θ)sin(θ)a12 (1)
a′22=sin2(θ)a11+cos2(θ)a22+2cos(θ)sin(θ)a12 (2)
a′12=(cos2(θ)−sin2(θ))a12+cos(θ)sin(θ)(a11−a22) (3)
令 a′12=0,则可得出 θ的表达式:
ϕ=cot(2θ)=cos2(θ)−sin2(θ)2sin(θ)cos(θ)=a22−a112a12 (4)
如果令 t=sin(θ)/cos(θ),则
t2+2tϕ−1=0
这一方程较小的根对应着一个数量上小于 π/4的旋转角,利用二次求根公式并对分母进行区分,可以写出这一较小的根为:
t=sgn(ϕ)|ϕ|+ϕ2+1−−−−−√ (5)
如果 θ很大,以至于 θ2在计算机上溢出,则令 t=1/(2ϕ).于是就有:
cos(θ)=1t2+1−−−−−√ (6)
sin(θ)=tcos(θ) (7)
将(6、7)代入(1-3)则,显然有:
(3)有 a′12=0.剩下等式的指导思想是想将它们的新值写成旧值加一个小的修正。于是利用 a′12=0,将(1-2)的 a22消去,则有:
a′11=a11−ta12
a′22=a22+ta12
.
至此通过一次旋转变换,即可将原矩阵非对称部分消零。整个矩阵变成一个对角矩阵。且相应的特征向量也可以得出。
A′PA′A(P1,P2)=PTAP=AP=(P1,P2)[a′11a′22]
也就是A的特征值为 a′11和 a′22,相应的特征向量为 P1,P2.
其中,
P1=[cos(θ)−sin(θ)]
P2=[sin(θ)cos(θ)]
至于代码,就不写了,很简单哦!
参考文献
- 第四章第三节 Jacobi 方法
- Numerical Recipes(数值分析方法库) C/C++:见第11章特征系统,对称矩阵的雅可比变换。