高斯消元模板

int Gauss(int equ,int var){//equ方程个数,var变量个数
    int row,col;
    for(row=0,col=0;col<var&&row<equ;col++,row++){
        int max_r=row;
        for(int i=row+1;i<equ;i++){
            if(fabs(A[i][col])>fabs(A[max_r][col])){
                max_r=i;
            }
        }
        if(max_r!=row){
            for(int j=col;j<var+1;j++)
                swap(A[row][j],A[max_r][j]);
        }
        if(fabs(A[row][col])<eps){
            row--;continue;
        }
        for(int i=row+1;i<equ;i++){
            if(fabs(A[i][col])<eps)continue;
            for(int j=col+1;j<var+1;j++){
                A[i][j]=(A[i][j]*A[row][col]-A[i][col]*A[row][j])/A[row][col];
            }
            A[i][col]=0;
        }
    }
    for(int i=row;i<equ;i++){
        if(fabs(A[i][col])>eps)return -1;
    }
    if(row<var)return 0;
    for(int i=var-1;i>=0;i--){//计算唯一解。
        double tmp=0;
        for(int j=i+1;j<var;j++){
            tmp+=A[i][j]*x[j];
        }
        x[i]=(A[i][var]-tmp)/A[i][i];
    }
    return 1;
}

你可能感兴趣的:(gauss)