码迷,mamicode.com
首页 > 其他好文 > 详细

高斯消元

时间:2020-01-22 21:34:33      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:pre   n+1   构造   矩阵消元   mat   方程组   ||   line   eps   

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

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

每次选取这一列绝对值最大的值作为主元,可以避免精度误差,如果发现这一列都为\(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];
}

高斯消元

标签:pre   n+1   构造   矩阵消元   mat   方程组   ||   line   eps   

原文地址:https://www.cnblogs.com/lhm-/p/12229653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!