分類: 高斯消元
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的個數 無解的話去...