一道高斯消元的应用,我们发现这个球的球心的性质是他到球面每个点的距离相同,也就是说求出所有点到球心的距离应该是相通的,可以联立,所以二次项不见了,剩下了一堆方程,直接高斯消元求解就好
代码
//By AcerMo
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define eps 1e-6
using namespace std;
int n;
double f[21],a[21][21],t;
double sqr(double x)
{
return x*x;
}
void gauss()
{
int now=1,to;
for(int i=1;i<=n;i++)
{
for(to=now;to<=n;to++)
if(fabs(a[to][i])>eps) break;
if(to>n) continue;
if(to!=now)
for(int j=1;j<=n+1;j++)
swap(a[to][j],a[now][j]);
double e=a[now][i];
for(int j=1;j<=n+1;j++) a[now][j]/=e;
for(int j=1;j<=n;j++)
if(j!=now)
{
e=a[j][i];
for(int k=1;k<=n+1;k++)
a[j][k]-=(e*a[now][k]);
}
now++;
}
return ;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lf",&f[i]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%lf",&t),a[i][j]=2*(t-f[j]),
a[i][n+1]+=sqr(t)-sqr(f[j]);
gauss();
for(int i=1;i<=n;i++)
printf("%.3lf ",a[i][n+1]);
return 0;
}