被学长教会的高斯消元法Gauss
昨天学长教了我高斯消元法。
这里用一个栗子来模拟一下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的更多相关文章
- 高斯消元法(Gauss Elimination)【超详解&模板】
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. ...
- ZJOI 游记
在备战YZ提前招生考时去ZJOI玩了趟,ZJ果然人才辈出= =神犇讲课各种神听不懂啊orz day 0 Mon. 上午在AB班愉快地玩耍,下午就去HZ了. HZ真热啊... 学军也是节约= =空调都不 ...
- 【分享】学长的安利来了~~O(∩_∩)O
前言:应栋哥要求,学长把演讲稿稍微整理下发布出来,这可以算是一篇安利文,也可以说是一篇经历文吧.作为一个确确实实从软工里收获到挺多东西的过来人,学长希望可以通过学长的经历来让你们对软工更加期待. 安利 ...
- hdu 5833 Zhu and 772002 ccpc网络赛 高斯消元法
传送门:hdu 5833 Zhu and 772002 题意:给n个数,每个数的素数因子不大于2000,让你从其中选则大于等于1个数相乘之后的结果为完全平方数 思路: 小于等于2000的素数一共也只有 ...
- ZOJ3560 Re:the Princess(高斯消元法)
题目要读很久才能理解它的意思和笑点(如果你也看过那个笑话的话),读懂之后就会发现是一个高斯消元法的题目,对于我来说难点不在高斯消元,而在于字符串处理.先来说说题意吧: 总共有n个人,n个人都会有一段话 ...
- POJ1222 高斯消元法解抑或方程
第一次学怎么用高斯消元法解抑或方程组,思想其实很简单,方法可以看下面的链接:http://blog.csdn.net/zhuichao001/article/details/5440843 有了这种思 ...
- Gauss elimination Template
Gauss elimination : #include <iostream> #include <cstdlib> #include <cstring> #inc ...
- 高斯消元法~get√
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. ...
- 洛谷P3389 【模板】高斯消元法
P3389 [模板]高斯消元法 题目背景 Gauss消元 题目描述 给定一个线性方程组,对其求解 输入输出格式 输入格式: 第一行,一个正整数 n 第二至 n+1行,每行 n+1 个整数,为a1,a ...
随机推荐
- CTAssetsPickerController 选中图片不显示对号的问题解决
转载自:http://blog.csdn.net/qq_27304667/article/details/53218547 早上AppStore审核通过,下载来看看.突然发现一个选择图片时候选中的标识 ...
- VENOM cve-2015-3456 Qemu 虚拟机逃逸漏洞POC
#include <sys/io.h> int main() { int i ; iopl(3); outb(0x8e, 0x3f5); outb(0x41, 0x3f5); outb(0 ...
- pugixml 的常见读写操作
pugixml github地址 : https://github.com/zeux/pugixml pugixml 可以在github上直接下载到源码,包括两个头文件(pugixml.hpp pu ...
- Navicat Premium 连接 Oracle 数据库
Navicat Premium 是一个可多重连接的数据库管理工具,它可让你以单一程序同時连接到 MySQL.SQLite.Oracle 及 PostgreSQL 数据库,让管理不同类型的数据库更加方便 ...
- hdu 1540/POJ 2892 Tunnel Warfare 【线段树区间合并】
Tunnel Warfare Time Limit: 4000/2000 MS ...
- [ACM] HDU 5078 Osu!
Osu! Problem Description Osu! is a very popular music game. Basically, it is a game about clicking. ...
- Storm/Cassandra集成错误:NoSuchMethodError: concurrent.Futures.withFallback
本文原文出处: http://blog.csdn.net/bluishglc/article/details/50443205 严禁不论什么形式的转载.否则将托付CSDN官方维护权益. 2015年的最 ...
- 多数据源动态关联报表的制作(birt为例)
使用Jasper或BIRT等报表工具时,常会碰到一些很规的统计,用报表工具本身或SQL都难以处理,比方与主表相关的子表分布在多个数据库中,报表要展现这些数据源动态关联的结果.集算器具有结构化强计算引擎 ...
- Java和C++ 比較
总体差别 1. C/C++是直接执行在机器上(编译后为机器码),而java编译后产生*.class文件(字节码)是执行在java虚拟机上在(JVM),经过JVM解译(机器码)再放到真实机器上执行. J ...
- NoHostAvailableException: All host(s) tried for query failed (no host was tried)
NoHostAvailableException: All host(s) tried for query failed (no host was tried) cassandra连接报错:tried ...