高斯消元法的C 簡單實現

2022-08-21 17:21:15 字數 2353 閱讀 8097

高斯消元法

首先,我們匯入幾個概念。

定義1: 乙個矩陣稱為階梯形(行階梯形),若它有以下三個性質:

1.每一非零行在每一零行之上;

2.某一行的先導元素所在的列位於前一行先導元素的後面;

3.某一行先導元素所在列下方元素都是零。

比如,

定義2:若乙個階梯形矩陣還滿足以下性質,稱它為簡化階梯形(簡化行階梯形):

1.每一非零行的先導元素是1;

2.每一先導元素1是該元素所在列的惟一非零元素。

比如,

定理1:每個矩陣行等價於惟一的簡化階梯形矩陣。即簡化階梯形矩陣是惟一的。

下面,我們用乙個具體例子來說明高斯消元法的主要步驟。

原矩陣:

第一步,由最左的非零列開始,這是乙個主元列。主元位置在該列頂端。

第二步,在主元列中選取乙個非零元作為主元。若有必要的話,對換兩行使這個元素移到主元位置上。

第三步,用倍加行變換將主元下面的元素變成0.

第四步,暫時不管包含主元位置的行以及它上面的各行,對剩下的子矩陣使用上述的三個步驟直到沒有非零行需要處理為止。

對每一行重複上述步驟。

第五步,由最右面的主元開始,把每個主元上方的各元素變成0.若某個主元不是1,用倍乘變換將它變成1.

最後,我們就得到了原矩陣的簡化階梯形。

其中,第1~4步稱為行化簡演算法的向前步驟,產生唯一的簡化階梯形的第5步,稱為向後步驟。

c++實現

大概的實現思路就是先實現向前步驟:

首先,我們對於每一行找到第乙個不為零的元素,並且將這一行置為1 * * * *的形式,用這一行乘上倍數加到之後的每一行。

再實現向後步驟:

然後,我們從最後一行開始,選擇主元,加到之前的每一行上,使得該列的元素都為零。

最後,我們就完成了化簡,得到了簡化階梯形。

以上演算法只是乙個粗略實現,主要體現在:

1.對於主元的選定不夠最優;

2.會出現精度問題;

3.對於某些情況無法處理。

先暫時貼上**,之後有時間再進行優化。

1 #include 2 #include 3

4using

namespace

std;56

intmain()729

30if(martix[i][pos] != 1 && martix[i][pos] != 0)31

37}38for(int j = i + 1; j < n; j++)

3947}48

}4950//

向後步驟

51for(int i = n - 1; i > 0; i--)

5260

61if(martix[i][pos] != 1 && martix[i][pos] != 0)62

68}6970

for(int j = 0; j < i; j++)

7179}80

}8182//

輸出83

for(int i = 0; i < n; i++)

8489

return0;

90 }

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

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

高斯消元法

寒假前,小導師給我們布置了三道程式設計題,其中有一道是利用高斯消元法解線性方程組的。在網上搜了些資料,自己照葫蘆畫瓢編出乙個簡單的高斯消元法 利用矩陣的初等行變換 高斯消元法解線性方程組 include include include define dim 10 double a dim 1 dim...

高斯消元法

學過至少一元二次方程解法的同學們肯定知道,最常用的求根方法是加減消元法。所謂加減消元法,就是通過方程的等式性質,將某一未知數的係數同一化,再通過兩個等式的加減消去乙個元,從而將多元方程不斷降元,從而解出乙個未知數,不斷代回,從而求出所有根。此加減消元法就是高斯消元法。所以程式思路也盡可知。以下直接附...