高斯消元法

高斯消元(by wyx)

引入

高斯消元法(Gauss–Jordan elimination)是求解线性方程组的经典算法,它在当代数学中有着重要的地位和价值,是线性代数课程教学的重要组成部分。

高斯消元法除了用于线性方程组求解外,还可以用于行列式计算、求矩阵的逆,以及其他计算机和工程方面。

——oiwiki

正题

前置知识:解方程组

比如说现在有一个方程组:

{ 4 x + 3 y = 10 2 x + 5 y = 12 \begin{cases} 4x+3y=10 \\ 2x+5y=12 \end{cases} {4x+3y=102x+5y=12

第一步,将第一个方程 × \times × 2 可得 4 x + 10 y = 24 4x+10y=24 4x+10y=24

然后把第二个方程与第一个方程相减得 7 y = 14 7y=14 7y=14

这个时候,我们可以直接得出 y = 2 y=2 y=2

然后把 y = 2 y=2 y=2 代入到第一个方程中得 4 x + 6 = 10 4x+6=10 4x+6=10

可以得出 x = 1 x=1 x=1

∴ \therefore 方程的解是

{ x = 1 y = 2 \begin{cases} x=1\\y=2 \end{cases} {x=1y=2

高斯消元

上述得方法是解方程组得基本方法,即代入消元加减消元

这个方法得通用性很强,而高斯消元就是这两种方法得应用。

下面举一个例子

{ 6 x 1 + 8 x 2 + 4 x 3 = 22 3 x 1 + 2 x 2 + 12 x 3 = 29 2 x 1 + 4 x 2 + 6 x 3 = 18 \begin{cases} 6x_1+8x_2+4x_3=22 \\ 3x_1+2x_2+12x_3=29 \\ 2x_1+4x_2+6x_3=18 \end{cases} 6x1+8x2+4x3=223x1+2x2+12x3=292x1+4x2+6x3=18

把上面得方程组转化为矩阵是

[ 6 8 4 ∣ 22 3 2 12 ∣ 29 2 4 6 ∣ 18 ] \begin{bmatrix} 6 & 8 & 4 & | & 22 \\ 3 & 2 & 12 & | & 29 \\ 2 & 4 & 6 & | & 18 \\ \end{bmatrix} 6328244126222918

矩阵左边表示每一项得系数,右边表示结果。

首先,我们可以通过第一行消掉第二行和第三行得第一项

具体的,就是说先把第二行 × \times × 2 2 2 ,然后和第一行减法消元,第三行也是一样的做法,先 × \times × 3 3 3 再减法消元。

然后,我们就得到了一个新的矩阵

[ 6 8 4 ∣ 22 0 − 4 20 ∣ 36 0 4 14 ∣ 32 ] \begin{bmatrix} 6 & 8 & 4 & | & 22 \\ 0 & -4 & 20 & | & 36 \\ 0 & 4 & 14 & | & 32 \\ \end{bmatrix} 60084442014223632

这个时候,发现只有第一行含有 x 1 x_1 x1 这一项,同时我们也处理完了第一条方程,之后就先不管它。

接着我们用相同得办法解决 x 2 x_2 x2 这一项。

把第三行 × \times × ( − 1 ) (-1) (1) ,再和第二行做减法消元得

[ 6 8 4 ∣ 22 0 − 4 20 ∣ 36 0 0 − 34 ∣ − 68 ] \begin{bmatrix} 6 & 8 & 4 & | & 22 \\ 0 & -4 & 20 & | & 36 \\ 0 & 0 & -34 & | & -68 \\ \end{bmatrix} 60084042034223668

关键

这个时候,把矩阵重新转化为方程组得到

{ 6 x 1 + 8 x 2 + 4 x 3 = 22 − 4 x 2 + 20 x 3 = 36 − 34 x 3 = − 68 \begin{cases} 6x_1+8x_2+4x_3=22 \\ -4x_2+20x_3=36 \\ -34x_3=-68 \end{cases} 6x1+8x2+4x3=224x2+20x3=3634x3=68

根据第三条方程可得 x 3 = 2 x_3=2 x3=2

接着把 x 3 = 2 x_3=2 x3=2 代入上面一条方程中得 − 4 x 2 + 40 = 36 -4x_2+40=36 4x2+40=36

解得 x 2 = 1 x_2=1 x2=1

然后把 x 2 x_2 x2 , x 3 x_3 x3 一起代入第一条方程中

解得 x 1 = 1 x_1=1 x1=1

∴ \therefore 方程的解是

{ x 1 = 1 x 2 = 1 x 3 = 2 \begin{cases} x_1=1\\x_2=1\\x_3=2 \end{cases} x1=1x2=1x3=2

总结方法

首先,先把方程变成一个矩阵

[ a 1 , 1 a 1 , 2 a 1 , 3 … a 1 , n ∣ a 1 , n + 1 a 2 , 1 a 2 , 2 a 2 , 3 … a 2 , n ∣ a 2 , n + 1 ⋮ ⋮ ⋮ ⋱ ⋮ ∣ ⋮ a n , 1 a n , 2 a n , 3 … a n , n ∣ a n , n + 1 ] \begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} & \ldots & a_{1,n} & | & a_{1,n+1} \\ a_{2,1} & a_{2,2} & a_{2,3} & \ldots & a_{2,n} & | & a_{2,n+1} \\ \vdots & \vdots & \vdots & \ddots & \vdots & | & \vdots \\ a_{n,1} & a_{n,2} & a_{n,3} & \ldots & a_{n,n} & | & a_{n,n+1}\end{bmatrix} a1,1a2,1an,1a1,2a2,2an,2a1,3a2,3an,3a1,na2,nan,na1,n+1a2,n+1an,n+1

然后,我们把它变成上三角矩阵,即

[ a 1 , 1 ′ a 1 , 2 ′ a 1 , 3 ′ … a 1 , n ′ ∣ a 1 , n + 1 ′ 0 a 2 , 2 ′ a 2 , 3 ′ … a 2 , n ′ ∣ a 2 , n + 1 ′ ⋮ ⋮ ⋮ ⋱ ⋮ ∣ ⋮ 0 0 0 … a n , n ′ ∣ a n , n + 1 ′ ] \begin{bmatrix} a_{1,1}' & a_{1,2}' & a_{1,3}' & \ldots & a_{1,n}' & | & a_{1,n+1}' \\ 0 & a_{2,2}' & a_{2,3}' & \ldots & a_{2,n}' & | & a_{2,n+1}' \\ \vdots & \vdots & \vdots & \ddots & \vdots & | & \vdots \\ 0 & 0 & 0 & \ldots & a_{n,n}' & | & a_{n,n+1}'\end{bmatrix} a1,100a1,2a2,20a1,3a2,30a1,na2,nan,na1,n+1a2,n+1an,n+1

接着,我们可以从下往上依次求解每个未知数。

判断无解或有无数解

前置知识 含参方程

对于一个一元一次方程

a x = b ax=b ax=b

  • a ≠ 0 a \neq 0 a=0 时,方程有唯一解

  • a = 0 a=0 a=0 b = 0 b=0 b=0 时,方程有无数个解

  • a = 0 a=0 a=0 b ≠ 0 b \neq 0 b=0 时,方程无解

把上面三条性质扩展到高斯消元中。

如果有一行在消元后左边的系数全变成了 0 0 0

  • 当右边的结果等于 0 0 0 时,方程有无数个解

  • 当右边的结果不等于 0 0 0 时,方程无解

切记,无解的优先级高于有无数个解。

例题

P3389 【模板】高斯消元法

P2455 [SDOI2006] 线性方程组

P2447 [SDOI2010] 外星千足虫

[ABC366G] XOR Neighbors

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值