高斯消元法(模板)

#include<cstdio>
#include<cmath>
const double EPS=1E-8;
double B[110][110];
int n;

int main(){
    scanf("%d",&n);
    for (int i=0;i<n;i++){
        for (int j=0;j<n;j++)
            scanf("%lf",&B[i][j]);//读入系数
        scanf("%lf",&B[i][n]);//读入值
    }
    for (int i=0;i<n;i++){
        int pivot=i;
        for(int j=i;j<n;j++)//选择一个当前位置系数绝对值最大的调换过来,防止误差
            if (fabs(B[j][i]-B[pivot][i])<=EPS) pivot=j;
        for(int j=0;j<=n;j++){//交换操作,要将所有的全部交换过来(或者 swap)
            double t=B[i][j];
            B[i][j]=B[pivot][j];
            B[pivot][j]=t;
        }
        if(fabs(B[i][i])<=EPS){//最大值等于0则说明该列都为0,肯定无解  (因为上一步把最大的放在了第i行) 
            printf("No Solution\n");
            return 0;
        }
        for(int j=i+1;j<=n;j++) 
			B[i][j]/=B[i][i];//将该位的系数变为1
        for(int j=0;j<n;j++)
            if (i!=j)
                for(int k=i+1;k<=n;k++) 
					B[j][k]-=B[j][i]*B[i][k];//将其他方程用加减法减去系数值
    }
    for (int i=0;i<n;i++) 
		printf("%.2lf\n",B[i][n]);//最后输出结果。
    return 0;
}

高斯消元法详细解释: https://www.luogu.com.cn/blog/pks-LOVING/p3389-mu-ban-gao-si-xiao-yuan-fa

(就线性代数)

P3389

发布了87 篇原创文章 · 获赞 56 · 访问量 9134

猜你喜欢

转载自blog.csdn.net/Ven21959/article/details/104003416