高斯消元法 Gauss

2021-10-04 05:18:55 字數 2514 閱讀 7623

高斯消元法可以求線性方程組。本質上是暴力模擬手算的過程。

3 x+2 y+z=10 \\ 5 x+y+6 z=25 \\ 2 x+3 y+4 z=20 \end\right.

⎩⎨⎧​3x

+2y+

z=10

5x+y

+6z=

252x

+3y+

4z=2

0​手算的過程為第乙個與第二個方程抵消,第二個與第三個抵消。得到乙個元二次方程組在經過類似步驟得到解。其中運用了三個小學性質

兩個方程互換解不變。

乙個方程乘以非零數解不變。

一方程加上另乙個方程,解不變。

至於高斯消元法,先將 n

nn 元一次方程寫成 n×(

n+1)

n \times (n + 1)

n×(n+1

) 的矩陣,可以任意交換它的行和左邊 n

nn 列,也將一行加到另一行,將一行乘上非零數。

\left\ 3 & 2 & 1 & 10 \\ 5 & 1 & 6 & 25 \\ 2 & 3 & 4 & 20 \end\right\}

⎩⎨⎧​35

2​21

3​16

4​10

2520

​⎭⎬⎫

​高斯消元法將矩陣消成前 n

nn 列對角線上元素為 1

11 其它為 0

00 的單位矩陣。第 n+1

n + 1

n+1 列為方程的解。

\left\ 1 & 0 & 0 & 1 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & 3 \end\right\}

⎩⎨⎧​10

0​01

0​00

1​12

3​⎭⎬

⎫​x = 1 \\ y = 2 \\ z = 3 \end\right.

⎩⎨⎧​x=

1y=2

z=3​

從方程的意義上,乙個未知數的係數至少有乙個不為 0

00,那麼矩陣上為一列中至少乙個元素不為 0

00 否則方程無解,所以先判斷無解,並將每一列的非零數所在的行移動到對角線上。

for

(int i =

1; i <= n; i++

)for

(int j =

1; j <= n +

1; j++

)swap

(a[i]

[j], a[p]

[j])

;}

因為要讓對角線全為 1

11 所以對每一行除上乙個數,讓這一行對角線位的元素為 1

11。這樣會出現小數,所以陣列的型別是double

double x = a[i]

[i];

//a[i][i] 會被更新所以用變數儲存

for(

int j =

1; j <= n +

1; j++

) a[i]

[j]/

= x;

再將前 n

nn 列其它的元素搞成 0

00。ai,

ia_

ai,i

​ 的係數消成了 1

11 要好好利用,將其它行的第 i

ii 個未知數通過 ai,

ja_

ai,j

​ 消到 000。

#include

using

namespace std;

const

int n =

300, inf =

0x3f3f3f3f

;inline

intread()

double a[n]

[n];

intmain()

for(

int j =

1; j <= n +

1; j++

)swap

(a[i]

[j], a[p]

[j])

;double x = a[i]

[i];

for(

int j =

1; j <= n +

1; j++

) a[i]

[j]/

= x;

for(

int j =

1; j <= n; j++)if

(i != j)

}for

(int i =

1; i <= n; i++

)printf

("%.2lf\n"

, a[i]

[n +1]

);return0;

}

可以發現高斯消元法有點暴力的成分,時間複雜度為 o(n

3)

o(n^3)

o(n3)。

模板題 gym 100644h 配平化學方程式 cf113d museum。

Gauss 高斯消元

ans 直接用初中的解方程組的方法呀!沒錯,直接暴力加減消元。那什麼是 高斯消元 說白了,就是普通的加減消元罷了。本人再考場上打了乙個暴力解方程,大家都說要高斯消元,弄得我方極了,最後才發現我打的暴力就是高斯消元 選其中乙個方程 將其他方程的其中乙個元與選出的方程統一係數 將選出的方程與其他方程相減...

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

昨天學長教了我高斯消元法。這裡用乙個栗子來模擬一下gauss的流程。真的通俗易懂!這裡是洛谷題目鏈結。這就是例子 x 2y 3z 6 4x 5y 6z 12 7x 8y 10z 21 先將它轉化為矩陣 1 236 4 5612 7 8 1021 解決這個方程組 我們會希望它變成如下形式 100 a0...

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

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