MIT線性代數(shù)總結(jié)筆記——LU分解

MIT線性代數(shù)總結(jié)筆記——LU分解

矩陣分解

矩陣分解(Matrix Factorizations)就是將一個矩陣用兩個以上的矩陣相乘的等式來表達剧辐。而矩陣乘法涉及到數(shù)據(jù)的合成(即將兩個或多個線性變換的效果組合成一個矩陣)咨察,因此可以說,矩陣分解是對數(shù)據(jù)的一種分析亮曹。

矩陣分解 LU分解
分解形式 A=LU
(L代表下三角矩陣缀棍,U代表上三角矩陣)
目的 提高計算效率
前提 (1)矩陣是方陣(LU分解主要是針對方陣)朴上;
(2)矩陣是可逆的,也就是該矩陣是滿秩矩陣懂鸵,每一行都是獨立向量偏螺;
(3)消元過程中沒有0主元出現(xiàn),也就是消元過程中不能出現(xiàn)行交換的初等變換匆光。

LU分解

分解形式

A = LU = \left[\begin{matrix} 1 & 0 & 0 & 0 \\ l_{21} & 1 & 0 & 0 \\ l_{31} & l_{32} & 1 & 0 \\ l_{41} & l_{42} & l_{43} & 1\end{matrix}\right]\left[\begin{matrix} u_{11} & u_{12} & u_{13} & u_{14} \\ 0 & u_{22} & u_{23} & u_{24} \\ 0 & 0 & u_{33} & u_{34} \\ 0 & 0 & 0 & u_{44}\end{matrix}\right]

簡述

LU分解常用于求解工業(yè)和商業(yè)問題中的序列方程套像。它是最常見的求解線性系統(tǒng) Ax=b 的方法,主要思路是:把A 分解成一個下三角矩陣(Lower Triangular Matrix)和一個上三角矩陣(Upper Triangular Matrix)终息,簡稱LU夺巩。分解后,等式Ax=b可以寫成L(Ux)=b周崭,這樣我們令y=Ux柳譬,這樣就可以通過分開求解兩個等式來得到x

Ly=b \\ Ux=y

即可以先通過Ly=b求出y,最后再用Ux=y续镇,求出x美澳。

  • 本質(zhì)上,LU分解是高斯消元法的一種表達方式,為了更好地理解LU分解人柿,我們需要解釋一下高斯消元法柴墩。

高斯消元法(Gaussian Elimination)

簡述

為了求解線性系統(tǒng)忙厌,我們基本的策略是用相等的式子去替代要求解的式子凫岖,來讓求解變得更容易。對于一個線性系統(tǒng)中有若干個未知數(shù)逢净,我們需要將方程組中的一方程的未知數(shù)用含有另一未知數(shù)的代數(shù)式表示哥放,并將其代入到另一方程中,這就消去了一未知數(shù)爹土,得到一解甥雕;或?qū)⒎匠探M中的一方程倍乘某個常數(shù)加到另外一方程中去,也可達到消去一未知數(shù)的目的胀茵,并最終得到線性系統(tǒng)的解社露。這一求解算法稱之為高斯消元法(Gaussian Elimination)。

示例

下文將展示高斯消元法的求解過程琼娘,設(shè)需求解的線性方程組如下:

\begin{cases} x_1-2x_2+x_3=0 \\ 2x_2-8x_3=8\\5x_1-5x_3=10 \end{cases}

將其表達為矩陣形式為:

\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 5 & 0 & -5 &10 \end{array}\right]

  1. 為了將多余的未知數(shù)x_1消除峭弟,我們需要將第三行的5消除,矩陣的第一行乘-5倍再和第三行相加脱拼,得到:

\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 0 & 10 & -10 & 10 \end{array}\right]

  1. 接著再進行對多余的未知數(shù)x_2的消除瞒瘸,這里將第二行乘-5倍再與第三行相加,得到:

\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 0 & 0 & 30 & -30 \end{array}\right]

至此熄浓,我們得到了一個新的三角形矩陣情臭,轉(zhuǎn)換為線性方程組的形式為:

\begin{cases} x_1-2x_2+x_3=0 \\ x_2-4x_3=4\\x_3=-1 \end{cases}

