matlab 求解線性方程組之LU分解


線性代數中的一個核心思想就是矩陣分解,既將一個復雜的矩陣分解為更簡單的矩陣的乘積。常見的有如下分解:

LU分解:A=LU,A是m×n矩陣,L是m×m下三角矩陣,U是m×n階梯形矩陣

QR分解:

秩分解:A=CD  ,  A是m×n矩陣,C是m×4矩陣,D是4×n矩陣。

奇異值分解:A=UDVT

譜分解:

 

在求解線性方程組中,一個核心的問題就是矩陣的LU分解,我們將一個矩陣A分解為兩個更加簡單的矩陣的復合LU,其中L是下三角矩陣,U是階梯形矩陣。下三角矩陣和上三角矩陣具有非常良好的性質:Lx=y 或者Ux=y 很容易求解。

 

 

問題1.對於任意的矩陣A,是否存在LU分解?

 定理:如果A行等價於階梯形矩陣U,那么(EnEn-1......E1)A=U,其中的Ei,i=1,2,.....,n是高斯消去矩陣,他們都是下三角矩陣,並且都可逆。

 這個定理告訴我們三件事:

  1.並不是所有的矩陣都有LU分解的。

  2.A=LU=(EnEn-1......E1)-1U=(E1-1E2-1.....En-1)U。

  3.這個定理還給出了求解矩陣A-1的一種方法。

 

數值算法1.Gauss消去

 

用Gauss消去法將矩陣A行變換為U:

   

用Gauss消去矩陣將A行變換為U:

 

數值算法2.Gauss-jardon

    過程和Gauss-jardon基本一致,之不多在選擇完最大元之后,將其化為1,這樣就可以通過乘以一個倍數來消去其他行了。

選擇主元

   當對某一列進行Gauss消去時,一般都是選擇這一列中絕對值最大的一個元素作為主元,當然這會進行行交換。其好處有一下幾點:

1.在Gauss會代的過程中,不會出現除數為0的情況。

2.減少誤差傳播,這主要是因為乘數小於等於1.

  (為何乘數小於等於1,如果選擇這一列中絕對值最大的一個元素作為主元,我們假設這個元素是a,那么乘數等於-b/a,此時|b/a|<=1)。

 

為什么不用絕對值最小的元素做主元?易知此時乘數的絕對值大於等於1,會增加誤差的傳播累計。

為什么應該避免用接近於0的數做主元?此時乘數可能非常大,參加如下例子:

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM