题目:高斯消元法

高斯消元法是一个模板,下面简单介绍其内容以及实现方法。

高斯消元是求一个求多元一次方程组的解的算法。

就是形式如下的关于x1,x2...xn的方程组的解。

a11x1 + a12x2 + ... + a1nxn = b1

a21x1 + a22x2 + ... + a2nxn = b2

. . .

. . .

. . .

an1x1 + an2x2 + ... + annxn = bn

高斯消元的核心思想是将上述方程组通过初等行列变换转化为如下形式

x1 + c12x2 + ... + c1nxn = b1

x2 + ... + a2nxn = b2

. . .

. . .

. . .

xn = bn

那么解也是显然了。

分三种情况

1.完美阶梯型--->唯一解

2.0=非零--->无解

3.0=0--->无穷多组解

所以如何将方程组完成该变化呢,有四步。

枚举每一列的系数

1.找到绝对值最大的那一行

2.将该行换到最上面

3.将该行第一个数变为1

4.将下面所有行的第c列清为0

举个例子分析一下:

原方程组:

x1 + 2x2 - x3 = -6

2x1 + x2 - 3x3 = -9

-x1 - x2 + 2x3 = 7

第一次操作后

x1 + 0.5x2 - 1.5x3 = -4.5

000 + 1.5x2 + 0.5x3 = -1.5

000 - 0.5x2 + 0.5x3 = 2.5

第二次操作后

x1 + 0.5x2 - 1.5x3 = -4.5

000 + x2 + (1/3)x3 = -1

000 + 000 + (2/3)x3 = 2

第三次操作后

x1 + 0.5x2 - 1.5x3 = -4.5

000 + x2 + (1/3)x3 = -1

000 + 000 + x3 = 3

此时已经完成了变换。

显然已经求出了 x3=3 , 接下来一次一次把新求得的值代入方程组即可。

求出此方程组解

x1=1

x2=-2

x3=3

那么这就是高斯消元法。

代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 105
#define eps 1e-6
using namespace std;
int n;
double a[N][N];
int guass()
{
int r=0;
for(int c=0;c<n;c++)
{
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;
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];
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; // 无数解
}
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()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<=n;j++)
scanf("%lf",&a[i][j]);
int t=guass();
if(!t)
{
for(int i=0;i<n;i++)
{
if(fabs(a[i][n])<eps)
a[i][n]=fabs(a[i][n]);
printf("%.2lf\n",a[i][n]);
}
}
else
puts("No Solution");
return 0;
}

2022春每日一题:Day 11的更多相关文章

  1. <每日一题>题目11:以文件夹名称作为参数,返回该文件夹下所有文件的路径

    ''' 分析: 1.知道文件夹名称(假设是形如:E:\\software\\Notepad++),很显然可以通过OS模块去求 2.OS.listdir(sPath),列出文件夹内所有的文件和文件夹,以 ...

  2. CISP/CISA 每日一题 11

    CISA 每日一题(答) 一个合理建造的数据仓库应当支持下列三种基本的查询格式: 1.向上溯源和向下溯源——向上溯源是对数据进行总计:向下溯源是将数据进行细化: 2.交叉溯源——通过通用属性访问数据仓 ...

  3. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  4. CISP/CISA 每日一题 五

    CISA 每日一题(答) 信息系统审计师要确认系统变更程序中的: 1.变更需求应有授权.优先排序及跟踪机制: 2.日常工作手册中,明确指出紧急变更程序: 3.变更控制程序应同时为用户及项目开发组认可: ...

  5. [每日一题]ES6中为什么要使用Symbol?

    关注「松宝写代码」,精选好文,每日面试题 加入我们一起学习,day day up 作者:saucxs | songEagle 来源:原创 一.前言 2020.12.23日刚立的flag,每日一题,题目 ...

  6. [每日一题]面试官问:谈谈你对ES6的proxy的理解?

    [每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...

  7. 【js】Leetcode每日一题-完成所有工作的最短时间

    [js]Leetcode每日一题-完成所有工作的最短时间 [题目描述] 给你一个整数数组 jobs ,其中 jobs[i] 是完成第 i 项工作要花费的时间. 请你将这些工作分配给 k 位工人.所有工 ...

  8. 【JavaScript】Leetcode每日一题-青蛙过河

    [JavaScript]Leetcode每日一题-青蛙过河 [题目描述] 一只青蛙想要过河. 假定河流被等分为若干个单元格,并且在每一个单元格内都有可能放有一块石子(也有可能没有). 青蛙可以跳上石子 ...

  9. 【JavaScript】Leetcode每日一题-平方数之和

    [JavaScript]Leetcode每日一题-平方数之和 [题目描述] 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c . 示例1: 输入:c = 5 ...

  10. 【python】Leetcode每日一题-寻找旋转排序数组中的最小元素

    [python]Leetcode每日一题-寻找旋转排序数组中的最小元素 [题目描述] 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组nums ...

随机推荐

  1. ping: sina.cn: Name or service not known

    该方法针对Ubuntu18及以后版本. 第一次遇到ping:报错Name or service not known这个问题在百度上找了很久说的都是什么修改 /etc/resolv.conf,但每次修改 ...

  2. GNSS模块使用笔记

    目录 目录 GNSS芯片 NMEA0183 协议 指令 GNSS TO MCU MCU TO GNSS GNSS芯片 ATGM336H-5N31(GPS+BDS双模) 原理图 NMEA0183 协议 ...

  3. KingbaseES R6集群归档备份故障分析解决案例

    案例说明: 在使用ps工具查看主库进程,发现主库'archiver'进程失败,检查sys_log日志可以发现归档失败的信息.通过sys_log日志提取归档语句手工执行归档操作,提示"当前数据 ...

  4. 无线WIFI连接

    家里的无线网络覆盖一直不全, 最近想改善一下.买了一个mercury的小路由器MW156RM 其实,我还是不理解WDS, repeater, bridge模式有什么区别. 目标就是实现最少的改动,保持 ...

  5. Python数据科学手册-Numpy数组的计算,通用函数

    Python的默认实现(CPython)处理某些操作非常慢,因为动态性和解释性, CPython 在每次循环必须左数据类型的检查和函数的调度..在编译是进行这样的操作.就会加快执行速度. 通用函数介绍 ...

  6. Django 使用VScode 创建工程

    一.VSCode 创建Django 工程 VSCode 官方: https://code.visualstudio.com 1 mysite(项目名),创建Django 项目,可以和虚拟环境放在同一目 ...

  7. JS 模块化 - 03 AMD 规范与 Require JS

    1 AMD 规范介绍 AMD 规范,全称 Asynchronous Module Definition,异步模块定义,模块之间的依赖可以被异步加载. AMD 规范由 Common JS 规范演进而来, ...

  8. 【疑难杂症】奇异值分解(SVD)原理与在降维中的应用

    前言 在项目实战的特征工程中遇到了采用SVD进行降维,具体SVD是什么,怎么用,原理是什么都没有细说,因此特开一篇,记录下SVD的学习笔记 参考:刘建平老师博客 https://www.cnblogs ...

  9. 清除已安装的rook-ceph集群

    官方文档地址:https://rook.io/docs/rook/v1.8/ceph-teardown.html 如果要拆除群集并启动新群集,请注意需要清理的以下资源: rook-ceph names ...

  10. Elasticsearch:跨集群搜索 Cross-cluster search (CCS)

    转载自:https://blog.csdn.net/UbuntuTouch/article/details/104588232 跨集群搜索(cross-cluster search)使您可以针对一个或 ...