通過簡單的回代,我們最終可以得到線性方程組的解:

\begin{cases} x_1=1 \\ x_2=0\\x_3=-1 \end{cases} \quad\quad\quad \left[\begin{array}{ccc|c} 1 & 0 & 0 & 1 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & -1 \end{array}\right]

高斯消元法與LU分解之間的聯(lián)系

那么為什么說LU分解其實就是高斯消元法的一種表達方式呢赌蔑?這是因為我們可以將上述示例中每一步的操作用矩陣相乘的形式(行變換的本質(zhì)就是左乘矩陣)表達出來俯在。

例如上文示例中的第一步:“為了將多余的未知數(shù)x_1消除,我們需要將第三行的5消除娃惯,矩陣的第一行乘-5倍再和第三行相加” 跷乐,可以表達為:

\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ -5 & 0 & 1 \end{matrix}\right] \left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 5 & 0 & -5 &10 \end{array}\right]=\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 0 & 10 & -10 & 10 \end{array}\right]

同樣地,第二步:“繼續(xù)進行對多余的未知數(shù)x_2的消除石景,這里將第二行乘-5倍再與第三行相加” 可以表達為:

\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & -5 & 1 \end{matrix}\right] \left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 0 & 10 & -10 & 10 \end{array}\right] = \left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 0 & 0 & 30 & -30 \end{array}\right]

因此劈猿,我們可以用一個矩陣相乘的等式來記錄整個高斯消元的過程:

\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & -5 & 1 \end{matrix}\right]\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ -5 & 0 & 1 \end{matrix}\right]\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 5 & 0 & -5 &10 \end{array}\right]=\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 0 & 0 & 30 & -30 \end{array}\right]

將三個消元矩陣合并,用E表示則為:

EA =\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ -5 & -5 & 1 \end{matrix}\right]\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 5 & 0 & -5 &10 \end{array}\right]=\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 0 & 0 & 30 & -30 \end{array}\right] = U

那么我們可以得到關(guān)于A的表達式:

A = \left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 5 & 0 & -5 &10 \end{array}\right] = E^{-1}U = \left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 5 & 5 & 1 \end{matrix}\right]\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 0 & 0 & 30 & -30 \end{array}\right] = LU

這樣一來我們就得到了ALU分解潮孽,即將矩陣A分解為一個下三角矩陣(L)和一個上三角矩陣(U)的乘積揪荣。

偽代碼

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

算法效率

接下來我們來思考一下算法效率的問題往史,假如我們有一個100*100的矩陣仗颈,并且各項均非0,那我們需要計算多少次才能得到矩陣U呢?

對于這個問題我們先從列的角度來考慮挨决,第一列消元運算結(jié)束以后请祖,矩陣變?yōu)椋?/p>

\left[\begin{matrix} 1 & \cdots & \cdots & \cdots \\ 0 & \ddots & \cdots & \cdots \\ \vdots & \vdots & \ddots & \vdots \\ 0 & \cdots & \cdots & \ddots\end{matrix}\right]

這一步中,第一列的元素運算了100次脖祈,而第一行共有100個元素肆捕,于是僅第一行與第一列消元結(jié)束后,我們就計算了100^2次盖高。之后我們要研究剩下的99*99的矩陣慎陵,以此類推可知,最后的計算量為\sum^{n}_{k=1}{k^2}喻奥。

接著席纽,我們可以利用微積分計算得到,A的操作次數(shù)為\frac{1}{3}n^3撞蚕,b的操作次數(shù)為n^2次润梯。

結(jié)合上文偽代碼, 因為有三重循環(huán)嵌套甥厦,因此LU分解的復(fù)雜度為O(n^3)纺铭,其中加法操作為\frac{1}{3}n^3,乘法操作為\frac{1}{3}n^3矫渔,總共為\frac{2}{3}n^3次彤蔽,求解by各需要n^2

前提條件

(1)矩陣是方陣(LU分解主要是針對方陣);
(2)矩陣是可逆的庙洼,也就是該矩陣是滿秩矩陣顿痪,每一行都是獨立向量;
(3)消元過程中沒有0主元出現(xiàn)油够,也就是消元過程中不能出現(xiàn)行交換的初等變換蚁袭。

