MIT線性代數(shù)總結(jié)筆記——LU分解
矩陣分解
矩陣分解(Matrix Factorizations)就是將一個矩陣用兩個以上的矩陣相乘的等式來表達剧辐。而矩陣乘法涉及到數(shù)據(jù)的合成(即將兩個或多個線性變換的效果組合成一個矩陣)咨察,因此可以說,矩陣分解是對數(shù)據(jù)的一種分析亮曹。
矩陣分解 | LU分解 |
---|---|
分解形式 |
( |
目的 | 提高計算效率 |
前提 | (1)矩陣是方陣( (2)矩陣是可逆的,也就是該矩陣是滿秩矩陣懂鸵,每一行都是獨立向量偏螺; (3)消元過程中沒有 |
LU分解
分解形式
簡述
分解常用于求解工業(yè)和商業(yè)問題中的序列方程套像。它是最常見的求解線性系統(tǒng)
的方法,主要思路是:把
分解成一個下三角矩陣(Lower Triangular Matrix)和一個上三角矩陣(Upper Triangular Matrix)终息,簡稱
夺巩。分解后,等式
可以寫成
周崭,這樣我們令
柳譬,這樣就可以通過分開求解兩個等式來得到
:
即可以先通過求出
,最后再用
续镇,求出
美澳。
- 本質(zhì)上,
分解是高斯消元法的一種表達方式,為了更好地理解
分解人柿,我們需要解釋一下高斯消元法柴墩。
高斯消元法(Gaussian Elimination)
簡述
為了求解線性系統(tǒng)忙厌,我們基本的策略是用相等的式子去替代要求解的式子凫岖,來讓求解變得更容易。對于一個線性系統(tǒng)中有若干個未知數(shù)逢净,我們需要將方程組中的一方程的未知數(shù)用含有另一未知數(shù)的代數(shù)式表示哥放,并將其代入到另一方程中,這就消去了一未知數(shù)爹土,得到一解甥雕;或?qū)⒎匠探M中的一方程倍乘某個常數(shù)加到另外一方程中去,也可達到消去一未知數(shù)的目的胀茵,并最終得到線性系統(tǒng)的解社露。這一求解算法稱之為高斯消元法(Gaussian Elimination)。
示例
下文將展示高斯消元法的求解過程琼娘,設(shè)需求解的線性方程組如下:
將其表達為矩陣形式為:
- 為了將多余的未知數(shù)
消除峭弟,我們需要將第三行的
消除,矩陣的第一行乘
倍再和第三行相加脱拼,得到:
- 接著再進行對多余的未知數(shù)
的消除瞒瘸,這里將第二行乘
倍再與第三行相加,得到:
至此熄浓,我們得到了一個新的三角形矩陣情臭,轉(zhuǎn)換為線性方程組的形式為:
通過簡單的回代,我們最終可以得到線性方程組的解:
高斯消元法與LU分解之間的聯(lián)系
那么為什么說分解其實就是高斯消元法的一種表達方式呢赌蔑?這是因為我們可以將上述示例中每一步的操作用矩陣相乘的形式(行變換的本質(zhì)就是左乘矩陣)表達出來俯在。
例如上文示例中的第一步:“為了將多余的未知數(shù)消除,我們需要將第三行的
消除娃惯,矩陣的第一行乘
倍再和第三行相加” 跷乐,可以表達為:
同樣地,第二步:“繼續(xù)進行對多余的未知數(shù)的消除石景,這里將第二行乘
倍再與第三行相加” 可以表達為:
因此劈猿,我們可以用一個矩陣相乘的等式來記錄整個高斯消元的過程:
將三個消元矩陣合并,用表示則為:
那么我們可以得到關(guān)于的表達式:
這樣一來我們就得到了的
分解潮孽,即將矩陣A分解為一個下三角矩陣(
)和一個上三角矩陣(
)的乘積揪荣。
偽代碼
U = A, L = I
for j = 1 : n - 1 do
for i = j + 1 : n do
l_ij = u_ij / u_jj
for k = j : n do
u_ik = u_ik - l_ij * u_jk
end for
end for
end for
- 此處是矩陣index從1開始計數(shù)。
- Credit to http://iacs-courses.seas.harvard.edu/courses/am205/slides/am205_lec07.pdf
算法效率
接下來我們來思考一下算法效率的問題往史,假如我們有一個的矩陣仗颈,并且各項均非
,那我們需要計算多少次才能得到矩陣
呢?
對于這個問題我們先從列的角度來考慮挨决,第一列消元運算結(jié)束以后请祖,矩陣變?yōu)椋?/p>
這一步中,第一列的元素運算了次脖祈,而第一行共有
個元素肆捕,于是僅第一行與第一列消元結(jié)束后,我們就計算了
次盖高。之后我們要研究剩下的
的矩陣慎陵,以此類推可知,最后的計算量為
喻奥。
接著席纽,我們可以利用微積分計算得到,的操作次數(shù)為
撞蚕,
的操作次數(shù)為
次润梯。
結(jié)合上文偽代碼, 因為有三重循環(huán)嵌套甥厦,因此分解的復(fù)雜度為
纺铭,其中加法操作為
,乘法操作為
矫渔,總共為
次彤蔽,求解
和
各需要
次
前提條件
(1)矩陣是方陣(LU分解主要是針對方陣);
(2)矩陣是可逆的庙洼,也就是該矩陣是滿秩矩陣顿痪,每一行都是獨立向量;
(3)消元過程中沒有0主元出現(xiàn)油够,也就是消元過程中不能出現(xiàn)行交換的初等變換蚁袭。
LUD分解(LDU Decomposition)
上文中我們已經(jīng)得到了,我們還可以繼續(xù)分解下去得到
石咬,
為對角矩陣(Diagonal Matrix)揩悄,矩陣的
分解是在
分解之后,把
再次分解鬼悠,目的是把
的對角線元素都化為
删性,上文示例中我們得到的
如下
接下來,讓矩陣中位于對角線上的元素都為
焕窝,就可以提出一個對角矩陣
LUP分解(LU Decomposition with Partial Pivoting)
我們來考慮一個矩陣蹬挺,盡管矩陣
非奇異,并且很簡單它掂,但是使用
分解的算法會失敗巴帮,因為第一個主元
。在高斯消元法中,我們常常通過人為的行變換來消除主元為
時的影響榕茧。例如我們需要把矩陣A的第一行和第二行進行交換得到
垃沦,這樣我們就能將消元進行下去。這樣的操作也可以用矩陣相乘的方法來表達用押,那么在該示例中肢簿,即為
,這里的矩陣
稱為置換矩陣(Permutation Matrix)只恨。那么就有了LUP分解(LU decomposition with partial pivoting):
译仗。這一算法的出現(xiàn)顯著改善了
分解算法的穩(wěn)定性。
偽代碼
U = A, L = I, P = I
for j = 1 : n - 1 do
Select i (>= j) that maximizes |u_ij|
Interchange rows of U: u_(j,j:n) <-> u_(i,j:n)
Interchange rows of L: l_(j,1:j-1) <-> l_(i,1:j-1)
Interchange rows of P: p_(j,:) <-> p_(i,:)
for i = j + 1 : n do
l_ij = u_ij / u_jj
for k = j : n do
u_ik = u_ik - l_ij * u_jk
end for
end for
end for