/*
高斯消元模板题
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的更多相关文章

  1. HDU 3359 高斯消元模板题,

    http://acm.hdu.edu.cn/showproblem.php?pid=3359 题目的意思是,由矩阵A生成矩阵B的方法是: 以a[i][j]为中心的,哈曼顿距离不大于dis的数字的总和 ...

  2. 【Luogu】P3389高斯消元模板(矩阵高斯消元)

    题目链接 高斯消元其实是个大模拟qwq 所以就着代码食用 首先我们读入 ;i<=n;++i) ;j<=n+;++j) scanf("%lf",&s[i][j]) ...

  3. 【转】高斯消元模板 by kuangbin

    写的很好,注释很详细,很全面. 原blog地址:http://www.cnblogs.com/kuangbin/archive/2012/09/01/2667044.html #include< ...

  4. kuangbin大佬的高斯消元模板

    dalao解释的博客 #include <bits/stdc++.h> using namespace std; ; int a[MAXN][MAXN];//增广矩阵 int x[MAXN ...

  5. 高斯消元模板(pascal)

    洛谷P3389评测 program rrr(input,output); const eps=1e-8; var a:..,..]of double; n,i,j,k:longint; t:doubl ...

  6. java高斯消元模板

    //package fuc; import java.io.PrintStream; import java.math.BigInteger; import java.util.Scanner; pu ...

  7. BZOJ1013 [JSOI2008]球形空间产生器sphere(高斯消元)

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4846  Solved: 2525[Subm ...

  8. NEFU 503 矩阵求解 (非01异或的高斯消元)

    题目链接 中文题,高斯消元模板题. #include <iostream> #include <cstdio> #include <cmath> #include ...

  9. hdu4418(概率dp + 高斯消元)

    应该是一个入门级别的题目. 但是有几个坑点. 1. 只选择x能到达的点作为guass中的未知数. 2. m可能大于n,所以在构建方程组时未知数的系数不能直接等于,要+= 3.题意貌似说的有问题,D为- ...

随机推荐

  1. linux 开发板上的调试

    1.需要命令 ulimit 进行设置core file size ,  看 core file size. cat /proc/pid/limits,  这个暂时不用 2.需要有gdb命令 , 需要g ...

  2. day 10 - 1 函数进阶

    函数进阶 命名空间和作用域 命名空间 命名空间 有三种内置命名空间 —— python解释器 就是python解释器一启动就可以使用的名字存储在内置命名空间中 内置的名字在启动解释器的时候被加载进内存 ...

  3. 比较python类的两个instance(对象) 是否相等

    http://www.yihaomen.com/article/python/281.htm 比较python类的两个instance(对象) 是否相等 作者:轻舞肥羊 日期:2012-10-25 字 ...

  4. DeepLearning.ai-Week1-Convolution+model+-+Application

    1.0 - TensorFlow model 导入相关依赖包. import numpy as np import h5py import matplotlib.pyplot as plt impor ...

  5. Nginx系列7:SSL证书的公信力是如何保证的?

    1.PKI公钥基础设施 2.证书类型 参考链接:ssl证书类型区别 3.证书链

  6. 搭建ubuntu14.04服务器必备环境

    1.  设置网络 设置网络时,一定要设置好网卡,第一个网卡一定要设置为‘br0’(如下图),设置为其他的上不去网. 修改网络配置文件,命令:sudo gedit /etc/network/interf ...

  7. oracle-----视图/物化视图

    什么是视图 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的. 视图只有逻辑定义.每次使用的时候,只是重新执行SQL. 视图是从一个或多个 ...

  8. linux添加swap分区【转】

    概述 添加交换分区主要是因为安装oracle时碰到交换分区太小时无法安装的情况,这时候就需要添加交换分区了. 操作简介 增加swap分区方法: 1.新建磁盘分区作为swap分区 2.用文件作为swap ...

  9. Python使用MySQL数据库【转】

    转自 Python使用MySQL数据库(新)[很详细][fetchall和fetchmany有啥区别呢?] - CSDN博客https://blog.csdn.net/u011350541/artic ...

  10. liunx 安装Zabbix的心酸历程

    作者:邓聪聪 为了工作之需要,在系统服务方面不断的摸爬打滚,有了这样点点滴滴的经验,留后在使用!  插件网盘取. 链接: https://pan.baidu.com/s/1i5u0ed3 密码: rx ...