• 算法笔记:高斯消元


    (捂脸)花了一晚上看了个大概 (感觉只有自己这么鶸了)

    描述

    高斯消元是一种求解线性方程组的方法

    定义

    线性方程组:线性方程组是各个方程关于未知量均为一次的方程组

    系数矩阵:用各未知数的系数所组成的矩阵(字面意思)

    增广矩阵:在系数矩阵的基础上再加上方程组的常数(结果)

    初等行变换:解决增广矩阵的方法

    阶梯形矩阵:类似倒立的阶梯(但是我们利用初等行变换也可以变成向上的阶梯)这个会在下面的方程组中说明

    上三角矩阵:是由阶梯形矩阵中的系数部分组成的 是个三角形

    简化阶梯形矩阵:将阶梯形矩阵最简化

    对角矩阵:(字面意思)这个会在下方证明中说明(看图辨法)

    而我们要学习的高斯消元算法,就是通过初等行变换增广矩阵变化为简化阶梯形矩阵线性方程组求解的算法

    讲解

    当我们有一个方程组是
    (left{egin{matrix} x_{1}+2x_{2}-x_{3}=-6\ 2x_{1}+x_{2}-3x_{3}=-9\ -x_{1}-x_{2}+2x_{3}=7 end{matrix} ight.)
    我们可以将其转化为我们的增广矩阵 转化后如下
    (egin{bmatrix} 1 & 2 & -1 & | & -6 \ 2 & 1 & -3 & | & -9\ -1 & -1 & 2 &| & 7 end{bmatrix})
    然后我们就需要使用初等行变换来进行求解
    初等行变换的操作有三个

    • 用一个非0的数乘某一行
    • 把其中一行的若干倍加到另一行上
    • 交换两行的位置
      于是 我们就可以得到下方的求解

    原式子
    (egin{bmatrix} 1 & 2 & -1 & | & -6 \ 2 & 1 & -3 & | & -9\ -1 & -1 & 2 &| & 7 end{bmatrix})

    二行 = 二行 + 一行 * -2
    (egin{bmatrix} 1 & 2 & -1 & -6 \ 0 & -3 & -1 & 3\ -1 & -1 & 2 & 7 end{bmatrix})

    三行 = 三行 + 一行 * 1
    (egin{bmatrix} 1 & 2 & -1 & -6 \ 0 & -3 & -1 & 3\ 0 & 1 & 1 & 1 end{bmatrix})

    二、三行换行
    (egin{bmatrix} 1 & 2 & -1 & -6 \ 0 & 1 & 1 & 1\ 0 & -3 & -1 & 3 end{bmatrix})

    三行 = 三行 + 二行 * 3
    (egin{bmatrix} 1 & 2 & -1 & -6 \ 0 & 1 & 1 & 1\ 0 & 0 & 2 & 6 end{bmatrix})

    三行 = 三行 * (frac{1}{2})
    (egin{bmatrix} 1 & 2 & -1 & -6 \ 0 & 1 & 1 & 1\ 0 & 0 & 1 & 3 end{bmatrix})

    于是 我们就完成了我们的阶梯形矩阵的化简

    然后我们还原这个式子
    (egin{bmatrix} x_{1}+2x_{2}-x_{3}=-6 \ x_{2}+x_{3}=1\ x_{3} = 3 end{bmatrix})
    是不是就变的很简单就可以解出来了?(口算

    但是 其实这个式子还仅仅是阶梯形矩阵我们还有一个对角矩阵,所以我们继续化简

    二行 = 二行 + 三行 * -1
    (egin{bmatrix} 1 & 2 & -1 & -6 \ 0 & 1 & 0 & -2\ 0 & 0 & 1 & 3 end{bmatrix})

    **一行 = 一行 + 三行 * 1 **
    (egin{bmatrix} 1 & 2 & 0 & -3 \ 0 & 1 & 0 & -2\ 0 & 0 & 1 & 3 end{bmatrix})

    一行 = 一行 + 二行 * -2
    (egin{bmatrix} 1 & 0 & 0 & 1 \ 0 & 1 & 0 & -2\ 0 & 0 & 1 & 3 end{bmatrix})

    于是 我们最终的式子就是
    (egin{bmatrix} 1 & 0 & 0 & | & 1 \ 0 & 1 & 0 & | & -2\ 0 & 0 & 1 &| & 3 end{bmatrix})
    因为系数的排列就是一条对角线 所以我们称作对角矩阵
    于是我们就完成了这次高斯消元的计算


    但是!
    上面我们所举到的例子是一种比较理想的情况
    事实上,我们求解高斯消元的时候会和拼魔方一样,遇到各种各样的情况 我们仍然需要分类讨论
    比如,在高斯消元的过程中,我们可能会计算出 0 = d(非0常数)这样的方程 这样就代表某些方程间有矛盾,原方程无解
    再如 我们可能找不到一个(x_{i})的系数的值是非0的,但(x_{1})~(x_{i-1})的系数都是0的方程
    见此方程
    (egin{bmatrix} x_{1}+2x_{2}-x_{3}=3 \ 2x_{1}+4x_{2}-8x_{3}=0\ -x_{1}-2x_{2}+6x_{3}=2 end{bmatrix})

    化简
    (egin{bmatrix} 1 & 2 & -1 & 3 \ 2 & 4 & -8 & 0\ -1 & -2 & 6 & 2 end{bmatrix})

    **二行 = 二行 + 一行 * -2 **
    (egin{bmatrix} 1 & 2 & -1 & 3 \ 0 & 0 & -6 & -6\ -1 & -2 & 6 & 2 end{bmatrix})

    **三行 = 三行 + 一行 * 1 **
    (egin{bmatrix} 1 & 2 & -1 & 3 \ 0 & 0 & -6 & -6\ 0 & 0 & 5 & 5 end{bmatrix})

    三行 = 三行 + 二行 * 1
    (egin{bmatrix} 1 & 2 & -1 & 3 \ 0 & 0 & -6 & -6\ 0 & 0 & -1 & -1 end{bmatrix})

    二行 = 二行 + 三行 * -7
    (egin{bmatrix} 1 & 2 & -1 & 3 \ 0 & 0 & 1 & 1\ 0 & 0 & -1 & -1 end{bmatrix})

    三行 = 三行 + 二行 * 1
    (egin{bmatrix} 1 & 2 & -1 & 3 \ 0 & 0 & 1 & 1\ 0 & 0 & 0 & 0 end{bmatrix})

    一行 = 一行 + 二行 * 1
    (egin{bmatrix} 1 & 2 & 0 & 4 \ 0 & 0 & 1 & 1\ 0 & 0 & 0 & 0 end{bmatrix})

    解完毕~
    为了更好的理解 我们这里再用初等行变换将二三行换行
    (egin{bmatrix} 1 & 2 & 0 & 4 \ 0 & 0 & 0 & 0\ 0 & 0 & 1 & 1 end{bmatrix})
    在这个式子中我们找不到 (x_{2})非0,但(x_{1})的系数为0的方程 我们将这种式子可以写成
    (left{egin{matrix} x_{1}=4-2x_{2}\ x_{3}=1 end{matrix} ight.)

    (x_{2})取任何值,都可以计算出一个对应的(x_{1}),并且满足原方程组。换言而之,方程组都无穷多个解
    于是,我们把(x_{1}),(x_{3})这样的未知量称为主元,把(x_{2})这样的未知量称为自由元

    总结

    根据上面的证明,我们可以发现,对于每个主元,整个简化阶梯形矩阵中有且仅有一个位置((i,j)),满足该主元的系数非0。
    (j)列的其他位置都是0,第(i)行的第(1) ~ (j-1)列都是0

    综上所述吗,在高斯消元完成后,若存在系数全为0、常数不为0的行,则方程组无解。若系数不全为0的行恰好有(n)个,则说明主元(n)个,方程组有唯一解。
    若系数不全为0的行有(k<n)个,则说明主元(k)个,自由元有(n-k)个,方程组有无穷多个解

    代码坑后面填(懒)

  • 相关阅读:
    My 1st webUI try
    option(recompile)
    Add&Delete WindowService
    powershell
    bootstrap模态框,等待遮盖层
    spring-boot通过@Scheduled配置定时任务
    bootstrap-table的一些参数配置
    $('xx')[0].files[0]的意思
    Go国内镜像
    基础语法-defer使用(12)
  • 原文地址:https://www.cnblogs.com/Steinway/p/9236850.html
Copyright © 2020-2023  润新知