高斯消元可以通過初等行列變化把 增廣矩陣 轉換成 階梯型矩陣,進而求解 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
列舉每一列 c:a11 a12 a13 .
.. a1n b1
a22 a23 .
.. a2n b2
...ann bn
① 找到列 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
則增廣矩陣為:
列舉第 1 列:12-
1-62
1-3-
9-1-127
① 找到第 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個未知數的多元線性方程組 解有三種情況 預備知識 線性代數矩陣的初等行變換,轉化成最短階梯形矩陣 高斯消元就是把乙個係數矩陣變換成上三角的形式 高斯消元涉及到的線代知識不多,秩之類的不涉及 只用最基礎的線代知識 無解的情況 不完美階梯...