高斯消元

高斯消元

高斯消元可真是复杂啊。。。。。

 

高斯消元求解n元一次线性方程组的板子题:

P3389 【模板】高斯消元法

 

举个栗子:

2x + y -   z = 8                      
-3x - y + 2z = -11
-2x + y + 2z = -3
先将它存到矩阵中:

②+①* (2/3)

③+①

接着对①变换

得到x,y,z;

但是我们想到,如果它有在原方程中就有两个或多个方程本质上是一样的,那么这就是无解

 

比如:

最后得出:

0=9,矛盾   这就是无解

 

又比如:

元的数量 > 方程式的数量   这就是无解

 

这里我们引入一个定理:

一个矩阵的行列式如果不为0,方程组有唯一解,否则无解或者无穷多解

 

貌似就可以用行列式求解了

 

行列式:

 

 

 

 

上代码(from lh)(注释from lz):

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pr;
const double pi=acos(-1);
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define Rep(i,u) for(int i=head[u];i;i=Next[i])
#define clr(a) memset(a,0,sizeof a)
#define pb push_back
#define mp make_pair
#define fi first
#define sc second
ld eps=1e-9;
ll pp=1000000007;
ll mo(ll a,ll pp){if(a>=0 && a<pp)return a;a%=pp;if(a<0)a+=pp;return a;}
ll powmod(ll a,ll b,ll pp){ll ans=1;for(;b;b>>=1,a=mo(a*a,pp))if(b&1)ans=mo(ans*a,pp);return ans;}
ll read(){ll ans=0;char last=' ',ch=getchar();while(ch<'0' || ch>'9')last=ch,ch=getchar();while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();if(last=='-')ans=-ans;return ans;
}
//head(lh的代码头)
int n,m;
double a[100][100];bool check(int k){if(fabs(a[k][n+1])<eps)return 1;// 如果小于0,返回1 for(int i=1;i<=n;i++) if(fabs(a[k][i])>eps)return 1;//第k行的每个数都大于0 return 0;
}
int main(){n=read();m=read();//m*n的矩阵,// a_i,1 a_i,2 ... a_i,n a_i,n+1for(int i=1;i<=m;i++)for(int j=1;j<=n+1;j++)a[i][j]=read();//输入矩阵元素(因为除了这个m*n的矩阵,还要有一行答案qwq) (看洛谷题吧qwq) for(int j=1;j<=m;j++){for(int k=1;k<=n+1;k++)cout<<a[j][k]<<" ";puts("");}//先把矩阵输出辽一遍 int flag=0;for(int i=1;i<=n;i++){int t=i;while(a[t][i]==0 && t<=n)t+=1;if(t==n+1){flag=1;continue;}//if判断是否有一行全为0,如果全为0 那么我们就少了至少1个方程,那么这个方程显然无唯一解 for(int j=1;j<=n+1;j++)swap(a[i][j],a[t][j]);//交换第i行和第t行的值,目的在于交换第i行和第t行后可以使a[1][1]!=0 double kk=a[i][i];//找到对角线qwq for(int j=1;j<=n+1;j++)a[i][j]/=kk;//把这一行的每一项都除以对角线,使得对角线为1 for(int j=1;j<=m;j++) //这里真的要详细地讲一讲咯 if(i!=j){//首先i!=j这样就不再消对角线上的数了 double kk=a[j][i];//定义kk为第j行第i列的数 for(int k=1;k<=n+1;k++)//把每一项消成0qwq(先把第一列除了对角线全消为0然后第二第三……) // 关于处理对角线这里以i=1,j=3做例子:当k=3时,a[3][3]-=a[3][1]*a[1][3]而这个时候a[3][1]已经为0,故对对角线无影响 a[j][k]-=kk*a[i][k];}puts("------------");//画一个杠杠来分割每一次消元结果 for(int j=1;j<=m;j++){for(int k=1;k<=n+1;k++)cout<<a[j][k]<<" ";//输出每次消元结果 puts("");//输出空格 
        }}if(flag){//判断无解和多解的情况(上面已经提到了) 已经懵bi求救qwq for(int i=1;i<=m;i++) if(!check(i)){//利用check判断是无解还是多解  printf("No solution\n");return 0;}//每个答案行如果有一个等于0的数就多解??printf("So many solutions\n");}
}

 

 修改后(from rainbow):

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pr;
const double pi=acos(-1);
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define Rep(i,u) for(int i=head[u];i;i=Next[i])
#define clr(a) memset(a,0,sizeof a)
#define pb push_back
#define mp make_pair
#define fi first
#define sc second
ld eps=1e-9;
ll pp=1000000007;
ll mo(ll a,ll pp){if(a>=0 && a<pp)return a;a%=pp;if(a<0)a+=pp;return a;}
ll powmod(ll a,ll b,ll pp){ll ans=1;for(;b;b>>=1,a=mo(a*a,pp))if(b&1)ans=mo(ans*a,pp);return ans;}
ll read(){ll ans=0;char last=' ',ch=getchar();while(ch<'0' || ch>'9')last=ch,ch=getchar();while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();if(last=='-')ans=-ans;return ans;
}
//head
int n,m;
double a[100][100];bool check(int k){if(fabs(a[k][n+1])<eps)return 1;rep(i,1,n)if(fabs(a[k][i])>eps)return 1;return 0;
}
int main(){n=read();m=n;// a_i,1 a_i,2 ... a_i,n a_i,n+1rep(i,1,m)rep(j,1,n+1)a[i][j]=read();int flag=0;rep(i,1,n){int t=i;while(a[t][i]==0 && t<=n)t+=1;if(t==n+1){flag=1;continue;}rep(j,1,n+1)swap(a[i][j],a[t][j]);//交换两行 double kk=a[i][i];//每一行对角线上的值 rep(j,1,n+1)a[i][j]/=kk;rep(j,1,m)//循环m个式子 开始消元 if(i!=j){double kk=a[j][i];rep(k,1,n+1)a[j][k]-=kk*a[i][k];//这样就能保证正好把第i列的数除了a[i][i] 都消成0 
            }}if(flag){return printf("No Solution\n"),0;}rep(j,1,m){printf("%.2lf",a[j][n+1]/a[j][j]);puts("");}}

 

