高斯列主消元詳解及模板

2021-06-21 10:41:11 字數 1803 閱讀 9656

分類: 高斯消元

2013-08-29 19:28

213人閱讀收藏 

舉報高斯消元

採用高斯先列主元消元法求解線性方程組ax=b

方法說明(以4階為例):

(1)第1步消元——在增廣矩陣(a,b)第一列中找到絕對值最大的元素,將其所在行與第一行交換,再對(a,b)

做初等行變換使原方程組轉化為如下形式:

注:「*」代表非0。

[cpp]view plain

copy

*x1+*x2+*x3+*x4=y1;  

0 +*x2+*x3+*x4=y2;  

0 +*x2+*x3+*x4=y3;  

0 +*x2+*x3+*x4=y4;  

(2)第2步消元——在增廣矩陣(a,b)中的第二列中(從第二行開始)找到絕對值最大的元素,將其所在行與第二行

交換,再對(a,b)做初等行變換使原方程組轉化為:

[cpp]view plain

copy

*x1+*x2+*x3+*x4=y1;  

0 +*x2+*x3+*x4=y2;  

0 + 0 +*x3+*x4=y3;  

0 + 0 +*x3+*x4=y4;  

(3)第3步消元——在增廣矩陣(a,b)中的第三列中(從第三行開始)找到絕對值最大的元素,將其所在行與第二行

交換,再對(a,b)做初等行變換使原方程組轉化為:

[cpp]view plain

copy

*x1+*x2+*x3+*x4=y1;  

0 +*x2+*x3+*x4=y2;  

0 + 0 +*x3+*x4=y3;  

0 + 0 + 0 +*x4=y4;  

(4)按x4 ; x3; ; x1 的順序回代求解出方程組的解

再回代求解即可。

下面是高斯消元模板:

[cpp]view plain

copy

#include

#include

#include

#include

#include

#define eps 0.0000001

using

namespace

std;  

double

x[102];  

double

g[102][102];  

intflag;  

void

gauss(

intn,

intm)  

if(fabs(g[row][col])//主元是0

for(i=row+1; i<=n; i++)  

//主元不是0把下面的行第乙個值全部變為0

}  if(fabs(g[n][n])

for(i=n;i>=1;i--)  

//回代求解

}  intmain()  

cout<<"方程組的解為:"

<

for(i=1;i<=n;i++)  

cout<<"x"

<":   "

<

}  return

0;  

}  /*

2 32 3 5

1 4 6

2 32 3 5

0 0 6

2 32 3 5

0 4 6*/

這一路走來

來自楊宗緯

列主元的高斯消元法(FORTRAN)

program guass1 real,dimension allocatable arr real,dimension allocatable x real a integer i,j,k,n 輸入 輸出數列 write 請輸入需要計算的係數矩陣的大小n read n allocate arr n...

高斯消元模板

include include include include include include include include typedef long long ll const int n 1008 高斯消元模板 const double eps 1e 12 double aug n n 增廣矩...

高斯消元模板

用迭代的辦法打會簡潔一些。有些精度上的細節需要注意。多次消元要清空use和cho陣列。實數高斯消元 int use maxn cho maxn void solve equation int n,int m break fd i,n,1 if cho i 自由元的個數就是cho為0的個數 無解的話去...