高斯消元

高斯消元

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

 

高斯消元求解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,一经查实,立即删除!

相关文章

uoni扫地机器人好用吗_扫地机器人好用吗?了解性能看这篇

扫地机器人这类智能家电已经逐渐渗透到大众家庭中,尽管大家对这一品类不再陌生,但对它的性能了解并不全面。况且,市场上扫地机器人产品多不胜数,可实际使用效果和宣称效果存在较大差异。因此建议大家在选购和使用产品时要关注以下几个方面:本文引用地址&#xff1a;http://www.…

[jQuery] jQuery和Zepto的区别?各自的使用场景?

[jQuery] jQuery和Zepto的区别&#xff1f;各自的使用场景&#xff1f; 创建$的方式不同。前者略微要大&#xff0c;后者略微小点。场景....emmmm个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目…

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

昨天想着看一些图形学方面的知识&#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…

apache phoenix 入门_实现Phoenix入门

快速入门Phoenix是一个开源的HBASE SQL层。Phoeinx可以用标准的JDBC API替代HBASE client API来创建表&#xff0c;插入和查询查询HBASE中的数据。Phoenix作为应用层和HBASE之间的中间件,以下特性使它在大数据量的简单查询场景有着独有的优势1. 二级索引支持(global index loc…

腾讯与微软合作,准备应用Silverlight技术

腾讯和微软计划在Silverlight技术上展开深入合作&#xff0c;腾讯后续会在多项业务中应用Silverlight技术&#xff0c;这个视频展示了腾讯使用Silverlight可能应用的场景。查看详情:http://labs.qq.com/e/51/ 转载于:https://www.cnblogs.com/nasa/archive/2008/04/22/1165464.…

如何增强台式计算机无线网络,台式机无线网信号差怎么解决

台式机无线网信号非常的差&#xff0c;玩什么都卡&#xff0c;那么我要怎么样解决呢?下面由小编给你做出详细的台式机无线网信号差解决方法介绍!希望对你有帮助!台式机无线网信号差解决方法一&#xff1a;在确保无线网卡的驱动程序都正确安装的前提下&#xff0c;给出如下建议…

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

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

【转】接口 与 抽象类

本文转自&#xff1a;http://blog.***/article.asp?id89介绍&#xff1a;在本文中&#xff0c;我将借一个DEMO讨论下接口和抽象类。抽象类和接口的的概念对初学面向对象编程的人来说&#xff0c;总容易迷惑。所以&#xff0c;我试着讨论下两者的理论并比较他们的使用。最后我将…

第十三届东北师范大学程序设计竞赛热身赛 C(exgcd+欧拉函数)

题目链接 思路 对于答案&#xff0c;我们考虑对于每个可行的$c$会和多少$d$产生合法序偶。首先证明$c$和$b$必然互质。 假设$c$和$b$不互质&#xff0c;那么设$t_{1}gcd(c, b),(t_{1} > 1)$对于 $(c*d)\%ba$ 等价于 $(k_{1}*t_{1})\%ba,(k_1\in Z)$ $(k_{1}*t_{1})\%(k_{2}*…

[jQuery] Zepto的点透问题如何解决?

[jQuery] Zepto的点透问题如何解决&#xff1f; 1、“点透”是什么你可能碰到过在列表页面上创建一个弹出层&#xff0c;弹出层有个关闭的按钮&#xff0c;你点了这个按钮关闭弹出层后后&#xff0c;这个按钮正下方的内容也会执行点击事件&#xff08;或打开链接&#xff09;。…

确认要从桌面删除计算机,确定要从界面上删除 我的电脑 ...

桌面所有图标消失应该是系统外壳程序explorer.exe没有正常启动或被关闭造成的,可以在任务管理器(CTRLALTDEL)中手动运行explorer.exe找回桌面.造成该问题的主要原因有:1.恶意程序/病毒破坏你可以重启系统并按F8进入安全模式,选择专业的杀毒软件对系统分区进行全面扫描,如果是恶…

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.…

[jQuery] jQuery UI怎样自定义组件?

[jQuery] jQuery UI怎样自定义组件&#xff1f; 又是第一次&#xff0c;现在的感受是jQueryUI Widget能让你代码组织得更好,风格更一致。 如何开始使用首先用$.widget()方法开始定义你的组件&#xff0c;它只接收三个参数&#xff1a;第一个是组件名称&#xff0c;第二个是可选…

在VS中进行对项目进行编译出现不能编译的问题

在用VS工具开发的ASP.NET应用程序时&#xff0c;有时会出现C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files这个文件夹的CSC.exe编译应用程序已存在还是什么&#xff0c;该应用程序就是编译不过去一直报这个错误。 解决办法&#xff1a; 1、先把“任务…

计算机辅助制造期末试题答案,精编国家开放大学电大本科《机械CAD-CAM》2025期末试题及答案(试卷号:1119)...

版权声明&#xff1a;以上文章中所选用的图片及文字来源于网络以及用户投稿&#xff0c;由于未联系到知识产权人或未发现有关知识产权的登记&#xff0c;如有知识产权人并不愿意我们使用&#xff0c;如果有侵权请立即联系&#xff1a;55525090qq.com&#xff0c;我们立即下架或…

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

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亿…