题目连接

https://www.acwing.com/problem/content/885/

思路

高斯消元的思路如下:

  • 1.我们从上到下,从左到右开始消元,对于每一行我们只保留当前[i,i]行的值为1,这样就是一个阶梯型的
  • 2.由于是从上往下的,所以我们每一次开始消元的时候先选取绝对值最大的当前这一列的值的位置,然后将这一行与我们处理到的最上面的一行进行数据交换
  • 3.将我们当前处理的第r行的第c列系数变为1方便后面消元,对于这一步我们用的是初等变换中的等式两边同时乘上一个数
  • 4.我们将当前第r行下面的所有第c列的系数全部消为0,对于这一步我们用的是初等变换中的方程相加减
  • 5.最后如果有唯一解的话,那我们从下往上开始递推每一个方程的解决,由于最下面的方程我们是可以直接的到方程的解的,所以我们从下往上不断地消除后面解的影响

注:
1.为什么每次要去绝对值最大的数,因为我们不想取到接近0的数,因为这样会影响到我们构造阶梯型矩阵
2.高斯消元思路不难,但是实现起来可能稍不注意就写错了,可以通过写一个输出函数,每次输出当前消元的情况这样更好debug

代码

#include<bits/stdc++.h>
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3f
const double EPS = 1e-8;int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};ll ksm(ll a,ll b) {ll ans = 1;for(;b;b>>=1LL) {if(b & 1) ans = ans * a % mod;a = a * a % mod;}return ans;
}ll lowbit(ll x){return -x & x;}const int N = 1e2+10;
//----------------自定义部分----------------
int t,n,m,q;
double a[N][N];void out(){for(int i = 0;i < n; ++i){for(int j = 0;j <= n; ++j){printf("%.2lf ",a[i][j]);}puts("");}puts("");
}int guss(){int c,r;for(c=0,r=0; c < n; ++c){int t = r;for(int j = r + 1;j < n; ++j) if(fabs(a[j][c]) > fabs(a[t][c])) t = j;if(fabs(a[t][c]) < EPS) continue;//当前已经被消元过了for(int i = c; i <= n; ++i) swap(a[t][i],a[r][i]);//将绝对值最大的这一行与最上面的交换for(int i = n;i >= c; --i) a[r][i] /= a[r][c];//将当前这个方程的第c列系数变为1//将下面的方程的第c列全部消为0for(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;}//最后一部从下往上递推方程的每一个解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];if(fabs(a[i][n]) < EPS) a[i][n] = 0.0;//防止-0.0的情况}return 0;
}void slove(){cin>>n;for(int i = 0;i < n; ++i)for(int j = 0;j <= n; ++j)scanf("%lf",&a[i][j]);int t = guss();if(t == 1) puts("Infinite group solutions");else if(t == 2) puts("No solution");else{for(int i = 0;i < n; ++i)printf("%.2lf\n",a[i][n]);}}int main()
{//  ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);t = 1;while(t--){slove();}return 0;
}

高斯消元解线性方程组(浮点高斯消元模板)相关推荐

  1. AcWing 883. 高斯消元解线性方程组(高斯消元模板)

    先出裸的模板: #include<bits/stdc++.h>using namespace std; const int N = 110; typedef double db; db a ...

  2. 第三十四章 数论——高斯消元解线性方程组

    第三十四章 数论--高斯消元解线性方程组 一.高斯消元 1.线性方程组 2.高斯消元步骤 (1)数学知识铺垫 增广矩阵和阶梯矩阵 初等变换 (2)高斯消元步骤 二.代码模板 1.问题: 2.代码 一. ...

  3. [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题

    [AcWing]883. 高斯消元解线性方程组(C++实现)高斯消元解线性方程组模板题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算 ...

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

    高斯消元 AcWing 883. 高斯消元解线性方程组 原题链接 AcWing 883. 高斯消元解线性方程组 算法标签 线性代数 高斯消元 思路 代码 #include<bits/stdc++ ...

  5. 高斯消元——解线性方程组+球形空间产生器+开关问题

    传送门:https://www.acwing.com/activity/content/11/ 思路: 把原矩阵变成阶梯型矩阵解题步骤: 1.找到绝对值最大的一行. 2.将该行和最上面未处理好的一行交 ...

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

    题目链接 : 点击查看 题目描述 : 输入一个包含 n 个方程 n 个未知数的线性方程组. 方程组中的系数为实数. 求解这个方程组. 下图为一个包含 m 个方程 n 个未知数的线性方程组示例: 输入输 ...

  7. AcWing - 高斯消元解线性方程组(高斯消元)

    题目链接:https://www.acwing.com/problem/content/885/ 时/空限制:1s / 64MB 题目描述 输入一个包含n个方程n个未知数的线性方程组. 方程组中的系数 ...

  8. 高斯列主元消去法解线性方程组

    最近在看惯导的东西,然后想要用C++解惯导控制方程,然后就重头把C++解方程组这方面的知识回顾了一下,首先就是高斯列主元消去法,这个方法还算实用,这里以3*3的矩阵为例,里面注释很详细,各位小白可以参 ...

  9. 高斯滤波详解 python实现高斯滤波

    一. 高斯滤波 高斯滤波是一种线性平滑滤波器,对于服从正态分布的噪声有很好的抑制作用.在实际场景中,我们通常会假定图像包含的噪声为高斯白噪声,所以在许多实际应用的预处理部分,都会采用高斯滤波抑制噪声. ...

最新文章

  1. 如何将DynamoDB的数据增量迁移到表格存储
  2. linux虚拟主机管理系统wdcp系列教程之三
  3. DPI — Application Assurance — Overview
  4. Linux内核中ioremap映射的透彻理解
  5. mac brew安装mysql
  6. 红外倒车雷达原理图_汽车里的毫米波雷达你知多少?
  7. 中国净水装置行业市场供需与战略研究报告
  8. java 三个点_Java Object定义三个点如何实现 Java Object定义三个点实现代码
  9. 成都互联网公司和生活成本
  10. 常见经典音频运放(一般作前级用)
  11. 沉迷于网络的人数_一个沉迷于追求的搜索者
  12. word电子签名在线制作
  13. ip地址的分类和特殊的网络地址-——计算机网络笔记
  14. 第十次作业 - 项目测评(团队)
  15. 三星s10升级android11,外媒:三星S10已开始推送基于Android 11的UI 3.0更新
  16. android动画机制,动画机制-《Android群英传》
  17. nreal AR开发 流程梳理
  18. Python数据分析实践项目 教育平台的线上课程智能推荐
  19. Java | 类与对象(updating)
  20. 基于图深度学习的 NLP 综述!

热门文章

  1. origin调整画板大小
  2. 【Beta】Phylab 测试报告
  3. 解决ORA-00054资源正忙的问题
  4. OpenModelica 在特定目录下生成仿真结果文件
  5. bzoj千题计划290:bzoj3143: [Hnoi2013]游走
  6. WebService开发常用功能详解
  7. Miller_Rabin测试法
  8. 基于 Docker 中的 MongoDB 授权使用
  9. 伯克利区块链课程:替代密码验证,比特币应用数字签名的进化之路
  10. Tomcat学习--源码导入和运行