定義
定義:給定矩陣A,將A表示成下三角矩陣L和上三角矩陣U的乘積,稱爲LU分解。再進一步,希望L的對角元素都是1,這樣利於後面的計算。
此外,形如A=LDU的分解稱爲LDU分解,L是下三角矩陣,D是對角陣,U是上三角矩陣,其中L和U的對角元素都是1。
對於正方矩陣來說,上面的分解結果L和U的大小顯而易見,都和原矩陣A的size相同。那麼對於非正方矩陣而言呢?
長矩陣B經過LU分解的結果希望是如下的形式:
寬矩陣C經過LU分解的結果希望是如下的形式:
爲什麼要LU分解
一旦完成了LU分解,利用L和U的性質,再去求行列式的值或者解線性方程組,計算量就大大減少了。
LU分解作爲基本工具在各種數值計算問題中被廣泛應用。例如求解線性方程組Ax=b時,只需要做一次A=LU的分解,後面面對不同的b就可以反覆使用L和U了。
爲什麼能做到LU分解
可以先設定最終LU分解的兩個矩陣中的所有未知數,之後通過原始矩陣的每個元素反解出L和U中的每個元素,這裏可以以任意例子做實驗。但是需要注意,如果原始矩陣的對角元素有0,那麼情況就另當別論,需要對LU的樣子稍作改變再進行分解。
利用LU分解求行列式值
對於方陣A,若已經有形如A=LU的LU分解,則立即可以得到行列式值detA。因爲
detA=det(LU)=(detL)(detU)
所以只需要求出det L和det U即可。而下三角矩陣和上三角矩陣的行列式就是對角元素的乘積。這裏det L恰好等於1,於是
detA=U的對角元素的乘積
利用LU分解求解線性方程組
這裏以有解的情況爲例,考慮n階可逆方陣A和n維向量y,需要求解滿足Ax=y的向量x。
將A進行LU分解,解方程的問題就被分爲了兩個步驟,LUx=y。第一步就是求出滿足Lz=y的z;
第二步就是求出滿足Ux=z的x。
用數學表達式表述就是
Ax=LUx=L(Ux)=Lz=y
這樣有什麼好處?其實,由於L和U都是具有特殊形式的矩陣,所以求解過程要簡單許多。對於第一步:
⎝⎜⎜⎛1 車 孫 李 1 鄭 王 1 衛 1⎠⎟⎟⎞⎝⎜⎜⎛z1z2z3z4⎠⎟⎟⎞=⎝⎜⎜⎛ 子 醜 寅 卯 ⎠⎟⎟⎞
則求解順序一目瞭然,先求得z1,再利用已知的z1求得z2,在利用已知的z1,z2求得z3,最後通過已知的z1,z2,z3求出z4。
上三角矩陣也一樣,例如
⎝⎜⎜⎛387132−3−1−25⎠⎟⎟⎞⎝⎜⎜⎛x1x2x3x4⎠⎟⎟⎞=⎝⎜⎜⎛−13410⎠⎟⎟⎞
求解順序就反過來,先求x4,再利用已知的x4求x3。。。以此類推即可。這樣的順序比一般解法要快非常多。一般的順序需要不斷對A進行線性變換,逐行變更消元。這裏的複雜度具體優化了多少,有下表進行統計
利用LU分解求逆矩陣
前面講解了利用LU分解求線性方程組的問題,其實逆矩陣也可以分解爲多個求線性方程組的問題。
記n階方陣A的逆矩陣爲X,將X=(x1,⋯,xn)按列分塊,則AX=I可以寫成
A(x1,⋯,xn)=(e1,⋯,en)
按分量展開寫,就是
Ax1=e1,⋯,Axn=en
這裏每一個等式都對應了一個解線性方程的問題,事先對A進行LU分解,就可以快速求解Ax=b的問題了,這裏的b還是有許多個的情況,LU分解就實現了一勞永逸式的求解。
對角線上元素有0的情況
如果要解決這個困難,就需要在計算行列式以及求解線性方程組的過程中用到的選主元的方法。遇到0元素,就需要在同一列的下面尋找非0的元素,找到之後與該行整體進行交換。實現交換的操作就是在原矩陣上左乘一個矩陣S,所有S的累乘結果P就叫做置換矩陣,例如
P=⎝⎜⎜⎜⎜⎜⎜⎛010000000010100000001000000100000001⎠⎟⎟⎟⎟⎟⎟⎞
矩陣P中的每一行中恰好有一個1,每一列中也恰好有一個1,其他元素都是0,這樣的矩陣稱爲置換矩陣。之所以有這個名字,是因爲將置換矩陣乘以任何向量,所得結果都相當於將向量的各個分量進行重新排列。各個S相乘所得的矩陣一定是置換矩陣。