AcWing算法基础课笔记——高斯消元

高斯消元

用来求解方程组
a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 … a n 1 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n a_{11} x_1 + a_{12} x_2 + \dots + a_{1n} x_n = b_1\\ a_{21} x_1 + a_{22} x_2 + \dots + a_{2n} x_n = b_2\\ \dots \\ a_{n1} x_1 + a_{n2} x_2 + \dots + a_{nn} x_n = b_n\\ a11x1+a12x2++a1nxn=b1a21x1+a22x2++a2nxn=b2an1x1+an2x2++annxn=bn
输入是 n × ( n − 1 ) n \times (n -1 ) n×(n1)的矩阵。

对方程组进行以下三种初等行列变换后,方程的解不变:

  1. 把某一行乘以一个非零的数
  2. 交换某2行
  3. 把某行的若干倍加到另一行上去

因此,对任意一个方程组,可以把它变成倒三角形式:
a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 22 x 2 + ⋯ + a 2 n x n = b 2 … a ( n − 1 ) ( n − 1 ) x n − 1 + a ( n − 1 ) n x n = b n − 1 a n n x n = b n a_{11}x_1 + a_{12}x_2+\dots +a_{1n}x_n = b_1 \\ a_{22}x_2 + \dots + a_{2n} x_n = b_2 \\ \dots \\ a_{(n-1)(n-1)}x_{n-1} +a_{(n-1)n}x_{n} = b_{n-1}\\ a_{nn}x_n = b_n a11x1+a12x2++a1nxn=b1a22x2++a2nxn=b2a(n1)(n1)xn1+a(n1)nxn=bn1annxn=bn
有三种情况:

  1. 完美阶梯型——唯一解
  2. 0 = 非零 ———无解
  3. 0 = 0 ——无穷多组解

高斯消元步骤:

枚举每一列c:

  1. 找到绝对值最大的一行
  2. 将该行换到最上面
  3. 将该行第一个数变成1
  4. 将下面所有行的第c列消成0

题目

详见:https://www.acwing.com/problem/content/description/885/

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

方程组中的系数为实数。

求解这个方程组。

下图为一个包含 m 个方程 n 个未知数的线性方程组示例:

在这里插入图片描述

输入格式

第一行包含整数 n。

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

输出格式

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

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

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

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

数据范围

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

输入样例:
3
1.00 2.00 -1.00 -6.00
2.00 1.00 -3.00 -9.00
-1.00 -1.00 2.00 7.00
输出样例:
1.00
-2.00
3.00

代码

