高斯消元(初识)

其实高斯消元解决的是n元方程组。形如

10*x + 5 * y + 7 * z = 2

5 * x + 4 *y + 11 * z = 3

4 * x+ 3*y + 10 * z = 0

利用线性代数的知识,首先将其中的系数提出:

10 5 7 -2

5 4 11 -3

4 3 10 0

然后对其进行化简得到最简化的行列式,其中矩阵的秩就是非零元的个数,对于其次方程组来说,n - 矩阵的秩 = 自由元的个数

例子:这个示例是一个特殊的示例。矩阵中的系数只能是0,1方程的解x,y,z也只能是0,1。求矩阵的秩

分析:从第0行开始,判断当前第i行第j个数是否是1,如果不是就向下找,如果找的到,那就交换该i行,与找到的那行。如果当前的j,即这一列的数都是零,那么i不增加(反之增加)。找到并交换之后,对在其下面的行,如果第j列是1的话,就将整个行与第i行异或(相当于减去了第i行)。最后i的值就是秩,表示多少个非零行

代码:

int A[maxn][maxn];

 int rank2(int n,int m)
{
    int i = 0,j = 0,r;
    while(i < n && j <m )
    {
        for(r = i; r < n; r ++)
        {
            if(A[r][j])
            {
                break;
            }
        }
        if(A[r][j])
        {
            if(i != r)
            {
                for(int k = 0; k < m; k ++)
                {
                    swap(A[i][k],A[r][k]);
                }

            }
            for(r = i+ 1; r < n; r  ++)
            {
                if(A[r][j])
                {
                    for(int k = 0; k < m; k ++)
                    {
                        A[r][k] ^=A[i][k];
                    }
                }
            }
            i ++;//只有当A[r][j] != 0 时,才有i++。才用到了当前行
        }
        j ++;
    }
    return i;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值