算法基础课——第四章 数学知识(三)

image-20210807031457384

第四章 数学知识(三)


如无特殊说明,所有数均为正整数.


高斯消元


  • 高斯消元是用来解方程的,可以在 O ( n 3 ) O(n^3) O(n3)​ 时间复杂度内求解一个 n n n 个方程 n n n 个未知数 的多元线性方程组.

  • 方程组的解有三种情况: ① ① 无解、 ② ② 无穷多组解、 ③ ③ 唯一解.

  • 样例方程组为 { x 1 + 2 x 2 − x 3 = − 6 2 x 1 + x 2 − 3 x 3 = − 9 − x 1 − x 2 + 2 x 3 = 7 \begin{cases}x_1+2x_2-x_3=-6\\2x_1+x_2-3x_3=-9\\-x_1-x_2+2x_3=7\end{cases} x1+2x2x3=62x1+x23x3=9x1x2+2x3=7​​​,答案为​ { x 1 = 1 x 2 = − 2 x 3 = 3 \begin{cases}x_1=1\\x_2=-2\\x_3=3\end{cases} x1=1x2=2x3=3

  • 高斯消元法应用了线性代数中矩阵的初等行变换.

这里一些比较复杂的线性代数知识就不涉及了,只介绍高斯消元的做法和原理;
虽然有线性代数的术语,但是所运用的原理还是初中和小学的知识.

  • 将系数抽出来,得到一个 n × ( n + 1 ) n\times (n+1) n×(n+1)​​ 的系数矩阵,对系数矩阵可以做一些初等行变换的操作;

  • 样例方程组的系数矩阵为 ( 1 2 − 1 − 6 2 1 − 3 − 9 − 1 − 1 2 7 ) \begin{pmatrix}1 & 2 & -1 & -6\\2 & 1 & -3 & -9\\-1 & -1 & 2 & 7\end{pmatrix} 121211132697​​

  • 初等行变换一共有三种,这三种行列变换可以保证不影响整个方程组的解

    1. 某一行乘一个非零的数(等价于方程两边乘一个相同的数)
    2. 交换某两行(等价于把方程组中某两个数交换一下位置)
    3. 把某行的若干倍加到另一行上去(等价于某个方程的若干倍加到另一个方程上去)
  • 通过这三种基本操作,把矩阵化简为一个上三角的形式 { a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋯ a n n x n = b n \left\{\begin{aligned}a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n=b_1 \\ a_{22}x_2+\cdots+a_{2n}x_n=b_2 \\ \cdots\\ a_{nn}x_n=b_n\end{aligned}\right. a11x1+a12x2++a1nxn=b1a22x2++a2nxn=b2annxn=bn​​

变成上三角有什么好处呢?
首先 x n x_n xn​ 可以直接求出;
x n − 1 x_{n-1} xn1​ 的方程为 a n − 1 , n x n − 1 + a n n x n = b n − 1 a_{n-1,n}x_{n-1}+a_{nn}x_n=b_{n-1} an1,nxn1+annxn=bn1​,通过 x n x_n xn 就可以推出 x n − 1 x_{n-1} xn1 的值;
以此类推,就可求出 所有未知数的值了.

  • 什么情况会没有解?
    • 如果通过化简,矩阵恰好是一个完美的阶梯型(即 a i i a_{ii} aii​ 都存在),完美阶梯型就会有唯一解
    • 如果是不完美的阶梯型,而且出现类似 0 = b i 0=b_i 0=bi​​​ 的方程,则无解;
    • 如果是不完美的阶梯型,而且出现类似 0 = 0 0=0 0=0​​ 的方程,则有无穷多组解.

具体算法

  • 高斯消元是一个迭代的过程,需要枚举 1 ∼ n − 1 1\sim n-1 1n1​ 列,假设当前枚举到第 c c c​ 列​​​​:

    1. 找到第 c c c 列中绝对值最大的一行;
    2. 将该行换到第 c c c 行上去;
    3. 将该行第一个数变成 1 1 1;​
    4. 将下面所有行的第 c c c 列都消成 0 0 0.
  • 遍历到第 1 1 1 列:

    • ( 1 2 − 1 − 6 2 1 − 3 − 9 − 1 − 1 2 7 ) → 1.2. ( 2 1 − 3 − 9 1 2 − 1 − 6 − 1 − 1 2 7 ) → 3. ( 1 0.5 − 1.5 − 4.5 1 2 − 1 − 6 − 1 − 1 2 7 ) → 4. ( 1 0.5 − 1.5 − 4.5 0 1.5 0.5 − 1.5 0 − 0.5 0.5 2.5 ) \begin{pmatrix}1 & 2 & -1 & -6\\2 & 1 & -3 & -9\\-1 & -1 & 2 & 7\end{pmatrix} \overset{1.2.}{\to} \begin{pmatrix}2 & 1 & -3 & -9\\1 & 2 & -1 & -6\\-1 & -1 & 2 & 7\end{pmatrix} \overset{3.}{\to} \begin{pmatrix}1 & 0.5 & -1.5 & -4.5\\1 & 2 & -1 & -6\\-1 & -1 & 2 & 7\end{pmatrix} \overset{4.}{\to} \begin{pmatrix}1 & 0.5 & -1.5 & -4.5\\0 & 1.5 & 0.5 & -1.5\\0 & -0.5 & 0.5 & 2.5\end{pmatrix} 1212111326971.2.2111213129673.1110.5211.5124.5674.1000.51.50.51.50.50.54.51.52.5​​
  • 遍历到第 2 2 2​ ​列:

    • ( 1 0.5 − 1.5 − 4.5 0 1.5 0.5 − 1.5 0 − 0.5 0.5 2.5 ) → 3. ( 1 0.5 − 1.5 − 4.5 0 1 1 3 − 1 0 − 0.5 0.5 2.5 ) → 4. ( 1 0.5 − 1.5 − 4.5 0 1 1 3 − 1 0 0 3 2 2 ) \begin{pmatrix}1 & 0.5 & -1.5 & -4.5\\0 & 1.5 & 0.5 & -1.5\\0 & -0.5 & 0.5 & 2.5\end{pmatrix} \overset{3.}{\to} \begin{pmatrix}1 & 0.5 & -1.5 & -4.5\\0 & 1 & \frac{1}{3} & -1\\0 & -0.5 & 0.5 & 2.5\end{pmatrix} \overset{4.}{\to} \begin{pmatrix}1 & 0.5 & -1.5 & -4.5\\0 & 1 & \frac{1}{3} & -1\\0 & 0 & \frac{3}{2} & 2\end{pmatrix} 1000.51.50.51.50.50.54.51.52.53.1000.510.51.5310.54.512.54.1000.5101.531234.512​​
  • 遍历到第 3 3 3​ 列:

    • ( 1 0.5 − 1.5 − 4.5 0 1 1 3 − 1 0 0 3 2 2 ) → 3. ( 1 0.5 − 1.5 − 4.5 0 1 1 3 − 1 0 0 1 3 ) \begin{pmatrix}1 & 0.5 & -1.5 & -4.5\\0 & 1 & \frac{1}{3} & -1\\0 & 0 & \frac{3}{2} & 2\end{pmatrix}\overset{3.}{\to} \begin{pmatrix}1 & 0.5 & -1.5 & -4.5\\0 & 1 & \frac{1}{3} & -1\\0 & 0 & 1 & 3\end{pmatrix} 1000.5101.531234.5123.1000.5101.53114.513
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值