AcWing.883.高斯消元解线性方程组

输入一个包含 n 个方程 n 个未知数的线性方程组。

方程组中的系数为实数。

求解这个方程组。

下图为一个包含 m 个方程 n 个未知数的线性方程组示例:
在这里插入图片描述
输入格式
第一行包含整数 n n n

接下来 n n n 行,每行包含 n + 1 n+1 n+1 个实数,表示一个方程的 n n n 个系数以及等号右侧的常数。

输出格式
如果给定线性方程组存在唯一解,则输出共 n n n 行,其中第 i i i 行输出第 i i i 个未知数的解,结果保留两位小数。

注意:本题有 SPJ,当输出结果为 0.00 0.00 0.00 时,输出 − 0.00 -0.00 0.00 也会判对。在数学中,一般没有正零或负零的概念,所以严格来说应当输出 0.00 0.00 0.00,但是考虑到本题作为一道模板题,考察点并不在于此,在此处卡住大多同学的代码没有太大意义,故增加 SPJ,对输出 − 0.00 -0.00 0.00 的代码也予以判对。

如果给定线性方程组存在无数解,则输出 Infinite group solutions

如果给定线性方程组无解,则输出 No solution

数据范围
1 ≤ n ≤ 100 1≤n≤100 1n100,所有输入系数以及常数均保留两位小数,绝对值均不超过 100 100 100

输入样例:

1.00 2.00 -1.00 -6.00
2.00 1.00 -3.00 -9.00
-1.00 -1.00 2.00 7.00

输出样例:

-2.00
3.00

通过高斯消元,来使方程变为上三角形式,从而可以解得方程(大学线性代数)
如果消过之后,是完美的上三角形,那么会得到唯一解
如果中间出现 0 = 0 = 0= (非零)的方程,那么无解
如果中间出现 0 = 0 0 = 0 0=0 的方程,那么就有无穷多解

高斯消元的过程:
枚举每一列:
(1)每次枚举找到绝对值最大的一行
(2)将这一行换到最上面
(3)然后将这一行的第一个数变成1
(4)将下面所有行的当前列消成0。之后继续枚举,但是被换到最上面的那一行就不要动了,直至最后。

#include<iostream>
#include<cmath>
using namespace std;
const int N = 110;
const double eps = 1e-8;//浮点数存储有精度问题,小于一个很小的数就相当于等于0了

int n;
double a[N][N];	//存系数矩阵

