其他分享
首页 > 其他分享> > 球形空间产生器

球形空间产生器

作者:互联网

高斯消元

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;

const int eps=1e-8;
const int N=15;
double a[N][N],b[N],c[N][N];
int n;
void SWAP(int x,int y)
{
	for(int i=1;i<=n;i++) swap(c[x][i],c[y][i]);
	swap(b[x],b[y]);
}

void sub(int x,int y,double k)//x-y*k
{
	for(int i=1;i<=n;i++) c[x][i]-=c[y][i]*k;
	b[x]-=b[y]*k;
}

int main()
{
	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++)
		 	c[i][j]=2*(a[i][j]-a[i+1][j]),b[i]+=a[i][j]*a[i][j]-a[i+1][j]*a[i+1][j];
	for(int i=1;i<=n;i++)
	{
		if( fabs(c[i][i])>eps ) continue;
		for(int j=i+1;j<=n;j++)
			if(fabs(c[j][i])>eps){ SWAP(i,j); break;}
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
		{
			if(i==j) continue;
			sub(j,i,c[j][i]/c[i][i]);
		}
	for(int i=1;i<=n;i++) printf("%.3lf ",b[i]/c[i][i]);
	return 0;
}

这种写法比树上简便好理解
注意double类型判断是不是0最好和eps比较

标签:const,int,球形,eps,产生器,double,空间,include,SWAP
来源: https://www.cnblogs.com/juruoHBr/p/15876842.html