高斯消元

高斯消元模板

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=201;
typedef  double Matrix[maxn][maxn];
void gauss(Matrix A,int n)             //消元过程 
{
	int i,j,k,r;
	for(i=0;i<n;i++)
	{
		r=i;
		for(j=i+1;j<n;j++)
		if(fabs(A[j][i])>fabs(A[r][i]))   r=j;
		if(r!=i)
		for(j=0;j<=n;j++)
		swap(A[r][j],A[i][j]);
		for(j=n;j>=i;j--)
		for(k=i+1;k<n;++k)
		A[k][j]-=A[k][i]/A[i][i]*A[i][j];
	}
	for(i=n-1;i>=0;i--)
	{
		for(j=i+1;j<n;j++)
		A[i][n]-=A[j][n]*A[i][j];
		A[i][n]/=A[i][i];
	}
}
Matrix A;
int main()
{
	int n;
	while(cin>>n)
	{
		for(int i=0;i<n;i++)
		for(int j=0;j<=n;j++)
		scanf("%lf",&A[i][j]);
		gauss(A,n);
		for(int i=0;i<n-1;i++)  //A[i][n]就是所求的解 
		printf("%lf ",A[i][n]);
		printf("%lf
",A[n-1][n]);
	}
	return 0;
}



原文地址:https://www.cnblogs.com/wolf940509/p/6617124.html