这道题直接根据题目给出的式子列方程组,拆开就能用上高斯消元求出坐标。
然而我并不会n^2的高斯消元,所以自己打了个暴力n^3(数据小)
#include<cstdio>
#include<cstdlib>
#include<cstring>
double ans[15];
double a[15][15];
double s[15][15];
double t[15][15];
int main()
{
int n;
scanf("%d",&n);
for (int i=1;i<=n+1;i++)
for (int j=1;j<=n;j++)
scanf("%lf",&a[i][j]);
for (int i=1;i<=n;i++)
{
s[i][0]=0.0;
for (int j=1;j<=n;j++)
s[i][0]+=a[i][j]*a[i][j]-a[i+1][j]*a[i+1][j];
for (int j=1;j<=n;j++)
s[i][j]=(a[i][j]-a[i+1][j])*2.0;
}
/*for (int i=1;i<=n;i++)
{
printf("%d:\n",i);
for (int j=1;j<=n;j++)
{
printf("%.3lf ",s[i][j]);
}
printf("%.3lf\n",s[i][0]);
}
system("pause");*/
for (int i=1;i<=n;i++)
{
for (int j=0;j<=n;j++)
t[i][j]=s[i][j];
for (int k=i+1;k<=n;k++)
{
double soy=s[i][i]/s[k][i];
for (int j=0;j<=n;j++)
s[k][j]*=soy;
for (int j=0;j<=n;j++)
s[k][j]-=s[i][j];
}
}
/*for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
printf("%.3lf ",s[i][j]);
printf("%.3lf\n",s[i][0]);
}*/
for (int i=n;i>=1;i--)
{
double num=s[i][0];
for (int j=i+1;j<=n;j++)
{
num-=s[i][j]*ans[j];
//printf("%.3lf\n",s[i][j]);
}
ans[i]=num/s[i][i];
}
printf("%.3lf",ans[1]);
for (int i=2;i<=n;i++)
printf(" %.3lf",ans[i]);
}