我们需要的是解方程组
手解怎么解,挨个试呗
所以说呢,电脑也可以干一样的事情
从(x_1)到(x_n)一个一个得消去系数,然后倒着推回来
这里的问题很简单,不需要考虑自由元什么的
所以说搞就行了
在这里呢,我们把(1 ightarrow n)的系数依次搞成零
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iomanip>
using namespace std;
int n;
double a[105][105],ans[105];
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
cin>>a[i][n+1];
}
for(int i=1;i<=n;i++){
int r=i;
for(int j=i+1;j<=n;j++){
if(fabs(a[r][i])<fabs(a[j][i])) r=j;//为了精度
//从大的开始搞
}
if(i!=r) for(int j=i;j<=n+1;j++) swap(a[i][j],a[r][j]);
for(int j=i+1;j<=n;j++){
for(int k=i+1;k<=n+1;k++){
a[j][k]=a[j][k]-a[j][i]/a[i][i]*a[i][k];
//手推一下
//自己消元的过程
}
a[j][i]=0;
//这一项没了
}
}
for(int i=n;i>=1;i--){
if(a[i][i]==0){
cout<<"No Solution";
return 0;
}
ans[i]=a[i][n+1]/a[i][i];
for(int j=1;j<i;j++){
a[j][n+1]-=a[j][i]*ans[i];
}
}
for(int i=1;i<=n;i++) cout<<fixed<<setprecision(2)<<ans[i]<<endl;
return 0;
}