ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

球形空间产生器

2022-02-09 21:31:10  阅读:174  来源: 互联网

标签:const int 球形 eps 产生器 double 空间 include SWAP


高斯消元

#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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有