矩阵 求解线性方程组

#include<iostream>
#include<math.h>
using namespace std;
double a[100][100];
int n;

void gaosi()
{
	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=i;
		for(j=i;j<=n;j++)
		{
			double w;
			w=a[i][j];a[i][j]=a[r][j];a[r][j]=w;
		}
		for(j=i+1;j<=n;j++)
		{
			double f;
			f=a[j][i]/a[i][i];
			for(k=i;k<=n;k++)
				a[j][k]-=f*a[i][k];
		}
	}
	for(i=n-1;i>=0;i--)
	{
		for(k=i+1;k<n;k++)
			a[i][n]-=(a[i][k]*a[k][n]);
		a[i][n]/=a[i][i];
	}
}

int main()
{
	int i,j,k;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			scanf("%lf",&a[i][j]);
		for(i=0;i<n;i++)
			scanf("%lf",&a[i][n]);
	gaosi();
	for(i=0;i<n;i++)
		printf("x%d:  %g\n  ",i+1,a[i][n]);
	return 0;
}

这段代码求的是  线性方程组   比如说

2x+y-z=8

-3x-y+2z=-11

-2x+y+2z=3

求 x y z   

  先输入有多少个未知数n   再有n行 输入每个未知数前的系数  系数为0 的 就输入0

 最后一行输入 每个方程的 最右边是常数 

 

实际上就是 不断的加减消元。。

 

posted @ 2013-05-30 20:26  galaxy77  阅读(758)  评论(0编辑  收藏  举报