高斯消元

Posted lhm-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高斯消元相关的知识,希望对你有一定的参考价值。

高斯消元用来求解线性方程组

构造增广矩阵,然后对增广矩阵消元

每次选取这一列绝对值最大的值作为主元,可以避免精度误差,如果发现这一列都为(0),则方程无解

然后将主元系数化为(1),矩阵化为上三角矩阵后,便可以回代求解

(code:)

void gauss()
{
    for(int i=1;i<=n;++i)
    {
        int ma=i;
        for(int j=i+1;j<=n;++j)
            if(fabs(a[j][i])>fabs(a[ma][i]))
                ma=j;
        swap(a[ma],a[i]);
        if(fabs(a[i][i])<eps) continue;
        double tmp=a[i][i];
        for(int j=1;j<=n+1;++j) a[i][j]/=tmp;
        for(int j=1;j<=n;++j)
        {
            if(i==j) continue;
            double tmp=a[j][i];
            for(int k=1;k<=n+1;++k)
                a[j][k]-=a[i][k]*tmp;
        }
    }
    for(int i=1;i<=n;++i)
    {
        int num=0;
        for(int j=1;j<=n+1;++j)
            if(fabs(a[i][j])<eps) 
                num++;
        if(num==n+1) inf_flag=true;
        if(num==n&&fabs(a[i][n+1])>=eps) no_flag=true;
    }
    if(inf_flag||no_flag) return;
    for(int i=n-1;i;--i)
        for(int j=i+1;j<=n;++j)
            a[i][n+1]-=a[j][n+1]*a[i][j];
}

以上是关于高斯消元的主要内容,如果未能解决你的问题,请参考以下文章

高斯消元学习

高斯消元模板

高斯消元

bzoj1013高斯消元

题解 P3389 模板高斯消元法

[算法模板]高斯消元