栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

列主元Gauss消去法的C++实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

列主元Gauss消去法的C++实现

#include
#include
#include
using namespace std;

void print_func(float(*arr)[15], int n);
void exchange_func(float(*arr)[15], int n);
void sol_func(float(*arr)[15], int n);

int main()
{
	size_t n;
	float a[15][15];
	cout << "Please input the matrix Row: " << endl;
	cin >> n;
	for (auto i = 1; i <= n; i++)                                 //输入系数矩阵
	{
		cout << "Please input the " << i << " row value" << endl;
		for (auto j = 1; j <= n; j++)
			cin >> a[i][j];
	}
	cout << "请输入未知量:" << endl;
	for (auto i = 1; i <= n; i++)
	{
		cin >> a[i][n+1];
	}
	cout << "方程的增广矩阵是:" << endl;
	print_func(a, n);                                               //调用打印函数
	exchange_func(a, n);
	return 0;
}

void exchange_func(float(*arr)[15], int n)    //定义一个列主元消除的函数
{
	for (auto k = 1; k <= n-1; k++)
	{
		int row = 0;
		float max = 0;

		for (auto i = k; i <= n; i++)       //找到最大值所在的行,找到行数
		{
			if (fabs(arr[i][k] > max))
			{
				max = fabs(arr[i][k]);
				row = i;
			}
		}

		if (arr[row][k] == 0)
		{
			cout << "CANT'T CALCULAR!" << endl;
			return;
		}
		
		for (auto j = 1;j <= n + 1; j++)      //行交换
		{
			float temp = 0;
			temp = arr[row][j];
			arr[row][j] = arr[k][j];
			arr[k][j] = temp;
		}
		cout << "选列主元:" << endl;
		print_func(arr, n);

		for (auto i = k + 1; i <= n ; i++)
		{
			float d = arr[i][k] / arr[k][k];
			for (auto j = 1; j <= n + 1; j++)
			{
				arr[i][j] = arr[i][j] - d * arr[k][j];  //每一行元素行变换
			}
		}
		cout << "消元:" << endl;
		print_func(arr, n);
	}
	sol_func(arr, n);
}

void sol_func(float(*arr)[15], int n)            //求解函数
{
	float x[15] = {};
	for (auto i = n; i >= 1;i--)
	{
		float sum = 0;
		for (auto k = 1; k <= n; k++)
		{
            if(k!=i)
			sum += x[k] * arr[i][k];                //每一行的系数乘以对应的x[i]
		}
		x[i] = (arr[i][n + 1] - sum) / arr[i][i];   //求解x[i]
	}
	cout << "x solution is: " << endl;
	for (auto i = 1; i <= n;i++)
	{
		cout << x[i] << " ";
	}
	cout << 'n';
}

void print_func(float(*arr)[15], int n)	//定义一个打印函数
{
	for (auto i = 1;i <= n; i++)
	{
		for (auto j = 1; j <= n + 1;j++)
			cout << arr[i][j] << "t";
		cout << 'n';
	}
	cout << "----------------------" << endl;
}

运行结果如下

输入的系数矩阵为R、未知数矩阵为V

 程序运行结果最后一行为X1~X9的值

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号