约旦高斯无穷解判成无解求助
查看原帖
约旦高斯无穷解判成无解求助
1487415
aha_parrot楼主2025/6/14 16:51
//     :-(
#include<bits/stdc++.h>
using namespace std;
int n,flag,no[114],m;
map<int,map<int,double> >mp;
double eps=1e-7; 
bool ju(int a){
	int qwq=0;
	for(int i=1;i<=n+1;i++){
		qwq+=mp[a][i];
	}
	if(qwq)return 1;
	else return 0;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n+1;j++)
			cin>>mp[i][j];
	
	
	for(int x=1;x<=n;x++){
		for(int i=x;i<=n;i++)
			if(fabs(mp[i][x])>eps){
				swap(mp[x],mp[i]);
				break;
			}
		if(fabs(mp[x][x])<eps){
			flag=1;
			no[++m]=x;
			continue;
		}
		//枚举主元 
		for(int i=n+1;i>=x;i--){
			if(mp[x][i]==0)continue;
			mp[x][i]/=mp[x][x];
		}
		//主元系数化1 
		
		for(int i=1;i<=n;i++){
			if(i==x)continue;
			double qwq=mp[i][x]/mp[x][x];
			for(int j=x;j<=n+1;j++)
				mp[i][j]-=mp[x][j]*qwq;
		}
		//将其他方程中的主元系数化为0 
	}
	if(flag){
		for(int i=1;i<=m;i++) 
			if(fabs(mp[no[i]][n+1])>eps){
				cout<<"-1";
				return 0;
			}
		cout<<"0";
		return 0;
	}
	for(int i=1;i<=n;i++)
		mp[i][n+1]/=mp[i][i];
	for(int i=1;i<=n;i++){
		printf("x%d=%.2lf\n",i,mp[i][n+1]);
	}
	return 0;
}
2025/6/14 16:51
加载中...