#include<iostream>
#include<algorithm>
#include<cmath>using namespace std;const int N = 110;
const double eps = 1e-6;int n;
double a[N][N];int gauss() {int c, r;for(c = 0, r = 0; c < n; c ++ ) {// 找到绝对值最大的一行 t int t = r;for(int i = r; i < n; i ++ ) {if(fabs(a[i][c]) > fabs(a[t][c])) {t = i;}}if(fabs(a[t][c]) < eps) continue; //如果第t行为0,结束//将该行换到最上面 for(int i = c; i <= n; i ++ ) swap(a[t][i], a[r][i]);  //将该行的第c位设为1(前面都为0) for(int i = n; i >= c; i --) a[r][i] /= a[r][c];//将下面所有行的第c列消成0//也就是从r + 1行开始,对于第i行,第i行第c个位置a[i][c]如果不为0的话,就要消成0// a[i][c]消成0 : a[i][c] -= a[r][c] * a[i][c]     a[r][c]为1// 那么其他所有列: a[i][j] -= a[r][j] * a[i][c]for(int i = r + 1; i < n; i ++ ) {if(fabs(a[i][c]) > eps) {for(int j = n; j >= c; j -- ) {a[i][j] -= a[r][j] * a[i][c];}}}r ++; }if(r < n) {for(int i = r; i < n; i ++ ) {if(fabs(a[i][n]) > eps)return 2; //无解 }return 1; //有无穷多组解 }//求解唯一解 //从第n - 1 行开始往上,遍历每一行//对于第i行,它的解是a[i][n]的值 for(int i = n - 1; i >= 0; i -- ) {for(int j = i + 1; j < n; j ++ ) {a[i][n] -= a[i][j] * a[j][n];}}return 0; //有唯一解 } int main() {cin >> n;for(int i = 0; i < n; i ++ ) {for(int j = 0; j <= n; j ++ ) {cin >> a[i][j];}}int t = gauss();if(t == 0) {for(int i = 0; i < n; i ++ ) printf("%.2lf\n", a[i][n]);}else if (t == 1) puts("Infinite group solutions");else puts("No solution");return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文导读 | Manufacturing Service Operations Management近期文章精选

编者按 在本系列文章中&#xff0c;我们梳理了顶刊Manufacturing & Service Operations Management5月份发布有关OR/OM以及相关应用的文章之基本信息&#xff0c;旨在帮助读者快速洞察行业/学界最新动态。 推荐文章1 ● 题目&#xff1a;Robust Drone Delivery with Weath…

【C++题解】1712. 输出满足条件的整数2

问题&#xff1a;1712. 输出满足条件的整数2 类型&#xff1a;简单循环 题目描述&#xff1a; 有这样的三位数&#xff0c;其百位、十位、个位的数字之和为偶数&#xff0c;且百位大于十位&#xff0c;十位大于个位&#xff0c;请输出满所有满足条件的整数。 输入&#xff1…

#05搜索法

要点&#xff1a; ①搜索法&#xff1a;穷举搜索、深度优先搜索、广度优先搜索、广深结合搜索、回溯法、分支限界法&#xff1b; ②解空间树&#xff1a;子集树、排列树、满m叉树。 ③回溯法及分支限界法求解问题的方法与步骤。 难点&#xff1a; 子集树、排列树和满m叉树…

小程序下拉刷新,加载更多数据,移动端分页

文章目录 页面结构图WXML页面代码js代码wxss代码总结备注 参考&#xff1a;https://juejin.cn/post/7222855604406796346 页面结构图 一般页面就4个结构&#xff1a;最外滚动层、数据展示层、暂无数据层、没有更多数据层。 如图&#xff1a; WXML页面代码 <scroll-view …

Golang | Leetcode Golang题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; func hammingWeight(num uint32) (ones int) {for ; num > 0; num & num - 1 {ones}return }

# Kafka_深入探秘者(5):kafka 分区

Kafka_深入探秘者&#xff08;5&#xff09;&#xff1a;kafka 分区 一、kafka 副本机制 1、Kafka 可以将主题划分为多个分区(Partition)&#xff0c;会根据分区规则选择把消息存储到哪个分区中&#xff0c;只要如果分区规则设置的合理&#xff0c;那么所有的消息将会被均匀的…

Golang | Leetcode Golang题解之第198题打家劫舍

题目&#xff1a; 题解&#xff1a; func rob(nums []int) int {if len(nums) 0 {return 0}if len(nums) 1 {return nums[0]}first : nums[0]second : max(nums[0], nums[1])for i : 2; i < len(nums); i {first, second second, max(first nums[i], second)}return se…

openEuler离线安装nginx

目录 1.创建储存目录 2.切换到储存目录 3.首先在外网的环境下下载nginx的rpm包 4.目录打包tar包拷贝到离线路径 5.安装nginx 6.启动 nginx 7.停止 nginx 8.重新加载 nginx 配置 9.重新启动 nginx&#xff08;先停止再启动 nginx&#xff09; 10.检查 nginx 服务…

【分布式系统】Zookeeper学习笔记

基本概念 Zookeeper工作机制 从设计模式角度理解: 是一个基于观察者模式设计的分布式服务管理框架; 负责存储和管理大家都关心的数据, 一旦这些数据的状态发生变化, Zookeeper就将负责通知已经在Zookeeper上注册的那些观察值做出相应的反应. Zookeeper特点 Zookeeper有: 一…

EdgeOne 边缘函数 + Hono.js + Fauna 搭建个人博客

一、背景 虽然 “博客” 已经是很多很多年前流行的东西了&#xff0c;但是时至今日&#xff0c;仍然有一部分人在维护自己的博客站点&#xff0c;输出不少高质量的文章。 我使用过几种博客托管平台或静态博客生成框架&#xff0c;前段时间使用Hono.jsFauna &#xff0c;基于 …

RK3568平台开发系列讲解(I2C篇)利用逻辑分析仪进行I2C总线的全面分析

🚀返回专栏总目录 文章目录 1. 基础协议1.1. 协议简介1.2. 物理信号1.3. 总线连接沉淀、分享、成长,让自己和他人都能有所收获!😄 1. 基础协议 1.1. 协议简介 IIC-BUS(Inter-IntegratedCircuit Bus)最早是由PHilip半导体(现在被NXP收购)于1982年开发。 主要是用来方…

将深度相机的实时三维坐标数据保存为excel文档(Python+Pyrealsense2+YOLOv8)

一、如何将数据保存为excel文档 1.excel文件库与相关使用 &#xff08;1&#xff09;导入相应的excel文件库&#xff0c;导入前先要进行pip安装&#xff0c;pip install xlwt import xlwt # 导入用于创建和写入Excel文件的库 (2) 建立一个excel文档&#xff0c;并在第0行写…

RabbitMQ中Direct交换机的用法

前言&#xff1a;比如我们的支付完成之后需要进行修改支付状态还要完成短信通知用户需要同时并发两条指令我们可以使用direct交换机进行指定两个不同的业务去完成这两件事 比如我们现在有direct.queue1/direct.queue2两个消息队列&#xff0c;一个direct交换机 我们创建完成两…

鸿蒙开发之--生命周期

开发官网 开发-HarmonyOS开发者-华为开发者联盟 UIAbility生命周期 1、首先执行onCreate(),用于页面初始化和设置页面逻辑 2、执行onWindowStageCreate()创建一个窗口&#xff0c;在这里可以使windowStage.loadContent(url&#xff0c;&#xff08;&#xff09;>{})打开一…

“拿来主义”学习无限滚动动画(附源码)

欢迎关注&#xff1a;xssy5431 小拾岁月 参考链接&#xff1a;https://mp.weixin.qq.com/s/xVTCwR1ZSn5goWmc2yimVA 动画效果 需求分析 需求中涉及无线滚动&#xff0c;说明需要使用 animation 动画。另外&#xff0c;为了方便用户点击操作&#xff0c;需要给滚动对象添加鼠标…

感谢我的辅导员—敬爱的罗老师

前言&#xff1a;快毕业了&#xff0c;想在毕业季感谢给予我帮助的老师&#xff0c;我的辅导员-罗老师是我最想感谢的大学老师。我不知道应该以什么样的方式去表达罗老师对我大学阶段的帮助&#xff0c;如果是直接发邮件&#xff0c;微信信息留言&#xff0c;可能在之后我和老师…

MySQL索引优化解决方案--索引优化(4)

排序优化 尽量避免使用Using FileSort方式排序。order by语句使用索引最左前列或使用where子句与order by子句条件组合满足索引最左前列。where子句中如果出现索引范围查询会导致order by索引失效。 优化案例 联表查询优化 分组查询优化 慢查询日志

架构是怎样练成的-楼宇监控系统案例

目录 概要 项目背景 原系统设计方案 改进后的设计方案 小结 概要 绝大多数人掌握的架构都是直接学习&#xff0c;慢慢地才能体会到一个架构的好处。架构是一种抽象&#xff0c;是为了复用目的而对代码做的抽象。通过一个项目的改造&#xff0c;理解架构是如何产生的&…

Kubernetes Prometheus 系例 | kubernetes 部署 Kafka exporter监控Kafka集群

prometheus 监控 kafka 常见的有两种开源方案&#xff1b; 部署 exporter 或 jmx 配置监控。 项目地址&#xff1a; kafka_exporter&#xff1a;https://github.com/danielqsj/kafka_exporter jmx_exporter&#xff1a;https://github.com/prometheus/jmx_exporter 本文采用kaf…

【日常记录】【JS】优雅检测用户是否在指定元素的外部点击

文章目录 1、界面基本布局2、代码实现3、参考链接 1、界面基本布局 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…