我们把对角线都整成1之后,为了消元,不能改变对角线的值

那么 i ! = j  确定了对角线不会被消掉

 

消元过程:

1.  把对角线消为1

比如这样: 1  x  y  z

                   a  1  b  c

                   d  g  1  h

                   p  q  j  1

2.消掉最外面一层,削成0

           1  0  0  0

           0  1  b  c

           0  g  1  h

           0  q  j  1

3.再消下一层

           1  0  0  0

           0  1  0  0

           0  0  1  h

           0  q  j  1

4.以此类推吧

5.最后得到一个单位矩阵  

 

 

 


 

特别鸣谢:rainbow   Lz

 博客

博客

 

转载于:https://www.cnblogs.com/xiaoyezi-wink/p/10686265.html

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

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

相关文章

原子微型结构信息应用到局部图形信息存储的猜想

昨天想着看一些图形学方面的知识&#xff0c;在CSDN上看到说Gabor函数可以精确是被图形细微处。于是从网上找了下面这么一篇文章看看&#xff1a; 二、Gabor函数 Gabor变换属于加窗傅立叶变换&#xff0c;Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。另外Gabor函数…

西北大学计算机科学排名,西北大学计算机科学与信息系统Computer Science and Information Systems世界排名2020年最新排名第151-200位(QS世界排名)...

2020年QS计算机科学与信息系统Computer Science and Information Systems专业世界排名公布&#xff0c;西北大学计算机科学与信息系统世界排名第151-200位&#xff0c;西北大学计算机科学与信息系统专业实力怎么样呢&#xff1f;下面美英港新留学介绍西北大学计算机科学与信息系…

Hadoop 集群的三种方式

