高斯消元原理

2021-07-16 17:05:37 字數 2719 閱讀 9670

高消一直是acm中高層次經常用到的演算法,雖然線性代數已經學過,但高消求解的問題模型及高消模板的應用變化是高消的最複雜之處。

先介紹一下高消的基本原理:引入網際網路czyuan的帖子:

高斯消元法,是線性代數中的乙個演算法,可用來求解線性方程組,並可以求出矩陣的秩,以及求出可逆方陣的逆矩陣。

高斯消元法的原理是:

若用初等行變換將增廣矩陣 化為 ,則ax = b與cx = d是同解方程組。

所以我們可以用初等行變換把增廣矩陣轉換為行階梯陣,然後回代求出方程的解。

以上是線性代數課的回顧,下面來說說高斯消元法在程式設計中的應用。

首先,先介紹程式中高斯消元法的步驟:

(我們設方程組中方程的個數為equ,變元的個數為var,注意:一般情況下是n個方程,n個變元,但是有些題目就故意讓方程數與變元數不同)

1. 把方程組轉換成增廣矩陣。

2. 利用初等行變換來把增廣矩陣轉換成行階梯陣。

列舉k從0到equ – 1,當前處理的列為col(初始為0) ,每次找第k行以下(包括第k行),col列中元素絕對值最大的列與第k行交換。如果col列中的元素全為0,那麼則處理col + 1列,k不變。

3. 轉換為行階梯陣,判斷解的情況。

① 無解

當方程中出現(0, 0, …, 0, a)的形式,且a != 0時,說明是無解的。

② 唯一解

條件是k = equ,即行階梯陣形成了嚴格的上三角陣。利用回代逐一求出解集。

③ 無窮解。

條件是k 

< equ,即不能形成嚴格的上三角形,自由變元的個數即為equ – k,但有些題目要求判斷哪些變元是不缺定的。

這裡單獨介紹下這種解法:

首先,自由變元有var - k個,即不確定的變元至少有var - k個。我們先把所有的變元視為不確定的。在每個方程中判斷不確定變元的個數,如果大於1個,則該方程無法求解。如果只有1個變元,那麼該變元即可求出,即為確定變元。

以上介紹的是求解整數線性方程組的求法,複雜度是o(n3)。浮點數線性方程組的求法類似,但是要在判斷是否為0時,加入eps,以消除精度問題。

以上czyuan帖子的基本原理就介紹完了。

--------------------------我對上面的步驟做一下說明

-------------------------------------------

高斯消元求解的詳細步驟:

1) 不用說了,對增廣矩陣先消元,化為行階梯矩陣。

很多人認為這就行了,但有時存在如下情況:

1 2 

3 4 30 

1 2 3 3

0 0 

0 1 20 

0 0 0 0

消元後的矩陣化為行階梯,上面主對角線元素的主元並沒有連續,還應將第4

列和第3

列交換才行。

這是網路上很多的模板所沒有的,也是造成關鍵時候出錯的根源所在。

所以模板還要增加對列進行檢查的**。

2) 消元完成後,判斷是否有解,分三種,無解,有1

個解和有無窮多解。

3) 對於有唯一解和有無窮多解的時候,都要回帶。

啥是回帶? 詳細說明之。

1 2 

3 4 

3 1 

2 4 3 3

0 1 

2 3 

3 0 

1 3 2 3

0 0 

0 1 

2--------》 

0 0 

1 0 

2 ------

》消元後的矩陣

------

發現有無窮解 0 

0 0 

0 0 

0 0 

0 0 

0(行階梯) 

(交換列)

因為4個變數,才3行,

4-3=1> 0 

,有無窮多解啊。

如果第4

行不都是

0,回帶可以求出這個唯一解。如下:

x1 x2 x3 

x4 b1

0 x2 

x3 x4 

b20 

0 x3 

x4 b3

0 0 

0 x4 

b4最後1

行,有x4=b4; 第3

行: x4+x3=b3,

已經求出

x4=b4

了,帶入第

3行,可求出

x3;同理,把

x4 x3 

帶入第2

行,還可求出

x2;把

x4 x3 

x2 帶入到第

1行,可求出

x1;

這就是回帶。

回帶總結:從最後1

行,逐一往回帶,從最後

1行代回到第1行。

最關鍵的時候到了:當無窮多解時,最後幾行都是0

;沒法回帶;而某些題目在無窮多解時還要你求最小或最優解,沒辦法,就得列舉最後行為

0的那幾個解; 如:

1 2 4 3 3

0 1 

3 2 30 

0 1 

0 2  0 

0 0 0 0

可見最後的x4

沒法解,如果題中給定

x4的範圍,那就列舉

x4,然後回帶;列舉1次

x4就回帶

1次得到一組(

x1 x2 

x3 x4 );

然後根據題意找最優的,具體題目具體分析。

高斯消元法(二) 高斯消元法原理

高斯消去法是一種常用的求解線性方程組的方法,通過逐次消元後,在回代求解,實際計算中常用的一種方法。順序消去法 將ax b按照從上至下 從左至右的順序化為上三角方程組,中間過程不對矩陣進行交換,主要步驟如下。step1 將第2行至第n行,每行分別與第一行做運算,消掉每行第乙個引數。公式如 形成如下圖所...

高斯消元 浮點高斯消元

浮點數高斯消元 問題描述 給出乙個線性方程組,有n個方程組,m個未知數。解這個線性方程組。輸入格式 第1行 2個整數n和m,n,m 400,且n不一定等於m 接下來n行,每行m 1個整數,表示乙個方程的m個未知數的係數和常數 輸出格式 如果無解,輸出 no solution 如果有唯一解,輸出m行,...

矩陣消元 高斯消元

安利一波高斯消元的部落格,內容很詳細。看完這個相信你已經理解了大概,高斯消元求線性方程組,在學習線性代數 大學課程 的時候我們都接觸過。原理是先把執行緒組轉換成矩陣,然後把它等價變換成上三角矩陣,這樣從下到上依次可以求出解集。高斯消元模板 模板題 include define n 205 using...