被學長教會的高斯消元法Gauss

2022-02-27 13:31:37 字數 1875 閱讀 2534

昨天學長教了我高斯消元法。

這裡用乙個栗子來模擬一下gauss的流程。

真的通俗易懂!

這裡是洛谷題目鏈結。

這就是例子

x-2y+3z=6

4x-5y+6z=12

7x-8y+10z=21

先將它轉化為矩陣

1 -236

4 -5612

7 -8

1021

解決這個方程組

我們會希望它變成如下形式

100

a010

b001 c

這樣就可以表示為$x=a$,$y=b$,$z=cx=a$,$y=b$,$z=c$,$x=a$,$y=b$,$z=c$

我們使用高斯消元,就要一步一步將每個未知數約去。

這種方法是以列為單位消去的

首先我們將第一列轉化為1 0 0的形式

在這裡要注意一下,我們往往是將這個係數絕對值最大的方程轉移到被減的這一行,這樣就可以減小誤差

所以我們先將矩陣變成這樣

7 -8

1021

4 -5612

1 -2

36

然後將正在處理的方程式化簡,讓正被處理的係數化1

1 -8/7

10/7

34 -5612

1 -2

36

然後使用加減法將第二個與第三個方程組的第乙個係數化0

1 -8/7

10/7

30 -3/7

2/70

0 -6/7

11/7

3

然後這時候第一列就被化簡完成

同理我們化去第二行與第三行,步驟如下:

1.化簡第二行

1 -8/7

10/730

1 -2/3

00 -6/7

11/7

3

2.用第一行減第二行×(-8/7),第三行減第二行×(-6/7)

1

02/330

1 -2/300

013

3.不需要化簡第三行,所以直接用第一行減去第三行×2/3,第二行減去第三行×(-2/3)

100

1010

2001

3

最後我們就得到了一組解x=1,y=2,y=3x=1,y=2,y=3x=1,y=2,y=3 。

所以高斯消元其實是運用了小學解方程組的加減法的訥。

**請見我的部落格

《從2023年暑假到現在手打的模板↑_↑》

之三十二。。

。。我還是老老實實地貼了上來:

//

guss

#include using

namespace

std;

intn;

double f[105][105

];const

double eps=1e-8

;int

main()

for (int j=i+1;j<=n;j++) f[i][j]/=f[i][i];//

係數化1

//自己那位不必要除 無影響

for (int j=0;j)

if (i!=j)

for (int k=i+1;k<=n;k++) f[j][k]-=f[j][i]*f[i][k];

//加減法去掉系數值

}

for (int i=0;i"

%.2lf\n

",f[i][n]);//

輸出return0;

}

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

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

高斯消元法

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

高斯消元法

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