1,Local(Standalone) Mode 单机模式 $ mkdir input$ cp etc/hadoop/*.xml input$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar grep input output dfs[a-z.]$ cat output/* 解析$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-ex…

三阶矩阵的lu分解详细步骤_快速入门矩阵运算——开源库Eigen

矩阵是数学中一个重要的工具&#xff0c;广泛应用于各种场景下的数值分析&#xff0c;例如&#xff0c;数字信号处理&#xff0c;图像处理等。我们如何在程序中使用矩阵进行运算呢&#xff1f;本文将为大家介绍一个开源的矩阵运算工具——Eigen。Eigen is a C template library…

birt报表表格边框_Python 快速设置 Excel 表格边框

1. 安装 xlwings直接安装用 pip install xlwings2. 导入 xlwingsimport xlwings as xw3. 打开 Excel 文件# 打开存好的 Excelapp xw.App() # 设置应用wb xw.Book(data/小蜜蜂超市销售报表.xlsx) # 打开文件ws wb.sheets[Sheet1] # 选择表格4. 获取表格行列last_column ws.…

矢量合成和分解的法则_力的合成与分解

1力的合成一、合力与分力当一个物体受到几个力的共同作用时&#xff0c;我们常常可以求出这样一个力&#xff0c;这个力产生的效果跟原来几个力的共同效果相同&#xff0c;这个力就叫做那几个力的合力&#xff0c;原来的几个力叫做分力&#xff0e;二、合力与分力的关系1.合力与…

[导入]相片: 53787515.jpg

文章来源:http://img.blog.163.com/photo/5VZ9bIclg8NWuT90ExHHmQ/1697575584542151534.jpg转载于:https://www.cnblogs.com/baiyirui/archive/2008/04/27/1173122.html

超导量子计算机速度多快,我国量子计算机实现量子霸权,计算速度比谷歌快了100亿倍...

12月4日&#xff0c;中国科学技术大学宣布&#xff0c;我国新构建的76个光子的量子计算机实现了量子霸权。在5000万个样本的高斯玻色取样实验中&#xff0c;“九章”量子计算机仅用了200秒就完成了&#xff0c;如果使用世界第三的超级计算机进行实验&#xff0c;它也要将近20亿…

初一辍学学php能行吗_《夺冠》破7亿,辍学的农村姑娘成排球女王,朱婷:百炼才能成钢...

分享职场故事&#xff0c;交流职场经验&#xff0c;欢迎关注“闫湘”。《夺冠》累计票房7亿&#xff0c;让大家再一次领略了女排精神&#xff0c;而“2019-2020年中国运动员传播影响力榜第1名&#xff0c;朱婷&#xff01;”朱婷这个名字又一次响彻全中国。与今天的风光不同&am…

关于eclipse项目的x号报错的一些问题

有些时候项目中并未有什么问题 但项目前会有一个X号报错且无法运行项目 我们不妨从jre和Tomcat的一些配置中找原因 1&#xff0c;首先查看jre的安装是否正确&#xff0c;可以看见并未出错 &#xff0c;如果有问题&#xff0c;重新导入一下即可 2&#xff0c;打开项目的Java bui…

iWindowsMobile Launches Updated ZoomBoard

今天发现一个好东西&#xff0c;发上来和大家分享&#xff01;它来自iwindowsmobile.com(模拟iphone嫌疑)&#xff0c;因为在这里我发现了很多Windows Mobile用户梦寐以求的软件&#xff0c;我想应该叫这个站点为iheartwindowsmobile.com更为贴切&#xff0c;不管它叫什么&…

idea和搜狗输入法快捷键冲突_ubuntu18.04安装搜狗输入法

1. 必要时可获取root权限ubuntu在我们安装时并不是root权限,而是我们自己建立的用户,虽然可以使用sudo 命令,但是有时候还是不方便,毕竟root就是一切.输入 su即可切换root卸载ibusubuntu默认使用ibus管理输入法,官方推荐使用fcitx.我们先卸载ibussudo apt-getremove ibus清除ib…

同方专转本计算机视频,同方2011专转本计算机

同方2011专转本计算机 (3页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分namespace W_{ public partial class Form1 : Form { bool isDotpressed false; decimal dOpDaTa1, dOpDaTa2, dre…

wps流程图怎么不能添加文字_windows不能访问共享文件夹,不能添加共享打印机时,怎么解决呢...

遇到文件夹共享不能访问或者打印机共享添加不了的问题&#xff0c;可以按照下面的方法来操作了。适用于windows7windows8、windows10操作系统。在同一个局域网中&#xff0c;你通过192.168.1.1200或网上邻居不能访问对方主机共享文件夹时&#xff0c;按下面的方法操作&#xff…

cad中线段求和lisp_cad中连续线段变更圆滑弧形

下面我们就来看看如何在CAD中怎么把JPG图片插入页面中&#xff0c;并把图片中的图形做出线描的效果呢&#xff1f;这里我们用到CAD编辑工具来对此项功能以演示。方法/步骤首先我们要在电脑中安装CAD编辑工具来实现此操作。打开CAD软件。在菜单栏里找到插入命令&#xff0c;并在…

CF1142C U2(计算几何,凸包)

题目大意&#xff1a;平面上有 $n$ 个点&#xff0c;第 $i$ 个点是 $(x_i,y_i)$。问有多少条抛物线&#xff08;二次项系数为 $1$&#xff09;&#xff0c;经过这些点中不同的两个点&#xff0c;并且内部&#xff08;不含边界&#xff09;没有任何这些点。重合的抛物线只算一次…

易驾佳智能机器人教练_机器人教练创始人马宏先生受邀到中国人民大学进行经验分享...

4月2日&#xff0c;北京易驾佳信息科技有限公司创始人、机器人教练创始人马宏先生受邀前往中国人民大学&#xff0c;与MBA在学学生分享企业经营管理经验。从个人创业发展历程、多年来对驾培行业的洞察及转型升级方向等方面与大家进行了分享、交流。期间&#xff0c;马宏先生跟大…

实现控件的随意拖动

因为客户要求程序要在浏览器上运行&#xff0c;但是这些信息&#xff08;这个程序只在政府某部门内部使用&#xff09;并不需要公开&#xff0c;所以我们选择使用Windows应用程序&#xff0c;并将该程序嵌入到网页中。。。。 就我个人做的这部分简单的说下&#xff0c;我负…

导出sql文件_(一)SQL基本知识

一 、SQL的特点1.综合统一&#xff1a;SQL集数据定义语言DDL、数据控制语言DCL的功能于一体&#xff0c;语言风格统一&#xff0c;可以独立完成数据库生 命周期中的全部活动(定义关系模式&#xff0c;插入数据&#xff0c;建立数据库&#xff1b;对数据库中的数据进 行查询和更…

的引用_左值、右值、左值引用、右值引用

【导读】&#xff1a;本文主要详细介绍了左值、右值、左值引用、右值引用以及move、完美转发。左值和右值左值(left-values)&#xff0c;缩写&#xff1a;lvalues右值(right-values)&#xff0c;缩写&#xff1a;rvalues直接上官网查&#xff0c;我一向倡导自己去懂得原理&…