标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。