解线性方程终极大法--LU分解

上回我们说到解线性方程 A x = b Ax=b Ax=b,需要先对系数矩阵A不断乘初等变换矩阵直到出现上三角矩阵来达到消元的目的,我们以三阶矩阵为例,在不交换行的情况下,消元过程可表示为

E 32 E 31 E 21 A x = b ⇒ U x = b \color{red}E_{32}E_{31}E_{21}Ax=b⇒Ux=b E32E31E21Ax=bUx=b

然后通过回代的方式就可以解出x的所有值。来看一个具体的例子

[ 1 1 2 2 3 6 3 8 9 ] [ x y z ] = [ 1 2 3 ] \begin{bmatrix} 1 & 1 & 2\\ 2 & 3 & 6 \\ 3 & 8 & 9 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix}= \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} 123138269xyz=123

先给系数阵消元

[ 1 0 0 0 1 0 0 − 5 1 ] [ 1 0 0 − 2 1 0 − 3 0 1 ] [ 1 1 2 2 3 6 3 8 9 ] = [ 1 1 2 0 1 2 0 0 − 7 ] \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0 \\ 0 & -5 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0\\ -2 & 1 & 0 \\ -3 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 1 & 2\\ 2 & 3 & 6 \\ 3 & 8 & 9 \end{bmatrix}=\begin{bmatrix} 1 & 1 & 2\\ 0 & 1 & 2 \\ 0 & 0 & -7 \end{bmatrix} 100015001123010001123138269=100110227

而如果我想将两次变换变为一次,只要将两个消元矩阵相乘即可

[ 1 0 0 0 1 0 0 − 5 1 ] [ 1 0 0 − 2 1 0 − 3 0 1 ] = [ 1 0 0 − 2 1 0 7 − 5 1 ] \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0 \\ 0 & -5 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0\\ -2 & 1 & 0 \\ -3 & 0 & 1 \end{bmatrix}= \begin{bmatrix} 1 & 0 & 0\\ -2 & 1 & 0 \\ 7 & -5 & 1 \end{bmatrix} 100015001123010001=127015001

计算时我们可以发现,计算结果的 [7 -5 1] 是由

− 5 ∗ [ − 2 1 0 ] + 1 ∗ [ − 3 0 1 ] -5*\begin{bmatrix} -2 & 1 & 0 \end{bmatrix}+ 1*\begin{bmatrix} -3 & 0 & 1 \end{bmatrix} 5[210]+1[301]

得到的,一般来说乘就乘了,反正只要能算出结果就行了,但是就是有那么一些聪明的脑子能想出一些更高级的做法,即

LU分解

这是我们之前做消元的过程

E 32 E 31 E 21 A ⇒ U E_{32}E_{31}E_{21}A⇒U E32E31E21AU

他们想出的方法是

E 21 − 1 E 31 − 1 E 32 − 1 E 32 E 31 E 21 A ⇒ E 21 − 1 E 31 − 1 E 32 − 1 U E_{21}^{-1}E_{31}^{-1}E_{32}^{-1}E_{32}E_{31}E_{21}A⇒E_{21}^{-1}E_{31}^{-1}E_{32}^{-1}U E211E311E321E32E31E21AE211E311E321U

这里你可能还看不出来这个方法有什么吊,不就是把逆矩阵挪到右边了吗,我们根据上面那个例子来整理一下LU分解的运算过程。
首先明确一点,求消元的初等变换阵的逆矩阵只要把对应的数变号就可以了

A = [ 1 0 0 4 1 0 0 0 1 ] ⇒ A − 1 = [ 1 0 0 − 4 1 0 0 0 1 ] A=\begin{bmatrix} 1 & 0 & 0 \\ 4 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}⇒ A^{-1}=\begin{bmatrix} 1 & 0 & 0 \\ -4 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} A=140010001A1=140010001

[ 1 1 2 2 3 6 3 8 9 ] = [ 1 0 0 2 1 0 3 0 1 ] [ 1 0 0 0 1 0 0 5 1 ] [ 1 1 2 0 1 2 0 0 − 7 ] \begin{bmatrix} 1 & 1 & 2\\ 2 & 3 & 6 \\ 3 & 8 & 9 \end{bmatrix}= \begin{bmatrix} 1 & 0 & 0\\ 2 & 1 & 0 \\ 3 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0 \\ 0 & 5 & 1 \end{bmatrix} \begin{bmatrix} 1 & 1 & 2\\ 0 & 1 & 2 \\ 0 & 0 & -7 \end{bmatrix} 123138269=123010001100015001100110227

而如果想将两次变换变为一次,即可计算

[ 1 0 0 2 1 0 3 0 1 ] [ 1 0 0 0 1 0 0 5 1 ] = [ 1 0 0 2 1 0 3 5 1 ] \begin{bmatrix} 1 & 0 & 0\\ 2 & 1 & 0 \\ 3 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0 \\ 0 & 5 & 1 \end{bmatrix}= \begin{bmatrix} 1 & 0 & 0\\ 2 & 1 & 0 \\ 3 & 5 & 1 \end{bmatrix} 123010001100015001=123015001

计算结果就是两个矩阵的简单组合,根本不需要乘运算
所以解 A x = b Ax=b Ax=b变为 L U x = b LUx=b LUx=b ,所以先解 L y = b Ly=b Ly=b 再解 U x = y Ux=y Ux=y
来看一个例子(设b为[1,2,3,4])

