Gauss 高斯消元
2024-08-29 14:55:01
高斯消元…… (裸的暴力)
如果你有一个n元的方程组你会怎么办?
Ans:直接用初中的解方程组的方法呀!
没错,直接暴力加减消元。那什么是“高斯消元”?说白了,就是普通的加减消元罢了。
本人再考场上打了一个暴力解方程,大家都说要高斯消元,弄得我方极了,最后才发现我打的暴力就是高斯消元
流程
- 选其中一个方程
- 将其他方程的其中一个元与选出的方程统一系数
- 将选出的方程与其他方程相减,消去一个未知数,得到 n-1 个 n-1 元的方程组
- 重复之前的步奏,知道只剩一个一元一次的方程
- 求出解,将解一步步往回带,得出所有的解
代码实现
洛谷模板题:P3389 【模板】高斯消元法
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std; int n;
double a[][],b[],c[];
//a为方程组,b为常数项,c为解 void gauss(){ //高斯消元
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
double s=a[i][n-i+]/a[j][n-i+];
for(int k=;k<=n;k++)a[j][k]*=s;
for(int k=;k<=n;k++)a[j][k]-=a[i][k];
b[j]=b[j]*s-b[i];
}
}
if(-1e-<=a[n][]&&a[n][]<=1e-)//double 会有精度误差
printf("No Solution"),exit();//系数为0,没有唯一解
c[]=b[n]/a[n][];
for(int i=n-;i>=;i--){
for(int j=;j<=n-i;j++)
b[i]-=a[i][j]*c[j];
if(-1e-<=a[i][n-i+]&&a[i][n-i+]<=1e-)
printf("No Solution"),exit(); //同上
c[n-i+]=b[i]/a[i][n-i+];
}
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)
scanf("%lf",a[i]+j);
scanf("%lf",b+i);
}
gauss();
for(int i=;i<=n;i++)printf("%.2f\n",c[i]);
}
时间复杂度O(n3),这不就是人人都能想出的大暴力吗?
最新文章
- 增量式PID简单翻板角度控制
- ios开发之数据存储
- 使用dotTrace6.0进行内存分析
- 批量删除的js代码
- DSP中的cmd文件
- 【HDOJ】4902 Nice boat
- mysql 树形数据,层级数据Managing Hierarchical Data in MySQL
- <;转载>;C++命名空间
- 给EasyUI的DateBox控件添加清除button
- 【java学习笔记】序列化、反序列化
- Spring AOP功能和目标
- nginx: [error] invalid PID number ";"; in ";/var/run/nginx/nginx.pid";
- 烽火HG220G-U E00L2.03M2000光猫改桥接教程
- chrome中Timeline的使用(译)
- Tunnel Warfare(hdu1540 线段树)
- springcloud配置中心客户端配置遇到的坑
- Vue引用其他组件,但组件某些部分不需要时的简单处理
- 无法加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项
- ADM pro破解百度云限速 ADM pro设置方法 ES文件管理器
- Am335x 应用层之SPI操作
热门文章
- iOS perform action after period of inactivity (no user interaction)
- python中的循环语句-01
- 在idea下创建maven
- 2006: C语言实验——拍皮球
- Mathematics-基础:散列函数
- Bootstrap历练实例:导航内下拉菜单的用法
- GIMP永久保存选择的办法
- GIMP暗黑诱惑,部分彩色效果制作
- perl:_DATA_ _LINE_ _FILE_
- python--MySQL 库,表的详细操作