数论 [高斯消元学习]

高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵

初等行变换

                     (1)对调两行;

                     (2)以k != 0乘某一行的所有元素;

                     (3)把某一行所有元素的k倍分别加到另一行对应的元素上去;

高斯消元法的原理是: 

若用初等行变换增广矩阵化为行阶梯阵,则AX = B与CX = D是同解方程组。 
所以我们可以用初等行变换把增广矩阵转换为行阶梯阵,然后回代求出方程的解。

以上是线性代数课的回顾,下面来说说高斯消元法在编程中的应用。

首先,先介绍程序中高斯消元法的步骤: 
(我们设方程组中方程的个数为n,变元的个数为v,注意:一般情况下是n个方程,n个变元,但是有些题目就故意让方程数与变元数不同)

  1. 把方程组转换成增广矩阵

  2. 利用初等行变换来把增广矩阵转换成行阶梯阵。 
    枚举k从0到n – 1,当前处理的列为 c (初始为0) ,每次找第 k 行以下(包括第k行),c列中元素绝对值最大的列与第k行交换。如果 c 列中的元素全为 0,那么则处理 c + 1 列,k 不变。

  3. 转换为行阶梯阵,判断解的情况。

无解 
当方程中出现(0, 0, …, 0, a)的形式,且a != 0时,说明是无解的。

唯一解 
条件是k = n,即行阶梯阵形成了严格的上三角阵。利用回代逐一求出解集。

无穷解
条件是k < n,即不能形成严格的上三角形,自由变元的个数即为v – k,但有些题目要求判断哪些变元是不缺定的。 
这里单独介绍下这种解法: 
首先,自由变元有 v - k 个,即不确定的变元至少有 v -  个。我们先把所有的变元视为不确定的。在每个方程中判断不确定变元的个数,如果大于 1 个,则该方程无法求解。如果只有 1 个变元,那么该变元即可求出,即为确定变元。

以上介绍的是求解整数线性方程组的求法,复杂度是O(n3)。浮点数线性方程组的求法类似,但是要在判断是否为0时,加入EPS,以消除精度问题

模板(暂定)

猜你喜欢

转载自blog.csdn.net/weixin_39792252/article/details/81100875