#include <iostream>
#include <cstring>
#include <vector>
#include <cmath>
#include <cstdio>
using namespace std;
const int size_n=100;
const double exps=1e-7;
double a[size_n][size_n],b[size_n],ans[size_n];
void get_ans(int n){
for(int i=n;i>=1;--i){
double sum=0;
for(int j=n;j>i;--j){
sum+=ans[j]*a[i][j];
}
ans[i]=(b[i]-sum)/a[i][i];
}
}
void fun(int n){
for(int i=1;i<=n;++i){
int max_n=i;
for(int j=i+1;j<=n;++j)
if(fabs(a[j][i])>fabs(a[max_n][i]))
max_n=j;
if(max_n!=i){
for(int j=1;j<=n;++j){
swap(a[max_n][j],a[i][j]);
}
swap(b[max_n],b[i]);
}
if(fabs(a[i][i])<exps){
cout<<"无穷多解"<<endl;
return;
}
for(int j=i+1;j<=n;++j){
double tem=a[j][i]/a[i][i];
for(int k=1;k<=n;++k){
a[j][k]-=a[i][k]*tem;
}
b[j]-=b[i]*tem;
}
}
get_ans(n);
}
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int n;
cin>>n;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
cin>>a[i][j];
}
}
for(int i=1;i<=n;++i)
cin>>b[i];
fun(n);
for(int i=1;i<=n;++i)
printf("%.2f\n",ans[i]);
return 0;
}
EOJ1040 高斯消元法求解线性方程组的解
最新推荐文章于 2021-09-22 00:02:52 发布