作者水平有限,歡迎大家提出文中錯誤
PAn∗n=LU
高斯消元法
我曾寫過一個使用高斯消元法求解行列式的C++程序,本小節直接引用這段代碼講解
[C++] 計算行列式的若干種方法
void GaussElimination2UTM(double* matrix, int dimension){
for(int cnt1=0; cnt1<dimension; cnt1++)
for(int cnt2=cnt1+1; cnt2<dimension; cnt2++)
for(int cnt3=dimension-1; cnt3>=cnt1; cnt3--)
matrix[cnt2*dimension+cnt3] +=
-1*matrix[cnt1*dimension+cnt3]*matrix[cnt2*dimension+cnt1]/matrix[cnt1*dimension+cnt1];
return;
}
可見高斯消元法,就是從最上面的一行爲起點,以消去主元位置下所有非零值爲目的,對其下各行依次做乘加操作,直至獲得上三角陣Upper Triangle Matrix
消元矩陣 Elimination matrices
Eij=⎣⎢⎢⎢⎢⎡11⋱eij11⎦⎥⎥⎥⎥⎤
其作用是
EijA=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡row 1(A)row 2(A)⋮row i(A)+eij row j(A)⋮row m(A)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤
消元矩陣是在單位陣基礎上,改變了對角線下某個元素爲非零值,若此位置是row i,column j,在row i基礎上加上了eij倍的row j
由消元矩陣的意義可知,消元矩陣的逆,使得多加上的一行,通過減法消除
Eij−1=⎣⎢⎢⎢⎢⎡11⋱−eij11⎦⎥⎥⎥⎥⎤
通過高斯消元法求可逆陣的逆矩陣
通過高斯消元法,可以將可逆矩陣化爲單位矩陣,但是此時左乘的矩陣不僅僅是消元矩陣,而是涉及到所有初等行變換。如果將合作用依然寫作E
那麼有
EA=I
則
E=A−1
如果同時對矩陣A和單位陣I做初等行變換,則可以構造增廣矩陣[A∣I]
E[A∣I]=[I∣A−1]
A=LU
存在一個總的消元矩陣E,使得EA=U
E=Eψω…EγδEαβ
因子不能打亂順序
所求的L=E−1(Lower Triangular Matrices)
L有一個很好的性質
If no row exchanges,multipliers of elimination operations go directly into L.
而原因其實十分簡單,這裏引用課本中的證明
當計算第i行的時候,這i行的內容已經和U一致,所以我們有第i行的消元步驟如下:
row i(U)=row i(A)−li1row 1(U)−li2row 2(U)⋯−li(i−1)row i−1(U)
整理一下式子
row i(A)=li1row 1(U)+li2row 2(U)⋯+li(i−1)row i−1(U)+row i(U)
將上式寫成矩陣形式
A=⎣⎢⎢⎢⎢⎢⎡1l21⋮l(n−1)1ln11⋮l(n−1)2ln2⋱⋯1ln(n−1)1⎦⎥⎥⎥⎥⎥⎤U
L=⎣⎢⎢⎢⎢⎢⎡1l21⋮l(n−1)1ln11⋮l(n−1)2ln2⋱⋯1ln(n−1)1⎦⎥⎥⎥⎥⎥⎤
置換矩陣 Permutation matrices
Pij=⎣⎢⎢⎢⎢⎡11⋱11⎦⎥⎥⎥⎥⎤
置換矩陣是在單位矩陣基礎上,對矩陣的第i行、第j行或(第i列、第j列)進行交換,可見n維置換矩陣有n!種,並且這些矩陣可以構成一個羣。
置換矩陣有如下性質:
- PT=P−1(orthogonal)
- det P=−1
從變換的意義上講,置換矩陣對應的是一種鏡像變換
何時需要置換矩陣
還是以[C++] 計算行列式的若干種方法講解
在高斯消元法求解上三角陣的時候,由於一個極小主元的出現,使得整個消元過程出現了極大誤差,原因是計算機中浮點數的精度是有限的,對於極小值,在計算機中精度的丟失是致命的。當我的程序引入了置換操作後,問題得以解決。
在代數上,置換操作是爲了解決消元過程中產生的主元爲零,使得消元無法繼續的問題,換句話說P使得矩陣A各行排列在合適的位置上,避免主元0的出現。
PA=LDU
LU分解還有一個更加平衡的形式,通過消元得到的上三角陣U,可以進一步把主元分離出來,構成Diagonal Matrices。
例如
[213]=[23][1211]
秩一矩陣的分解A=uvT
所有秩一矩陣都可以表示稱主行和主列的乘積
[1248510]=[12][145]
秩一矩陣就像構造其他矩陣的積木一樣,比如一個5∗17的秩4矩陣,最少可以拆成4個秩一矩陣
A=QR
暫無
特徵值分解
假設n階方陣
A存在n個相互獨立的特徵向量,構造成特徵向量矩陣
S=[x1 x2⋯xn]
將A左乘S
AS=[λ1x1 λ2x2⋯λnxn]
分離特徵值和特徵向量
AS=[x1 x2⋯xn]⎣⎢⎢⎡λ1λ2⋱λn⎦⎥⎥⎤=SΛ
左乘S−1
A=SΛS−1
詳見[筆記][總結] MIT線性代數 Gilbert Strang 矩陣運算
奇異值分解
奇異值分解(Singular Value Decomposition)
A=UΣVT
如果A是方陣,U,V都是標準正交矩陣,Σ是對角矩陣,但其實任意類型的矩陣都可以進行奇異值分解
奇異值分解的意義
v1 v2⋯vr行空間的一組標準正交基,u1 u2⋯ur是列空間的一組標準正交基,而且這組正交基的每一個基都滿足σiui=Avi(σ is a stretching factor),當然並不是行空間的任意一組正交基,都能在都左乘A後,仍然保持正交。這個不影響分解
σiui=Avi可以表示成
[u1 u2⋯ur]m∗r⎣⎢⎢⎡σ1σ2⋱σr⎦⎥⎥⎤r∗r=Am∗n[v1 v2⋯vr]n∗r
但是這還不是奇異值分解的最終形式,因爲N(A)和N(AT)的信息還是隱藏着
補充vr+1⋯vm是零空間的一組標準正交基
補充ur+1⋯un是左零空間的一組標準正交基
V=[v1 v2⋯vr vr+1⋯ vn]n∗n=[VC(AT) VN(A)]
U=[u1 u2⋯ur ur+1⋯ um]m∗m=[UC(A) UN(AT)]
U的列向量構成了Rm的一組標準正交基
V的列向量構成了Rn的一組標準正交基
Am∗n[VC(AT)n∗r VN(A)n∗(n−r)]n∗n=[UC(A)m∗r UN(AT)m∗(m−r)]m∗m[Σr∗rO(m−r)∗rOr∗(n−r)O(m−r)∗(n−r)]m∗n
Am∗n=[UC(A)m∗r Un(AT)m∗(m−r)]m∗m[Σr∗rO(m−r)∗rOr∗(n−r)O(m−r)∗(n−r)]m∗n[VC(AT)r∗nTVN(A)(n−r)∗nT]
其中上式包含
A=UC(A)ΣVC(AT)T
由於UN(AT)和VN(A)的選取是任意的,所以矩陣A的奇異值分解不一定是唯一的,但是A=UC(A)ΣVC(AT)T是唯一的
最後,一般的奇異值分解爲
A=U[ΣOOO]VT
方陣的奇異值分解
An∗n=U[Σr∗rO(n−r)∗rOr∗(n−r)O(n−r)∗(n−r)]V
對於方陣,U,V中間的矩陣一定是對角陣,在計算過程中,沒有必要把零值和非零值分開計算,零值直接視作零特徵值,不妨直接把中間的矩陣記作Σ
已經知道ATA是對稱矩陣,如果已經知道了A=UΣVT
ATA=VΣUTUΣVT=VΣ2VT
式子中的V是奇異值分解裏的V
同樣的AAT也是對稱矩陣
AAT=UΣ2UT
式子中的U是奇異值分解裏的U
綜上所述,標準正交矩陣V是ATA的特徵向量矩陣,標準正交矩陣U是AAT的特徵向量矩陣
同時也可以看出,即使AAT和ATA不一定是正定的,但至少他們都是半正定的
而且AAT和ATA有相同的特徵值,這不是偶然AB和BA當然有相同的特徵值
這個Σ的平方,就是上邊特徵值矩陣,對各項開方即可得到。
再議對稱矩陣
所有矩陣的奇異值分解中,要數對稱矩陣的奇異值分解最特殊,因爲其U=V
對稱矩陣的奇異值分解爲
A=QΛ QT
同時上式也是對稱矩陣的特徵值分解