A  ⁣ =  ⁣ [ 1 1 1 1 1 2 1 2 1 2 2 3 1 2 2 4 ]  ⁣ ⇒  ⁣ [ 1 1 1 1 0 1 0 1 0 1 1 2 0 1 1 3 ]  ⁣ ⇒  ⁣ [ 1 1 1 1 0 1 0 1 0 0 1 1 0 0 1 2 ]  ⁣ ⇒  ⁣ [ 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 ] A\!=\!\begin{bmatrix} 1 & 1 & 1 & 1\\ 1 & 2 & 1 & 2\\ 1 & 2 & 2 & 3\\ 1 & 2 & 2 & 4 \end{bmatrix}\!⇒\! \begin{bmatrix} 1 & 1 & 1 & 1\\ 0 & 1 & 0 & 1\\ 0 & 1 & 1 & 2\\ 0 & 1 & 1 & 3 \end{bmatrix}\!⇒\! \begin{bmatrix} 1 & 1 & 1 & 1\\ 0 & 1 & 0 & 1\\ 0 & 0 & 1 & 1\\ 0 & 0 & 1 & 2 \end{bmatrix}\!⇒\! \begin{bmatrix} 1 & 1 & 1 & 1\\ 0 & 1 & 0 & 1\\ 0 & 0 & 1 & 1\\ 0 & 0 & 0 & 1 \end{bmatrix} A=1111122211221234100011111011112310001100101111121000110010101111

L 为 [ 1 0 0 0 − 1 1 0 0 − 1 0 1 0 − 1 0 0 1 ]  ⁣ ⁣ [ 1 0 0 0 0 1 0 0 0 − 1 1 0 0 − 1 0 1 ]  ⁣ ⁣ [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 − 1 1 ] 逆 矩 阵 的 组 合 L为\begin{bmatrix} 1 & 0 & 0 & 0\\ -1 & 1 & 0 & 0\\ -1 & 0 & 1 & 0\\ -1 & 0 & 0 & 1 \end{bmatrix}\!\! \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & -1 & 1 & 0\\ 0 & -1 & 0 & 1 \end{bmatrix}\!\! \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & -1 & 1 \end{bmatrix}逆矩阵的组合 L111101000010000110000111001000011000010000110001

L = [ 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 ] ⇒ [ 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 ] y = [ 1 2 3 4 ] ⇒ y = [ 1 1 1 1 ] L=\begin{bmatrix} 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0\\ 1 & 1 & 1 & 0\\ 1 & 1 & 1 & 1 \end{bmatrix}⇒ \begin{bmatrix} 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0\\ 1 & 1 & 1 & 0\\ 1 & 1 & 1 & 1 \end{bmatrix}y= \begin{bmatrix} 1\\2\\3\\4 \end{bmatrix}⇒ y=\begin{bmatrix} 1\\1\\1\\1 \end{bmatrix} L=11110111001100011111011100110001y=1234y=1111

⇒ [ 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 ] x = [ 1 1 1 1 ] ⇒ x = [ 0 , 0 , 0 , 1 ] ⇒\begin{bmatrix} 1 & 1 & 1 & 1\\ 0 & 1 & 0 & 1\\ 0 & 0 & 1 & 1\\ 0 & 0 & 0 & 1 \end{bmatrix}x= \begin{bmatrix} 1\\1\\1\\1 \end{bmatrix}⇒x=[0,0,0,1] 1000110010101111x=1111x=[0,0,0,1]

当然,消元过程中还可能出现交换行的情况,所以在LU分解前我们需要给原矩阵做一些交换行的处理,让我们的LU分解可以顺畅的做下去(在消元过程中不再交换)matlab 中有一些算法能做到这一点,在此我们不做讨论(主要是我也不知道:)),我们只给出LU分解的完全体形式
P A = L U \color{red}\enspace PA=LU PA=LU
最后还想说的一点是关于转置, A i j = A j i T A_{ij}=A^{T}_{ji} Aij=AjiT 这样的概念不必多说,我想聊几个有很好特性的矩阵,比如交换行的矩阵P,它们满足
A T = A − 1 A^T=A^{-1} AT=A1
且阶数固定时这类矩阵的个数满足n!
比如三阶矩阵有6个这样的矩阵
[ 1 0 0 0 1 0 0 0 1 ] [ 1 0 0 0 0 1 0 1 0 ] [ 0 1 0 1 0 0 0 0 1 ] [ 0 1 0 0 0 1 1 0 0 ] [ 0 0 1 1 0 0 0 1 0 ] [ 0 0 1 0 1 0 1 0 0 ] \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 0 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 0 \end{bmatrix} 100010001100001010010100001001100010010001100001010100

还有一类矩阵满足 A T = A A^{T}=A AT=A ,即对称阵,而任何矩阵乘自己的转置一定得到对称阵,反之亦然,用公式描述为

A A T    i s    s y m m e t r i c ⋙ A    i s    s y m m e t r i c ⇒ ∃ B s . t . A = B ∗ B T AA^{T}\;is\;symmetric \ggg A\;is\;symmetric⇒\exist Bs.t.\enspace A=B*B^T AATissymmetricAissymmetricBs.t.A=BBT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值