高斯约旦怎么判无解和无穷解?
查看原帖
高斯约旦怎么判无解和无穷解?
95626
charliegong楼主2021/10/21 23:30

RT

#include<iostream>
#define maxn 60
#define d double
#define eps 1e-10
using namespace std;

d a[maxn][maxn];
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n+1;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        int maxx=i;
        for(int j=i;j<=n;j++){
            if(a[j][i]>a[maxx][i]){
                maxx=j;
            }
        }
        for(int j=1;j<=n+1;j++){
            swap(a[i][j],a[maxx][j]);
        }
        d k=a[i][i];
        for(int j=1;j<=n+1;j++){
            a[i][j]/=k;
        }
        for(int j=1;j<=n;j++){
            if(i!=j){
                d x=a[j][i];
                for(int k=1;k<=n+1;k++){
                    a[j][k]-=x*a[i][k];
                }
            }
        }
//        for(int j=1;j<=n;j++){
//            for(int k=1;k<=n;k++){
//                cout<<a[j][k]<<" ";
//            }
//            cout<<"="<<a[j][n+1]<<endl;
//		}
//		cout<<endl;
    }
    int flag=1;//然而这错的很离谱
    for(int i=1;i<=n;i++){
        if(a[i][i]<=eps){
            if(a[i][n+1]>eps)flag=-1;
            else flag=0;
        }
    }
    if(flag!=1) {
        cout<<flag;
        return 0;
    }
    for(int i=1;i<=n;i++){
        printf("x%d=%.2lf\n",i,a[i][n+1]);
    }
    return 0;
}
2021/10/21 23:30
加载中...