高斯消元模板(求多元一次线性方程的解)
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define N 105
using namespace std;
int n;
double date[N][N],ans[N];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n+1;j++)
{
scanf("%lf",&date[i][j]);
date[i][j]*=1.00;//转化为浮点数
}
double tmp=date[i][1];
for(int j=1;j<=n+1;j++)
date[i][j]=date[i][j]*1.0/tmp;//将第一项化为1
}
for(int i=1;i<=n;i++)
{
if(date[i][i]==0)
{
printf("No Solution\n");return 0;
}
for(int j=i+1;j<=n+1;j++) date[i][j]/=date[i][i];//将对角线化为1
date[i][i]=1.0;
for(int j=i+1;j<=n;j++)//将下三角化为0
{
for(int k=i+1;k<=n+1;k++)
date[j][k]-=date[i][k]*date[j][i];
date[j][i]=0;
}
}
for(int i=n;i;i--)//求ans;
{
double opt=date[i][n+1];
for(int j=i+1;j<=n;j++)
opt-=ans[j]*date[i][j];
ans[i]=opt;
}
for(int i=1;i<=n;i++) printf("%.2lf\n",ans[i]);
return 0;
}