高斯消元&&luogu3389
高斯消元(Gauss)
高斯消元和我们做二元一次方程组差不多
流程:
1.把系数和右边的值就是用二维数组存下来->转化成矩阵
我们的目标是把这个矩阵装换成 上三角的形式
对角线系数全部为1,1下面都为0,为了下面的回带
2.利用 加减消元和等式两边除以一个数,一列一列的进行消元
顺便判断一下是否有解,对角线上系数不为0
3.求出上三角之后,我们倒着回代一下就可以求取解了
当选取主元的时候,由于是double类型,当对角线的系数太小时,此时用它做除数会带来误差扩散,使结果严重失真。所以我们在消元的过程中,如果出现主元相差较大,要选取最大数作为主元,并交换行列,(当然,消元完毕的上边不能考虑在内)
---参考数学一本通
代码
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std; const double eps=1e-;
int n;
double a[][];
double ans[]; int main()
{
scanf("%d",&n);
for(int i=; i<=n; ++i)
for(int j=; j<=n+; ++j)
scanf("%lf", &a[i][j]); for(int i=; i<=n; ++i) {
int pivot=i;
for(int j=i+; j<=n; ++j)//选取较大主元
if(fabs(a[j][i]) > fabs(a[pivot][i])) pivot=j;
if(abs(a[pivot][i]) < eps) { //判断有无解,无穷解也当做无解
printf("No Solution");
return ;
}
if(pivot!=i) swap(a[i],a[pivot]);//直接交换
double tmp=a[i][i];
for(int j=i; j<=n+; ++j) {
a[i][j]/=tmp;//系数化为1
}
for(int j=i+;j<=n;j++) {//下面的化为0
tmp=a[j][i];
for(int k=i;k<=n+;k++) {
a[j][k]-=a[i][k]*tmp;
}
}
}
ans[n]=a[n][n+];
for(int i=n-; i>=; i--) {
ans[i]=a[i][n+];
for(int j=i+; j<=n; ++j)
ans[i]-=a[i][j]*ans[j];
}//回带
for(int i=;i<=n;++i)
printf("%.2lf\n",ans[i]);
}
高斯消元&&luogu3389的更多相关文章
- 【BZOJ-3143】游走 高斯消元 + 概率期望
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2264 Solved: 987[Submit][Status] ...
- 【BZOJ-3270】博物馆 高斯消元 + 概率期望
3270: 博物馆 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 292 Solved: 158[Submit][Status][Discuss] ...
- *POJ 1222 高斯消元
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9612 Accepted: 62 ...
- [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...
- hihoCoder 1196 高斯消元·二
Description 一个黑白网格,点一次会改变这个以及与其连通的其他方格的颜色,求最少点击次数使得所有全部变成黑色. Sol 高斯消元解异或方程组. 先建立一个方程组. \(x_i\) 表示这个点 ...
- BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基
[题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...
- SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元
[题目分析] Matrix-Tree定理+高斯消元 求矩阵行列式的值,就可以得到生成树的个数. 至于证明,可以去看Vflea King(炸树狂魔)的博客 [代码] #include <cmath ...
- UVALive 7138 The Matrix Revolutions(Matrix-Tree + 高斯消元)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
- [高斯消元] POJ 2345 Central heating
Central heating Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 614 Accepted: 286 Des ...
随机推荐
- Bitfinex API
本文介绍Bitfinex APi Platform Status Get the current status of the platform. Maintenance periods last fo ...
- 做一个完整的Java Web项目需要掌握的技能[转]
转自:http://blog.csdn.net/JasonLiuLJX/article/details/51494048 最近自己做了几个Java Web项目,有公司的商业项目,也有个人做着玩的小项目 ...
- Qt中容器类应该如何存储对象(对象加入到容器时会发生拷贝,容器析构时,容器内的对象也会析构)
Qt提供了丰富的容器类型,如:QList.QVector.QMap等等.详细的使用方法可以参考官方文档,网上也有很多示例文章,不过大部分文章的举例都是使用基础类型:如int.QString等.如果我们 ...
- Python开发【模块】:Requests(二)
Requests模块常见的4中post请求 HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式.常见的四种编码方式如下: 1 ...
- JavaScript如何实现拖放功能
1.在学习ExtJs时,对其拖放功能感到很陌生,然后找了个拖放功能实现. 转载地址 2.拖拽的基本原理就是根据鼠标的移动来移动被拖拽的元素.鼠标的移动也就是x.y坐标的变化:元素的移动就是style. ...
- 非极大值抑制(NMS)
非极大值抑制顾名思义就是抑制不是极大值的元素,搜索局部的极大值.这个局部代表的是一个邻域,邻域有两个参数可变,一个是邻域的维数,二是邻域的大小.这里不讨论通用的NMS算法,而是用于在目标检测中提取分数 ...
- MySQL纯透明的分库分表技术还没有
MySQL纯透明的分库分表技术还没有 种树人./oneproxy --proxy-address=:3307 --admin-username=admin --admin-password=D033 ...
- Py-lamda表达式学习【转载】
转自:https://blog.csdn.net/zjuxsl/article/details/79437563 1.语法定义 在Python中,lambda的语法是唯一的.其形式如下: lambda ...
- MongoDB 工具助手类(.NET)
在开发过程中,需要用到MongoDB,本身MongoDB自己对类的封装就特别好了.为了更加符合我们平时的开发使用,我现在进行了一个简单的封装操作. 连接数据库类:MongoDBContext usin ...
- html select 和dropdownlist小结收集
//html select var x = $("#selectSort").val(); //获取选中的value值 获取select选中的索引: $("#selec ...