int gauss() {
	int c, r;	//c:列,r:行

	for (c = 0, r = 0; c < n; c++) {	//枚举每一列
		int t = r;	//从这一行开始
		for (int i = r; i < n; i++)	//找到当前这一列绝对值最大的一行
			if (fabs(a[i][c]) > fabs(a[t][c]))//fabs():浮点绝对值
				t = i;

		if (fabs(a[t][c]) < eps)  continue;	//如果行绝对值的最大值都是0,那么直接跳
		//因为后续的操作就是为了把其化为0,如果已经为0,那么就不需要进行下面的操作了

		for (int i = c; i <= n; i++)swap(a[t][i], a[r][i]);//把绝对值最大的这行换到最上面

		//要倒着进行,不然第一个数(第c列)变成1,后面除的数都不对了
		for (int i = n; i >= c; i--) a[r][i] /= a[r][c];//把这一行的第一个数变成1(整个方程都需要同步除)

		for (int i = r + 1; i < n; i++) {		//把下面所有行的第一个数消成0
			if (fabs(a[i][c]) > eps) {			//如果不是0再进行操作
				for (int j = n; j >= c; j--)
					a[i][j] -= a[r][j] * a[i][c];//把整个方程减去变成1的那个方程的倍数	
			}
		}
		r++;//可操作的行减少一个
	}
	if (r < n) {	//如果处理过的行小于所有的行,则进行进一步判断
		for (int i = r; i < n; i++) {	//如果没有等于0的行,即(0 = (非零))
			if (fabs(a[i][n]) > eps)return 2;//就是无解
		}
		return 1;	//如果有0 = 0 那么有无穷多解
	}

	for (int i = n - 1; i >= 0; i--)		//从下往上,一步步的把下面x的解往上面带
		for (int j = i + 1; j < n; j++)		//从而求解出所有的x的解
			a[i][n] -= a[i][j] * a[j][n];	//减的就是上几行的x的解,因为是上三角形状
	//减完之后等号右面的值就是这一行的x的解

	return 0;//唯一解
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n;

	for (int i = 0; i < n; i++) {	//读入
		for (int j = 0; j < n + 1; j++) {	//因为还有得数,所以到n+1
			cin >> a[i][j];
		}
	}

	int t = gauss();

	//用0表示唯一解,1表示无穷解,2表示无解
	if (t == 0) {
		for (int i = 0; i < n; i++) printf("%.2lf\n", a[i][n]);//到最后,矩阵最右面的系数已经是各个x的值了
	}
	else if (t == 1) puts("Infinite group solutions");
	else puts("No solution");

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/360996.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

01背包问题 动态规划

01背包问题 动态规划 01背包问题 动态规划写了点代码 C#实现程序运行结果代码和程序已经上传 01背包问题 动态规划 很有意思的问题。 写了点代码 C#实现 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Ta…

二进制漏洞挖掘之ret2text栈溢出

栈溢出产生的主要原因是对一些边界未进行严格检查&#xff0c;攻击者可以通过覆盖函数的返回地址执行任意代码。栈溢出漏洞主要的利用方式是ROP&#xff08;Return Oriented Programming&#xff0c;返回导向编程&#xff09;&#xff0c;通过覆盖返回地址&#xff0c;使程序跳…

【01】Linux 基本操作指令

带⭐的为重要指令 &#x1f308; 01、ls 展示当前目录下所有文件&#x1f308; 02、pwd 显示用户当前所在路径&#x1f308; 03、cd 进入指定目录&#x1f308; 04、touch 新建文件&#x1f308; 05、tree 以树形结构展示所有文件⭐ 06、mkdir 新建目录⭐ 07、rmdir 删除目录⭐…

C++进阶(八)红黑树

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、红黑树的概念二、红黑树的性质三、红黑树结构四、红黑树的插入操作1、情况一2、情况二3、…

vue3开发,axios发送请求是携带params参数的避坑

vue3开发,axios发送请求是携带params参数的避坑&#xff01;今天一直报错&#xff0c;点击新增购物车&#xff0c;报错&#xff0c; 【Uncaught (in promise) TypeError: target must be an object】。查询了网上的资料说的都不对。都没有解决。最终还是被我整明白了。 网上网…

力扣之2621.睡眠函数

/*** param {number} millis* return {Promise}*/ async function sleep(millis) {return new Promise(resolve > setTimeout(resolve, millis)); }/** * let t Date.now()* sleep(100).then(() > console.log(Date.now() - t)) // 100*/ 这样的异步休眠功能在实际应用…

页面通过Vue进行整体页面不同语言切换 i18n库

目录 引入 如何做到 下载i18n库 构建整体翻译文件结构 语言包文件 i18n配置文件 把i18n挂载到vue实例上 添加按钮点击事件切换语言 引入 我们现在有这样一个要求,我们想要对我们开发的网页进行国际化操作,也就是我们不仅要有中文,还要有英文等。用户可以随时进行不同语言…

DB之家:数据库开发工程师的衣柜(云原生时代数据库性能优化点子集合)

基础数据结构 布隆过滤器&#xff1a; modular bloom filter 减少布隆过滤器所需要的内存。参考文献&#xff1a;Mun, J. H., Zhu, Z., Raman, A., & Athanassoulis, M. (n.d.). LSM-Trees Under (Memory) Pressure. 基础算法 字符串压缩 FSST算法 利用向量化计算加…

多线程代码案例之单例模式

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构&#xff0c;javaee等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 多线程代码案例之单例模式 单例…

【Node-RED】node-red-contrib-opcua-server模块使用(3)

【Node-RED】node-red-contrib-opcua-server模块使用&#xff08;3&#xff09; 前言node-red-contrib-iiot-opcuanode-red-contrib-lativnode-red-contrib-nupmes 前言 在前面博文【Node-RED】node-red-contrib-opcua-server模块使用&#xff08;1&#xff09;我们有提及过&a…

ICMPv6报文解析及NAT处理

ICMPv6报文概述 参考RFC4443和RFC2460 ICMPv6报文是IPv6在internal control management protocol&#xff08;ICMP&#xff09;的基础之上做了一些改动&#xff0c;得到了ICMPv6协议&#xff0c;IPv6的next_header为58。 Message general format 每条ICMPv6消息之前都有一个…

lombok导致的IndexOutOfBoundsException

一、问题描述 ERROR 25152 --- [1.190-81-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSyste…

MacBook安装虚拟机VMware Fusion

MacBook安装虚拟机VMware Fusion 官方下载地址: https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_computing/vmware_fusion/11_0 介绍 之前的版本都要收费,现在出了对个人免费的版本, 棋哥给的破解版的版本是8,升级系统后用不了了. 官方去下载…

thinkadmin操作栏审核通过(操作确认),审核驳回(录入信息)

录入信息页面 {extend name="../../admin/view/main"}{block name=content} <style>textarea {font-size: 16px;padding: 10px;border: 1px solid #ccc;

EtherNET主站转Profinet网关实现EtherNET协议和Profinet协议相互转换

北京兴达易控EtherNET主站转Profinet网关是一种能将EtherNET协议和Profinet协议相互转换的设备&#xff0c;将网络通信技术与工业自动化技术完美结合。它不仅简化了通信的复杂度&#xff0c;而且提高了系统的可靠性和稳定性。 作为一个EtherNET主站转Profinet网关&#xff0c;它…

Python实现avif图片转jpg格式并识别图片中的文字

文章目录 一、图片识别文字1、导包2、代码实现3、运行效果 二、avif格式图片转jpg格式1、导包2、代码实现3、运行效果4、注意事项 三、Python实现avif图片转jpg格式并识别文字全部代码 在做数据分析的时候有些数据是从图片上去获取的&#xff0c;这就需要去识别图片上的文字。P…

软考(高级)在犹豫是否需要报班,不知大家有什么建议?

据我观察&#xff0c;软考是一门可以通过自学掌握的考试&#xff0c;并不争议。然而&#xff0c;尽管如此&#xff0c;我还是不建议大部分同学选择自学&#xff0c;因为相比报班而言&#xff0c;自学的成本反而较高。软考的难度并不低&#xff0c;往年的总体通过率仅为20%&…

IP关联是什么?有什么后果?如何防止电商账号因IP关联被封?

在跨境电商的世界里&#xff0c;IP关联给多账号运营的商家带来了挑战。比如&#xff0c;亚马逊IP关联规则的执行对于那些经营多个店铺的卖家来说可能是一个不小的障碍。IP关联的影响不只是限于亚马逊&#xff0c;其他平台如Instagram、Facebook也有类似的机制&#xff0c;在之前…

oracle数仓rac两个节点查询耗时不一致问题处理

问题描述 数据库节点1查询比节点2查询慢。现场操作应用发现发现同一sql语句在节点2上只要2分钟左右&#xff0c;在节点1&#xff0c;该条sql执行要超过30分钟。 处理过程 根据问题&#xff0c;初步判断是由于错误的执行计划&#xff0c;导致性能问题&#xff0c;但实际上对两…

海外代理IP推荐:5大最佳Luminati替代方案

在跨境出海业务中&#xff0c;海外代理IP是非常高效的助力工具&#xff0c;因此也衍生了非常多的代理服务商。想必大多数都知道Brightdata&#xff08;原名Luminati&#xff09;&#xff0c;但是&#xff0c;由于代理IP的高需求&#xff0c;慢慢地我们发现除了高价的卢米&#…