1、实数范围内的高斯消元,除了多几个EPS外没什么特别的。
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
double G[15][15],ans[15];
bool l[15];
const double EPS=1e-9;
int Gauss(double a[][15],bool l[],double ans[],const int &n){
int res=0,r=1;
for(int i=1;i<=n;i++)
l[i]=false;
for(int i=1;i<=n;i++){
for(int j=r;j<=n;j++)
if(fabs(a[j][i])>EPS){
for(int k=i;k<=n+1;k++)
swap(a[j][k],a[r][k]);
break;
}
if(fabs(a[r][i])<EPS){
res++;
continue;
}
for(int j=1;j<=n;j++)
if(j!=r&&fabs(a[j][i])>EPS){
double temp=a[j][i]/a[r][i];
for(int k=i;k<=n+1;k++)
a[j][k]-=a[r][k]*temp;
}
l[i]=true;r++;
}
for(int i=1;i<=n;i++)
if(l[i])
for(int j=1;j<=n;j++)
if(fabs(a[j][i])>EPS) ans[i]=a[j][n+1]/a[j][i];
return res;
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%lf",&G[i][j]);
for(int i=1;i<=n;i++)
scanf("%lf",&G[i][n+1]);
int temp=Gauss(G,l,ans,n);
for(int i=1;i<=n;i++)
printf("%.2lf\n",ans[i]);
return 0;
}