問題描述:
給定一個矩陣,如下:
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章特征系統,對稱矩陣的雅可比變換。