LUD分解(LDU Decomposition

上文中我們已經(jīng)得到了A=LU,我們還可以繼續(xù)分解下去得到A=LDU石咬,D對角矩陣(Diagonal Matrix)揩悄,矩陣的LDU分解是在LU分解之后,把U再次分解鬼悠,目的是把U的對角線元素都化為1删性,上文示例中我們得到的A=LU如下

A = \left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 5 & 0 & -5 &10 \end{array}\right] = LU = \left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 5 & 5 & 1 \end{matrix}\right]\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 0 & 0 & 30 & -30 \end{array}\right]

接下來,讓U矩陣中位于對角線上的元素都為1焕窝,就可以提出一個對角矩陣D

LU = \left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 5 & 5 & 1 \end{matrix}\right]\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 2 & -8 & 8 \\ 0 & 0 & 30 & -30 \end{array}\right] =\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 5 & 5 & 1 \end{matrix}\right]\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 2 & 0 \\ 0 & 0 & 30 \end{matrix}\right]\left[\begin{array}{ccc|c} 1 & -2 & 1 & 0 \\ 0 & 1 & -4 & 4 \\ 0 & 0 & 1 & -1 \end{array}\right]=LDU

LUP分解(LU Decomposition with Partial Pivoting)

我們來考慮一個矩陣A=\left[\begin{matrix} 0 & 1 \\ 1 & 1 \end{matrix}\right]蹬挺,盡管矩陣A非奇異,并且很簡單它掂,但是使用LU分解的算法會失敗巴帮,因為第一個主元A_{0,0} = 0。在高斯消元法中,我們常常通過人為的行變換來消除主元為0時的影響榕茧。例如我們需要把矩陣A的第一行和第二行進行交換得到A=\left[\begin{matrix} 1 & 1 \\ 0 & 1 \end{matrix}\right]垃沦,這樣我們就能將消元進行下去。這樣的操作也可以用矩陣相乘的方法來表達用押,那么在該示例中肢簿,即為PA=\left[\begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix}\right]\left[\begin{matrix} 0 & 1 \\ 1 & 1 \end{matrix}\right]=\left[\begin{matrix} 1 & 1 \\ 0 & 1 \end{matrix}\right],這里的矩陣P稱為置換矩陣(Permutation Matrix)只恨。那么就有了LUP分解(LU decomposition with partial pivoting)PA = LU译仗。這一算法的出現(xiàn)顯著改善了LU分解算法的穩(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末官觅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阐污,更是在濱河造成了極大的恐慌休涤,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笛辟,死亡現(xiàn)場離奇詭異功氨,居然都是意外死亡,警方通過查閱死者的電腦和手機手幢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門捷凄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人围来,你說我怎么就攤上這事跺涤。” “怎么了监透?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵桶错,是天一觀的道長。 經(jīng)常有香客問我胀蛮,道長院刁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任粪狼,我火速辦了婚禮退腥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘再榄。我一直安慰自己狡刘,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布不跟。 她就那樣靜靜地躺著颓帝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上购城,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天吕座,我揣著相機與錄音,去河邊找鬼瘪板。 笑死吴趴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侮攀。 我是一名探鬼主播锣枝,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兰英!你這毒婦竟也來了撇叁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤畦贸,失蹤者是張志新(化名)和其女友劉穎陨闹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薄坏,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡趋厉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胶坠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片君账。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沈善,靈堂內(nèi)的尸體忽然破棺而出乡数,到底是詐尸還是另有隱情,我是刑警寧澤矮瘟,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布瞳脓,位于F島的核電站,受9級特大地震影響澈侠,放射性物質(zhì)發(fā)生泄漏劫侧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一哨啃、第九天 我趴在偏房一處隱蔽的房頂上張望烧栋。 院中可真熱鬧,春花似錦拳球、人聲如沸审姓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽魔吐。三九已至扎筒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酬姆,已是汗流浹背嗜桌。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辞色,地道東北人骨宠。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像相满,于是被迫代替她去往敵國和親层亿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,576評論 2 349