第一次写高斯消元。
高斯消元就是通过不断的消去然后回代解n元一次方程组。
本题可以根据距离得到n个方程,然后上gauss就好了。
#include<cstdio>
#include<cstring>
#include<cmath>
#define eps 1e-6
using namespace std;
int n;
double f[15];
double a[15][15];
inline double sqr(double x)
{
return x*x;
}
void gauss()
{
int y;
double t;
for (int i=1;i<=n;i++)
{
for (y=i;y<=n;y++)
if (fabs(a[y][i])>eps) break;
if (y>n) continue;
if (y!=i)
for (int j=1;j<=n+1;j++) swap(a[i][j],a[y][j]);
t=a[i][i];
for (int j=1;j<=n+1;j++) a[i][j]/=t;
for (int j=1;j<=n;j++)
if (j!=i)
{
t=a[j][i];
for (int k=1;k<=n+1;k++)
a[j][k]-=t*a[i][k];
}
}
}
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++)
{
double t;
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]);
printf("%.3lf\n",a[n][n+1]);
return 0;
}