高斯-約當(Gauss-Jordan)消元法

 

選主元的高斯-約當(Gauss-Jordan)消元法在很多地方都會用到,例如求一個矩陣的逆矩陣、解線性方程組(插一句:LM算法求解的一個步驟),等等。它的速度不是最快的,但是它非常穩定來自網上的定義:一個計算方法,如果在使用此方法的計算過程中,舍入誤差得到控制,對計算結果影響較小,稱此方法爲數值穩定的,同時它的求解過程也比較清晰明瞭,因而人們使用較多。下面我就用一個例子來告訴你Gauss-Jordan法的求解過程吧。順便再提及一些注意事項以及擴展話題。

對本文中所提到的“主元”等概念的解釋,可以參考此鏈接

假設有如下的方程組:


寫成矩陣形式就是:AX=B,其中:


且X=(X1, X2, X3)T

文章來源:http://www.codelast.com/

現對矩陣A作初等變換,同時矩陣B也作同樣的初等變換,則當A化爲單位矩陣的時候,有:


顯而易見,我們得到了方程組的解X=(1, 2, 4)T

所以,我們要以一定的策略,對A和B施以一系列的初等變換,當A化爲單位矩陣的時候,B就爲方程組的解。

選主元的G-J消元法通過這樣的方法來進行初等變換:在每一個循環過程中,先尋找到主元,並將主元通過行變換(無需列變換)移動到矩陣的主對角線上,然後將主元所在的行內的所有元素除以主元,使得主元化爲1;然後觀察主元所在的列上的其他元素,將它們所在的行減去主元所在的行乘以一定的倍數,使得主元所在的列內、除主元外的其他元素化爲0,這樣就使得主元所在的列化爲了單位矩陣的形式。這就是一個循環內做的工作。然後,在第二輪循環的過程中,不考慮上一輪計算過程中主元所在的行和列內的元素,在剩下的矩陣範圍內尋找主元,然後(如果其不在主對角線上的話)將其移動到主對角線上,並再次進行列的處理,將列化爲單位矩陣的形式。餘下的步驟依此類推。具體的計算過程的一個例子,請看下面我舉的求逆矩陣的過程。

如果要解係數矩陣相同、右端向量不同的N個方程組,在設計程序的時候,沒有必要”解N次方程組“,我們完全可以在程序中,將所有的右端向量以矩陣的數據結構(類似於二維數組)來表示,在係數矩陣作行變換的時候,矩陣裏的每一個右端向量也做同樣的變換,這樣,我們在一次求解運算的過程中,實際上就是同時在解N個方程組了,這是要注意的地方。

文章來源:http://www.codelast.com/

那麼,G-J法爲什麼可以用來求逆矩陣?

假設AX=E,其中,A爲n階係數矩陣(與上面的解線性方程組對照);E爲單位矩陣,即E=(e1,e2,…,en),其中e(i=1,2,…,n) 爲單位列向量;X爲n個列向量構成的矩陣,即X=(x1,x2,…,xn),其中x(i=1,2,…,n) 爲列向量。於是,可以把等式AX=E看成是求解n個線性方程組Axi=ei (i=1,2,…,n),求出了所有的xi之後,也即得到了矩陣X。而由AX=E可知,矩陣X是A的逆矩陣,即X=A-1。這樣,就求出了A的逆矩陣了。於是,求逆矩陣的過程被化成了解線性方程組的過程,因此我們可以用Gauss-Jordan消元法來求逆矩陣。

求逆矩陣時,係數矩陣A和單位矩陣E可以共用一塊存儲區,在每一次約化過程中,係數矩陣逐漸被其逆矩陣替代。

 

在這裏,我用一個實際的例子來說明G-J法求逆矩陣的過程:

有如下的方程組:


顯而易見,該方程組對應的係數矩陣A和右端向量矩陣B(此處只有一個右端向量)分別爲:


其實在求逆矩陣的過程中,矩陣B無關緊要,可以忽略,不過此處還是把它寫出來了。下面,把單位矩陣E附在A的右邊,構成另一個矩陣(A|E):


文章來源:http://www.codelast.com/

下面,我們就通過矩陣的初等變換,將A化爲單位矩陣E,而E則化爲了A的逆矩陣。以下是轉化步驟:

  • 【Step 01】主元選爲3,所以將Row1(第一行)與Row2(第二行)交換:


  • 【Step 02】主元所在行的所有元素除以主元:


  • 【Step 03】Row1 - Row2,Row3 - 2 × Row2:


現在,原來的矩陣A有一列被化爲了單位陣的形式。

  • 【Step 04】重新選主元,這一次主元選爲5/3,於是Row1 ÷ 5/3(主元所在行的所有元素除以主元):


  • 【Step 05】Row2 - (1/3) × Row1,Row3 - (4/3) × Row1:


現在,原來的矩陣A又有一列被化爲了單位陣的形式。

  • 【Step 06】重新選主元,這一次主元選爲-1/5,於是Row3 ÷ (-1/5)(主元所在行的所有元素除以主元):


  • 【Step 07】Row1 - (2/5) × Row3,Row2 - (1/5) × Row3:


現在,原來的矩陣A的所有列都被化爲了單位陣的形式。

可見,以上過程非常適合於計算機編程求解。

文章來源:http://www.codelast.com/

至此,我們完成了從A到E的轉換,這個過程中使用了選主元的方法,但沒有使用列交換。於是,原來的單位矩陣E就變成了A-1,即:


有人說,在進行轉化的過程中,如果某一步發現選中的主元爲0,怎麼辦?當然,這種情況就進行不下去了(矩陣是奇異的)。


來源:http://www.codelast.com/?p=1288

發佈了158 篇原創文章 · 獲贊 75 · 訪問量 50萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章