博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高斯消元
阅读量:6142 次
发布时间:2019-06-21

本文共 1564 字,大约阅读时间需要 5 分钟。

https://www.luogu.org/problemnew/show/P3389

高斯消元用来解决n元一次方程组,复杂度为n ^ 3

流程和初中学的那个加减消元法差不多

首先我们存储方程的各项系数(就相当于把向量存下来)

然后我们依次消去每项,具体的,把每次没有消掉的那一项(设为k)的系数最大值的那个方程的系数变为1,然后用这个方程的系数依次减去每个方程,让其他方程的k的系数为0

做到最后,你就获得了一个右上角矩阵,解出最低下的一项,依次回代即可

几个细节:

1.取系数最大值是为了防止精度误差

2.无解的情况就是一个方程的未知数系数为0但结果不为0;多解就是像00000这样的一列有多个

#include
#include
#include
#include
#include
#include
using namespace std;inline int read(){ int ans = 0,op = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') op = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { (ans *= 10) += ch - '0'; ch = getchar(); } return ans * op;}#define db doubleconst db eps = 1e-7;const int maxn = 101;db mp[maxn][maxn],ans[maxn];int n;void gauss(int i){ int t = i; for(int j = i + 1;j <= n;j++) if(fabs(mp[t][i]) < fabs(mp[j][i])) t = j; if(fabs(mp[t][i]) < eps) { printf("No Solution"); exit(0); } if(i != t) swap(mp[i],mp[t]); db div = mp[i][i]; for(int j = i;j <= n + 1;j++) mp[i][j] /= div; for(int j = i + 1;j <= n;j++) { div = mp[j][i]; for(int k = i;k <= n + 1;k++) mp[j][k] -= div * mp[i][k]; }}int main(){ n = read(); for(int i = 1;i <= n;i++) for(int j = 1;j <= n + 1;j++) scanf("%lf",&mp[i][j]); for(int i = 1;i <= n;i++) gauss(i); ans[n] = mp[n][n + 1]; for(int i = n - 1;i >= 1;i--) { ans[i] = mp[i][n + 1]; for(int j = i + 1;j <= n;j++) ans[i] -= mp[i][j] * ans[j]; } for(int i = 1;i <= n;i++) printf("%.2lf\n",ans[i]);}
View Code

 

转载于:https://www.cnblogs.com/LM-LBG/p/10645018.html

你可能感兴趣的文章
关于embedded linux的使用、开发、学习的一点自已的体会
查看>>
找到一部不错的c语言学习教程
查看>>
openstack 虚拟机添加网卡
查看>>
Groovy学习笔记(6)-javax.script.* API
查看>>
RocketMQ服务搭建
查看>>
微信支付 - 可以下单但是无法收到通知消息Log总显示begin notify
查看>>
分享我如何活用notepad++
查看>>
Object-c的基础概念
查看>>
自我关系的建立
查看>>
mysql读取配置文件的顺序
查看>>
《游戏程序设计模式》 2 - 顺序模式
查看>>
数据过滤器注解@Filter 如何在hibernate、spring data jpa中调用
查看>>
Eclipse上GIT插件EGIT使用手册之九_Rebase和Merge的区别
查看>>
关闭进程中打印信息
查看>>
安装memcached软件并用简单脚本做测试
查看>>
MySQL表新增字段默认值处理的一处小细节
查看>>
MEMCACHE TIME_WAIT过多的解决方法
查看>>
LeetCode——Nim Game
查看>>
正则表达式入门教程&&经典Javascript正则表达式(share)
查看>>
设计模式聚合和组合--代码执行
查看>>