高斯消元模板!!!bzoj1013
/*
高斯消元模板题
n维球体确定圆心必须要用到n+1个点
设圆心坐标(x1,x2,x3,x4...xn),半径为C
设第i个点坐标为(ai1,ai2,ai3,,,ain)那么对应的方程为
(x1-ai1)^2+(x2-ai2)^2+...+(xn-ain)^2=C*C
如此可列出n+1个方程但是由于有 xi^2 在,无法高斯消元
所以将这n+1个方程上下相减,得
2(x[1]*a[i][1]-x[1]a[i+1][1])+(a[i][1]^2-a[i+1][1]^2)...=0
那么化简后就是
sum{2*x[j]*(a[i][j]-a[i+1][j])}=sum{a[i][j]^2-a[i+1][j]^2}
那么可以用高斯消元做了!
*/
#include<bits/stdc++.h>
using namespace std;
double A[][],C[][],B[];//系数矩阵,常数矩阵
int n;
int main(){
cin>>n;
for(int i=;i<=n+;i++)
for(int j=;j<=n;j++)
cin>>A[i][j];//输入n+1个点的坐标
for(int i=;i<=n;i++)//处理出增广矩阵
for(int j=;j<=n;j++){
C[i][j]=*(A[i][j] - A[i+][j]);
B[i]+=(A[i][j]*A[i][j] - A[i+][j]*A[i+][j]);
}
//高斯消元!
for(int i=;i<=n;i++){
//找到xi系数不为0的第一个方程,并将其移到第i个方程处
for(int j=i;j<=n;j++){
if(C[j][i]>1e-){
for(int k=;k<=n;k++)
swap(C[i][k],C[j][k]);
swap(B[i],B[j]);
}
}
//用xi的系数去消其余方程的系数
for(int j=;j<=n;j++){
if(j==i)continue;
double r=C[j][i]/C[i][i];
for(int k=;k<=n;k++)
C[j][k]-=r*C[i][k];
B[j]-=r*B[i];
}
}
for(int i=;i<=n;i++)
printf("%.3lf ",B[i]/C[i][i]);
}
那么下面就是高斯消元的模板,其中C是系数矩阵,B是常数矩阵
//高斯消元!
for(int i=;i<=n;i++){
//找到xi系数不为0的第一个方程,并将其移到第i个方程处
for(int j=i;j<=n;j++){
if(C[j][i]>1e-){
for(int k=;k<=n;k++)
swap(C[i][k],C[j][k]);
swap(B[i],B[j]);
}
}
//用xi的系数去消其余方程的系数
for(int j=;j<=n;j++){
if(j==i)continue;
double r=C[j][i]/C[i][i];
for(int k=;k<=n;k++)
C[j][k]-=r*C[i][k];
B[j]-=r*B[i];
}
}
标准板子
void guess(int equ,int var){ //行,列
int k=,col=,max_r;//行 列 最大列
for(k=,col=;k<=equ&&col<var;k++,col++){
max_r=k;
for(int i=k+;i<=equ;i++){//寻找当前最大
if(fabs(mat[i][col])-fabs(mat[max_r][col])>eps)
max_r=i;
}
if(max_r!=k){//如果不是,就换过来
for(int j=;j<=var;j++) swap(mat[max_r][j],mat[k][j]);
}
if(fabs(mat[k][col])<eps){//如果已经为0,行不变,移到下一列
k--;
continue;
}
for(int i=k+;i<=equ;i++){
if(fabs(mat[i][col])>eps){
double t=mat[i][col]/mat[k][col];
mat[i][col]=0.0;
for(int j=col+;j<=var;j++)
mat[i][j]-=mat[k][j]*t;
}
}
}
for(int i=equ;i>=;i--){
if(fabs(mat[i][i])<eps) continue;
double tmp=mat[i][var];
for(int j=i+;j<var;j++)
if(mat[i][j]!=)
tmp-=mat[i][j]*x[j];
x[i]=tmp/mat[i][i];
}
}
高斯消元模板!!!bzoj1013的更多相关文章
- HDU 3359 高斯消元模板题,
http://acm.hdu.edu.cn/showproblem.php?pid=3359 题目的意思是,由矩阵A生成矩阵B的方法是: 以a[i][j]为中心的,哈曼顿距离不大于dis的数字的总和 ...
- 【Luogu】P3389高斯消元模板(矩阵高斯消元)
题目链接 高斯消元其实是个大模拟qwq 所以就着代码食用 首先我们读入 ;i<=n;++i) ;j<=n+;++j) scanf("%lf",&s[i][j]) ...
- 【转】高斯消元模板 by kuangbin
写的很好,注释很详细,很全面. 原blog地址:http://www.cnblogs.com/kuangbin/archive/2012/09/01/2667044.html #include< ...
- kuangbin大佬的高斯消元模板
dalao解释的博客 #include <bits/stdc++.h> using namespace std; ; int a[MAXN][MAXN];//增广矩阵 int x[MAXN ...
- 高斯消元模板(pascal)
洛谷P3389评测 program rrr(input,output); const eps=1e-8; var a:..,..]of double; n,i,j,k:longint; t:doubl ...
- java高斯消元模板
//package fuc; import java.io.PrintStream; import java.math.BigInteger; import java.util.Scanner; pu ...
- BZOJ1013 [JSOI2008]球形空间产生器sphere(高斯消元)
1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4846 Solved: 2525[Subm ...
- NEFU 503 矩阵求解 (非01异或的高斯消元)
题目链接 中文题,高斯消元模板题. #include <iostream> #include <cstdio> #include <cmath> #include ...
- hdu4418(概率dp + 高斯消元)
应该是一个入门级别的题目. 但是有几个坑点. 1. 只选择x能到达的点作为guass中的未知数. 2. m可能大于n,所以在构建方程组时未知数的系数不能直接等于,要+= 3.题意貌似说的有问题,D为- ...
随机推荐
- python 08
函数 函数定义: 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于 ...
- 自动安装gulpfile中所有依赖的模块
在gulpfile.js中定义任务的时候,需要引用不同的模块,这些模块需要使用 npm install --save-dev 命令进行安装,非常的繁琐.可以使用一个名为gulpfile-install ...
- nginx 目录讲解
- Struts2学习(三)
一.值栈 1.OGNL表达式 OGNL的概述:对象图导航语言,是一门功能强大的表达式语言. 2.值栈 值栈的概述(ValueStack):是一个接口,实现类OgnlValueStack.是数据的中转站 ...
- 嵌入式系统C编程之错误处理【转】
转自:http://www.cnblogs.com/clover-toeic/p/3919857.html 前言 本文主要总结嵌入式系统C语言编程中,主要的错误处理方式.文中涉及的代码运行环境如下: ...
- python父类调用子类了解一下
class B(): def __init__(self): pass def start(self): print(self.parse()) class A(B): def __init__(se ...
- DCL单例模式
我们第一次写的单例模式是下面这样的: public class Singleton { private static Singleton instance = null; public static ...
- Mudo C++网络库第六章学习笔记
muduo网络库简介 高级语言(Java, Python等)的Sockects库并没有对Sockects API提供更高层的封装, 直接用它编写程序很容易掉到陷阱中: 网络库的价值还在于能方便地处理并 ...
- $Django 模板层(模板导入,继承)、 单表*详(增删改查,基于双下划线的查询)、static之静态文件配置
0在python脚本中使用django环境 import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETT ...
- Android视频录制命令screenrecord
不管是教学,还是为了演示,如果能将Android手机(或平板)的屏幕录制成视频文件,那是一件非常酷的事(iOS8已经提供了这一功能,能通过OS X直接在Mac上录制iPad.iPhone的屏幕,win ...