解一个多元二次方程组,不过方程组很有特点,前后一减就成多元一次的了,高斯消元上。
顺便贴个模板。
#include<bits/stdc++.h>
#define N 50
#define eps 1e-8
using namespace std;
int n;
double A[N+1][N+1];
double f[N+1][N+1];
double x[N+1];
void gauss()
{
for(int i=1;i<=n;i++)
{
double mx=-1.0;int id;
for(int j=i;j<=n;j++)if(fabs(f[i][j])>mx)mx=fabs(f[i][j]),id=j;
if(id!=i)for(int j=1;j<=n+1;j++)swap(f[id][j],f[i][j]);
double tmp=f[i][i];
for(int j=i+1;j<=n+1;j++)f[i][j]/=tmp;
for(int j=1;j<=n;j++)
{
if(i==j)continue;
double tmp=f[j][i];
for(int k=1;k<=n+1;k++)f[j][k]-=tmp*f[i][k];
}
}
for(int i=1;i<=n;i++)x[i]=f[i][n+1];
}
int main()
{
//freopen("in.txt","r",stdin);
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++)
{
for(int j=1;j<=n;j++)
{
f[i][j]=2*(A[i+1][j]-A[i][j]);
f[i][n+1]+=A[i+1][j]*A[i+1][j]-A[i][j]*A[i][j];
}
}
gauss();
for(int i=1;i<n;i++)printf("%.3f ",x[i]);
printf("%.3f",x[n]);
return 0;
}