高斯消元解線性方程組

2021-10-06 09:36:21 字數 3464 閱讀 5453

高斯消元可以通過初等行列變化把 增廣矩陣 轉換成 階梯型矩陣,進而求解 n 個線性方程組的解,其時間複雜為o(n^3)

初等行列變換:(對乙個方程組進行以下三個操作不會影響方程的解)

例如線性方程組為:

a11x1 + a12x2 + a13x3 + … + a1nxn = b1

a21x1 + a22x2 + a23x3 + … + a2nxn = b2

…an1x1 + an2x2 + an3x3 + … + annxn = bn

則增廣矩陣為:

a11  a12  a13 .

.. a1n b1

a21 a22 a23 .

.. a2n b2

...a21 a22 an3 .

.. ann bn

經過三種初等行列變換,上面的增廣矩陣就可以形成乙個階梯型矩陣:

a11  a12  a13 .

.. a1n b1

a22 a23 .

.. a2n b2

...ann bn

列舉每一列 c:

① 找到列 c 絕對值最大的一行

② 將該行換到最上面

③ 將該行第乙個數變成 1 (即第 c 列的數變成 1)

④ 將下面所有行第 c 列消成 0

每列舉一列,都能將一行換到最上面(絕對值最大為 0 除外),換到最上面說明當前這行已經固定了,所以,下次列舉某一列時,將絕對值最大的那一行換到最上面時(即②步驟),並不是換到第一行,而是換到沒有固定的行的最上面,同樣,步驟①也是在未固定的行中找絕對值最大的。

答案有三種解

如果經過以上步驟得到的是乙個完美階梯型矩陣(即得到n 個唯一方程,即每個方程不會被另乙個方程表示出來),說明有唯一解。

如果轉換後出現0==0的方程,說明這個方程可以被其他方程表示出來,說明有 多組解。(n元方程組要想有唯一解,需要有n個唯一的方程)

如果轉換後出現0==非0的方程,說明無解。

若方程組為:

x1 + 2x2 - x3 = -6

2x1 + x2 - 3x3 = -9

-x1 - x2 + 2x3 = 7

則增廣矩陣為:

12-

1-62

1-3-

9-1-127

列舉第 1 列:

① 找到第 1 列絕對值最大的一行

② 將該行換到最上面

③ 將該行第乙個數變成 1(即第 1 列)

注:橙色字型為已經固定的行

④ 將下面所有行第 1 列消成 0

列舉第 2 列:

① 找到第 2 列絕對值最大的一行

② 將該行換到最上面

該行其實已經在未固定行中的最上面了

③ 將該行第乙個數變成 1(即第 2 列)

④ 將下面所有行第 c 列消成 0

列舉第 3 列:

① 找到第 3 列絕對值最大的一行

② 將該行換到最上面

該行其實已經在未固定行中的最上面了

③ 將該行第乙個數變成 1 (即第 c 列的數變成 1)

④ 將下面所有行第 c 列消成 0

這一行已經是最後一行了,沒有下面的行了

列舉完所有列後,我們發現這個矩陣是完美階梯矩陣,說明是有唯一解的

確定有唯一解後,從最後一行開始向上回代,第三行直接可求出 x3 = 3,然後將 x3 回代到第二行,求出 x2 = -2,再將 x1、x2 回代到第一行,求出 x1 = 1。

綜上x1 = 1

x2 = -2

x3 = 3

acwing 883. 高斯消元解線性方程組

#include

#include

using

namespace std;

const

int n =

105;

const

double eps =

1e-6

;//如果 x < eps,就說明 x 是等於0的

int n;

double a[n]

[n];

intgauss()

if(r < n)

//說明剩下的方程數小於 n 個,需要判斷是 無解 還是 有多組解

//有唯一解,從下向上回代,依次求解

for(

int i=n-

1; i>=

0; i--

)//從下向上列舉每一行

for(

int j=i+

1; j

) a[i]

[n]-

= a[i]

[j]* a[j]

[n];

return0;

}int

main()

else

if(t ==1)

printf

("infinite group solutions\n");

//有多組解

else

printf

("no solution\n");

//無解

}

高斯消元解線性方程組

高斯消去法是消去法的一種特殊形式,它包括消元和回帶兩個過程。高斯消去法求解線性方程組分為以下兩大步 1 將係數矩陣a經過一系列的初等行變換程式設計右上三角矩陣,其常數向量b也同時做相應的變換,即 在變換過程中,採用原地工作,即經變換後的元素仍存放在原來的儲存單元中。為了實現上述目標,對於k從1到n ...

線性方程組(高斯消元)

acm模版 列主元gauss消去求解a x b 返回是否有唯一解,若有解在b中 define fabs x x 0 x x define eps 1e 10 const int maxn 100 int gausscpivot int n,double a maxn double b if fabs...

15 高斯消元解線性方程組

高斯消元可以在o n 3 的時間複雜度內,求解乙個包含n個方程和n個未知數的多元線性方程組 解有三種情況 預備知識 線性代數矩陣的初等行變換,轉化成最短階梯形矩陣 高斯消元就是把乙個係數矩陣變換成上三角的形式 高斯消元涉及到的線代知識不多,秩之類的不涉及 只用最基礎的線代知識 無解的情況 不完美階梯...