高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。
初等行变换:
(1)对调两行;
(2)以k != 0乘某一行的所有元素;
(3)把某一行所有元素的k倍分别加到另一行对应的元素上去;
高斯消元法的原理是:
若用初等行变换将增广矩阵化为行阶梯阵,则AX = B与CX = D是同解方程组。
所以我们可以用初等行变换把增广矩阵转换为行阶梯阵,然后回代求出方程的解。
以上是线性代数课的回顾,下面来说说高斯消元法在编程中的应用。
首先,先介绍程序中高斯消元法的步骤:
(我们设方程组中方程的个数为n,变元的个数为v,注意:一般情况下是n个方程,n个变元,但是有些题目就故意让方程数与变元数不同)
把方程组转换成增广矩阵。
利用初等行变换来把增广矩阵转换成行阶梯阵。
枚举k从0到n – 1,当前处理的列为 c (初始为0) ,每次找第 k 行以下(包括第k行),c列中元素绝对值最大的列与第k行交换。如果 c 列中的元素全为 0,那么则处理 c + 1 列,k 不变。转换为行阶梯阵,判断解的情况。
① 无解
当方程中出现(0, 0, …, 0, a)的形式,且a != 0时,说明是无解的。
② 唯一解
条件是k = n,即行阶梯阵形成了严格的上三角阵。利用回代逐一求出解集。
③ 无穷解
条件是k < n,即不能形成严格的上三角形,自由变元的个数即为v – k,但有些题目要求判断哪些变元是不缺定的。
这里单独介绍下这种解法:
首先,自由变元有 v - k 个,即不确定的变元至少有 v - 个。我们先把所有的变元视为不确定的。在每个方程中判断不确定变元的个数,如果大于 1 个,则该方程无法求解。如果只有 1 个变元,那么该变元即可求出,即为确定变元。
以上介绍的是求解整数线性方程组的求法,复杂度是O(n3)。浮点数线性方程组的求法类似,但是要在判断是否为0时,加入EPS,以消除精度问题。
模板(暂定):