昨天学长教了我高斯消元法。

这里用一个栗子来模拟一下Gauss的流程。

真的通俗易懂!这里是洛谷题目链接

这就是例子

x-2y+3z=
4x-5y+6z=
7x-8y+10z=

先将它转化为矩阵

 -
-
-

解决这个方程组

我们会希望它变成如下形式

   a
b
c

这样就可以表示为$x=a$,$y=b$,$z=cx=a$,$y=b$,$z=c$,$x=a$,$y=b$,$z=c$

我们使用高斯消元,就要一步一步将每个未知数约去。

这种方法是以列为单位消去的

首先我们将第一列转化为1 0 0的形式

在这里要注意一下,我们往往是将这个系数绝对值最大的方程转移到被减的这一行,这样就可以减小误差

所以我们先将矩阵变成这样

 -
-
-

然后将正在处理的方程式化简,让正被处理的系数化1

 -/ /
-
-

然后使用加减法将第二个与第三个方程组的第一个系数化0

 -/ /
-/ /
-/ /

然后这时候第一列就被化简完成

同理我们化去第二行与第三行,步骤如下:

1.化简第二行

 -/ /
-/
-/ /

2.用第一行减第二行×(-8/7),第三行减第二行×(-6/7)

  /
-/

3.不需要化简第三行,所以直接用第一行减去第三行×2/3,第二行减去第三行×(-2/3)


最后我们就得到了一组解x=1,y=2,y=3x=1,y=2,y=3x=1,y=2,y=3 。

所以高斯消元其实是运用了小学解方程组的加减法的讷。

代码请见我的博客《从2017年暑假到现在手打的模板↑_↑》之三十二。

我还是老老实实地贴了上来:

//Guss
#include <bits/stdc++.h>
using namespace std; int n;
double f[][];
const double eps=1e-; int main()
{
scanf("%d",&n);
for (int i=;i<n;i++)//读入系数和值
for (int j=;j<=n;j++) scanf("%lf",&f[i][j]);
for (int i=;i<n;i++) {
int ch=i;
for (int j=i;j<n;j++)//选择绝对值最大的减少误差
if (fabs(f[j][i]-f[ch][i])<=eps) ch=j;
for (int j=;j<=n;j++) swap(f[i][j],f[ch][j]);//交换
if (fabs(f[i][i])<=eps) {//无解情况
printf("No Solution\n");
return ;//如果当前位置为零 则无解 0x=A
}
for (int j=i+;j<=n;j++) f[i][j]/=f[i][i];//系数化1
//自己那位不必要除 无影响
for (int j=;j<n;j++)
if (i!=j)
for (int k=i+;k<=n;k++) f[j][k]-=f[j][i]*f[i][k];
//加减法去掉系数值
}
for (int i=;i<n;i++) printf("%.2lf\n",f[i][n]);//输出
return ;
}

被学长教会的高斯消元法Gauss的更多相关文章

  1. 高斯消元法(Gauss Elimination)【超详解&模板】

    高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. ...

  2. ZJOI 游记

    在备战YZ提前招生考时去ZJOI玩了趟,ZJ果然人才辈出= =神犇讲课各种神听不懂啊orz day 0 Mon. 上午在AB班愉快地玩耍,下午就去HZ了. HZ真热啊... 学军也是节约= =空调都不 ...

  3. 【分享】学长的安利来了~~O(∩_∩)O

    前言:应栋哥要求,学长把演讲稿稍微整理下发布出来,这可以算是一篇安利文,也可以说是一篇经历文吧.作为一个确确实实从软工里收获到挺多东西的过来人,学长希望可以通过学长的经历来让你们对软工更加期待. 安利 ...

  4. hdu 5833 Zhu and 772002 ccpc网络赛 高斯消元法

    传送门:hdu 5833 Zhu and 772002 题意:给n个数,每个数的素数因子不大于2000,让你从其中选则大于等于1个数相乘之后的结果为完全平方数 思路: 小于等于2000的素数一共也只有 ...

  5. ZOJ3560 Re:the Princess(高斯消元法)

    题目要读很久才能理解它的意思和笑点(如果你也看过那个笑话的话),读懂之后就会发现是一个高斯消元法的题目,对于我来说难点不在高斯消元,而在于字符串处理.先来说说题意吧: 总共有n个人,n个人都会有一段话 ...

  6. POJ1222 高斯消元法解抑或方程

    第一次学怎么用高斯消元法解抑或方程组,思想其实很简单,方法可以看下面的链接:http://blog.csdn.net/zhuichao001/article/details/5440843 有了这种思 ...

  7. Gauss elimination Template

    Gauss elimination : #include <iostream> #include <cstdlib> #include <cstring> #inc ...

  8. 高斯消元法~get√

    高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. ...

  9. 洛谷P3389 【模板】高斯消元法

    P3389 [模板]高斯消元法 题目背景 Gauss消元 题目描述 给定一个线性方程组,对其求解 输入输出格式 输入格式: 第一行,一个正整数 n 第二至 n+1行,每行 n+1 个整数,为a1​,a ...

随机推荐

  1. 转: javascript技术栈

    http://www.infoq.com/cn/articles/state-of-javascript-2016

  2. 9.11排序与查找(一)——给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B。将B合并入A并排序

    /**  * 功能:给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B.将B合并入A并排序. */ /** * 问题:假设将元素插入数组A的前端,就必须将原有的元素向后移动,以腾出空间. ...

  3. android中非堵塞socket通信

    1.什么是同步与异步,堵塞与非堵塞 首先我们要明确搞明确:同步就等于堵塞?异步就等于非堵塞?这是不正确的,同步不等于阻 塞.而异步也不等于非堵塞. 1)那什么是同步编程? 什么是同步,就是在发出一个功 ...

  4. hibernate学习系列-----(3)Session 缓存和持久化生命周期以及Session 基本操作

    Session缓存原理 为了能够在控制台更好的看到我们的hibernate干了些什么,可以在hibernate.cfg.xml文件中写入如下配置: <!-- print all generate ...

  5. 压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate

    分类: 4.软件设计/架构/测试 2010-01-12 19:58 34241人阅读 评论(4) 收藏 举报 测试loadrunnerlinux服务器firebugthread 上篇讲如何用LoadR ...

  6. JAVA、Android与Cordova环境搭建

    一些坑(如Manager.exe闪退的问题)请查看:https://www.cnblogs.com/CyLee/p/9911195.html 官方网址: # Cordova http://cordov ...

  7. docker教程之从一头雾水到不一头雾水(3)

    本文主要是介绍Docker容器的相关内容 容器创建 我们已经知道,镜像是只读的,而基于镜像创建出来的容器是可读写的,所以,一般我们实际中,会经常使用对应镜像创建容器并且使用这些容器.同样,如果我们想要 ...

  8. Android服务类Service具体解析

    Service有什么作用? 很多人不明确service是用来干嘛的.事实上Service作为Android四大组件之中的一个,能够理解为一个执行在后台的Activity.它适用于处理一些不干扰用户的长 ...

  9. Android实践--监測网络状态

    Android 监測网络状态      我们在使用Android手机时候,一些APP须要网络环境才干执行,所以手机须要可用的网络,无论是2G.3G或者WIFI.甚至有一些比較耗流量的APP仅仅能在WI ...

  10. MySQL八:视图、触发器、事物、存储过程、函数

    阅读目录 一 视图 二 触发器 三 事务 四 储存过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...