高斯消元

痞子三分冷 提交于 2019-12-02 09:20:52

简介

高斯消元,一般用于求解nn元一次方程组.
求解方法也很简单.

解法

其实就是暴力的求解.
nn元一次方程组的系数可以写成一个矩阵的形式,而我们的目标就是将矩阵的每一行都消的只剩下一个数.
其实剩下的看代码里面的注释就好了.

因为实在是太简单了


#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

const int N = 1e2 + 5;

int n,flag;
int v[N];
double a[N][N],ans[N];

int main()
{
	scanf("%d",&n);
	for (int i = 1 ; i <= n ; i++) 
		for (int j = 1 ; j <= n + 1 ; j++) scanf("%lf",&a[i][j]);
	for (int i = 1 ; i <= n ; i++)
	{
		double x = 0;
		int p = 0;
		for (int j = 1 ; j <= n ; j++) if (fabs(a[i][j]) > x) x = fabs(a[i][j]),p = j; //找主元
		if (!p) 
		{
			printf("No Solution\n");
			return 0;
		} //若不足n个元则无解
		v[i] = p;
		for (int j = 1 ; j <= n ; j++) 
			if (i != j) 
			{
				double t = a[j][p] / a[i][p];
				for (int k = 1 ; k <= n + 1 ; k++) a[j][k] -= a[i][k] * t; //消去主元
			}
	}
	for (int i = 1 ; i <= n ; i++) ans[v[i]] = a[i][n + 1] / a[i][v[i]]; //求解
	for (int i = 1 ; i <= n ; i++) printf("%.2lf\n",ans[i]);
	return 0; 
}




标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!