高斯消元样例都过不掉求调,给关注
查看原帖
高斯消元样例都过不掉求调,给关注
97737
Wsyflying2022楼主2022/2/16 15:26
#include <bits/stdc++.h>
using namespace std;
const int maxn=210;
double eps=1e-15,f[maxn][maxn];
double c[maxn][maxn],ans[maxn];
int n;
double fabs(double a) {
	return a<(-eps) ? -a : a;
}
inline void Gauss() {
	for (int i=1;i<=n;i++) {
		int l=i;
		for (int j=i+1;j<=n;j++)
		  if (fabs(f[l][i])<fabs(f[j][i])) l=j;
		if (l!=i) 
		  for (int j=1;j<=n+1;j++)
		    swap(f[i][j],f[l][j]);
		double temp=f[i][i];
		for (int j=i;j<=n+1;j++)
		  f[i][j]/=temp;
		for (int j=i+1;j<=n;j++) 
		  for (int k=i;k<=n+1;k++)
		    f[j][k]-=f[j][i]*f[i][k];
	}
	for (int i=n;i>=1;i--) {
		double t=f[i][n+1];
		for (int j=n;j>i;j--) 
		    t-=f[i][j]*ans[j];
		ans[i]=t/f[i][i];
	} 
}
int main(){
	scanf("%d",&n);
	for (int i=1;i<=n+1;i++) 
	    for (int j=1;j<=n;j++)
	        scanf("%lf",&c[i][j]);
	for (int i=1;i<=n;i++) {
		double d=0;
		for (int j=1;j<=n;j++) {
			f[i][j]=2*(c[i+1][j]-c[i][j]);
			d+=c[i+1][j]*c[i+1][j]-c[i][j]*c[i][j];
		}
		f[i][n+1]=d;
	}
	Gauss();
	for (int i=1;i<=n;i++)
	  if (i==n) printf("%.3lf\n",ans[i]);
	    else printf("%.3lf ",ans[i]);
	return 0;
}

2022/2/16 15:26
加载中...