这篇笔记我们将讲解 A = L U A=LU A=LU分解的内容,如果你是第一次学习这块内容可能会对标题中的公式懵逼,我们知道 A A A代表一个矩阵, U U U代表上三角矩阵,那 L L L代表什么呢?看完这篇笔记,你的心中就会有答案了!
我们先来解开第一个疑惑,什么是 A = L U A=LU A=LU分解?从公式中不难看出,它其实就是将一个矩阵 A A A分解成了 L L L和 U U U两个矩阵,我们知道 U U U代表 A A A矩阵消元后得到的上三角矩阵,那 L L L矩阵是个什么玩意呢?
在矩阵消元法这篇笔记中,我们提到过:
( A 32 A 21 ) A = U (A_{32}A_{21})A=U (A32A21)A=U
这里的矩阵 A A A进行了两次行变换消元得到了上三角矩阵 A A A,现在如果我们令 A 32 A 21 = E A_{32}A_{21}=E A32A21=E(也就是将两次行变换合并)就可以得到如下式子:
E A = U EA=U EA=U
现在,如果我们想要将矩阵 E E E移到等式右边,就只需要在两边都左乘上 E − 1 E^{-1} E−1(注意,这里的 E E E是两次行变换矩阵相乘的结果,并不是单位矩阵),得到如下式子:
A = E − 1 U A=E^{-1}U A=E−1U
OK,眼尖的同学已经发现端倪了,这式子咋这么眼熟呢,看一眼咱们标题里的式子, A = L U A=LU A=LU!这里的 L L L不就是 E − 1 E^{-1} E−1吗?没错,这里的矩阵 L L L就是矩阵 E E E的逆矩阵,早在我们学习矩阵消元法时就已经埋下了伏笔!
接下来我们来做一个小练习巩固一下刚刚所学到的知识,让我们把下面这个 2 × 2 2×2 2×2的矩阵分解一下:
A = [ 2 1 8 7 ] A=\begin{bmatrix}2&1\\8&7\end{bmatrix} A=[2817]
第一步,将其进行消元得到上三角矩阵:
U = [ 2 1 0 3 ] U=\begin{bmatrix}2&1\\0&3\end{bmatrix} U=[2013]
第二步:求它的行变换矩阵:
E = [ 1 0 − 4 1 ] E=\begin{bmatrix}1&0\\-4&1\end{bmatrix} E=[1−401]
第三步,求出 L L L,也就是求 E − 1 E^{-1} E−1:
E = [ 1 0 4 1 ] = L E=\begin{bmatrix}1&0\\4&1\end{bmatrix}=L E=[1401]=L
最后,我们就成功将矩阵 A A A分解为了 L L L和 U U U:
A = L U = [ 1 0 4 1 ] [ 2 1 0 3 ] A=LU=\begin{bmatrix}1&0\\4&1\end{bmatrix}\begin{bmatrix}2&1\\0&3\end{bmatrix} A=LU=[1401][2013]
是不是很简单!这里MIT18.06中吉尔伯特教授还介绍了 A = L D A=LD A=LD的形式,也就是将上三角矩阵 U U U再次进行了分解:
A = L U = [ 1 0 4 1 ] [ 2 1 0 3 ] = [ 1 0 4 1 ] [ 2 0 0 3 ] [ 1 1 / 2 0 1 ] A=LU=\begin{bmatrix}1&0\\4&1\end{bmatrix}\begin{bmatrix}2&1\\0&3\end{bmatrix}=\begin{bmatrix}1&0\\4&1\end{bmatrix}\begin{bmatrix}2&0\\0&3\end{bmatrix}\begin{bmatrix}1&1/2\\0&1\end{bmatrix} A=LU=[1401][2013]=[1401][2003][101/21]
这样,这个式子就更加平衡了,左右两边的矩阵主对角线上的元素都为 1 1 1,而中间则是一个对角矩阵,这里作为一个补充知识,咱们就不深入探讨了,感兴趣的同学可以自行查阅资料!
讲完了 A = L U A=LU A=LU分解是什么,你肯定很困惑,我们不是已经有 E A = U EA=U EA=U这个式子了吗,为什么还去求 L L L呢?这不纯纯的“没苦硬吃”嘛!哼哼,马上就让你看看吃苦的好处。
老套路,咱们先来举例子,下面是一个 3 × 3 3×3 3×3的矩阵,我们先求它的 U U U,再求它的 L L L,最后对比一下他们之间的差异:
A = [ 1 2 3 3 7 8 4 9 10 ] A=\begin{bmatrix}1&2&3\\3&7&8\\4&9&10\end{bmatrix} A= 1342793810
首先,将 r o w 2 − 3 × r o w 1 row2-3×row1 row2−3×row1得:
[ 1 2 3 0 1 − 1 4 9 10 ] \begin{bmatrix}1&2&3\\0&1&-1\\4&9&10\end{bmatrix} 1042193−110
将其用矩阵形式表示就是:
A 21 A = [ 1 0 0 − 3 1 0 0 0 1 ] [ 1 2 3 3 7 8 4 9 10 ] = [ 1 2 3 0 1 − 1 4 9 10 ] A_{21}A=\begin{bmatrix}1&0&0\\-3&1&0\\0&0&1\end{bmatrix}\begin{bmatrix}1&2&3\\3&7&8\\4&9&10\end{bmatrix}=\begin{bmatrix}1&2&3\\0&1&-1\\4&9&10\end{bmatrix} A21A= 1−30010001 1342793810 = 1042193−110
第三行也是同理,将 r o w 3 − 4 × r o w 1 row3-4×row1 row3−4×row1得:
[ 1 2 3 0 1 − 1 0 1 − 2 ] \begin{bmatrix}1&2&3\\0&1&-1\\0&1&-2\end{bmatrix} 1002113−1−2
用矩阵形式表示:
A 31 A 21 A = [ 1 0 0 0 1 0 − 4 0 1 ] [ 1 2 3 0 1 − 1 4 9 10 ] = [ 1 2 3 0 1 − 1 0 1 − 2 ] A_{31}A_{21}A=\begin{bmatrix}1&0&0\\0&1&0\\-4&0&1\end{bmatrix}\begin{bmatrix}1&2&3\\0&1&-1\\4&9&10\end{bmatrix}=\begin{bmatrix}1&2&3\\0&1&-1\\0&1&-2\end{bmatrix} A31A21A= 10−4010001 1042193−110 = 1002113−1−2
然后,我们将第三行第二列的元素也消掉得:
[ 1 2 3 0 1 − 1 0 0 − 1 ] \begin{bmatrix}1&2&3\\0&1&-1\\0&0&-1\end{bmatrix} 1002103−1−1
用矩阵形式表示就是:
A 32 A 31 A 21 A = [ 1 0 0 0 1 0 0 − 1 1 ] [ 1 2 3 0 1 − 1 0 1 − 2 ] = [ 1 2 3 0 1 − 1 0 0 − 1 ] = U A_{32}A_{31}A_{21}A=\begin{bmatrix}1&0&0\\0&1&0\\0&-1&1\end{bmatrix}\begin{bmatrix}1&2&3\\0&1&-1\\0&1&-2\end{bmatrix}=\begin{bmatrix}1&2&3\\0&1&-1\\0&0&-1\end{bmatrix}=U A32A31A21A= 10001−1001 1002113−1−2 = 1002103−1−1 =U
OK,大功告成,我们现在已经得到了上三角矩阵 U U U,让我们把三个行变换矩阵合并成一个矩阵 E E E:
E = A 32 A 31 A 21 = [ 1 0 0 0 1 0 0 − 1 1 ] [ 1 0 0 0 1 0 − 4 0 1 ] [ 1 0 0 − 3 1 0 0 0 1 ] = [ 1 0 0 − 3 1 0 − 1 − 1 1 ] E=A_{32}A_{31}A_{21}=\begin{bmatrix}1&0&0\\0&1&0\\0&-1&1\end{bmatrix}\begin{bmatrix}1&0&0\\0&1&0\\-4&0&1\end{bmatrix}\begin{bmatrix}1&0&0\\-3&1&0\\0&0&1\end{bmatrix}=\begin{bmatrix}1&0&0\\-3&1&0\\-1&-1&1\end{bmatrix} E=A32A31A21= 10001−1001 10−4010001 1−30010001 = 1−3−101−1001
求完上三角矩阵之后,让我们来求出 L L L,很简单,我们只要求出 E E E的逆矩阵就可以了,如果忘记了求逆矩阵的方法,可以看看矩阵的逆这篇笔记:
L = E − 1 = [ 1 0 0 3 1 0 4 1 1 ] L=E^{-1}=\begin{bmatrix}1&0&0\\3&1&0\\4&1&1\end{bmatrix} L=E−1= 134011001
这里有一个比较容易出错的地方,我计算的时候就吃了亏,算来算去算不对(自身基础不扎实T-T),就是矩阵乘积的逆的顺序是要倒过来的:
( A 32 A 31 A 21 ) − 1 = A 21 − 1 A 31 − 1 A 32 − 1 (A_{32}A_{31}A_{21})^{-1}=A_{21}^{-1}A_{31}^{-1}A_{32}^{-1} (A32A31A21)−1=A21−1A31−1A32−1
现在,让我们来对比这两个矩阵,你能看出端倪吗?
E = [ 1 0 0 − 3 1 0 − 1 − 1 1 ] , L = [ 1 0 0 3 1 0 4 1 1 ] E=\begin{bmatrix}1&0&0\\-3&1&0\\-1&-1&1\end{bmatrix},L=\begin{bmatrix}1&0&0\\3&1&0\\4&1&1\end{bmatrix} E= 1−3−101−1001 ,L= 134011001
有没有发现 L L L中包含了我们刚刚所作的行变换的信息,而 E E E表示得并不完全,例如第三行第一列的元素就没有表示出行变换的信息,这是为什么呢?
其实,如果我们仔细一想就会发现,第三次的变换是由第三行减去第二次变换后的第二行得到的,这里面本身就包含了第一列的变换,从而导致了这个问题的出现,而逆,也就是反向操作则不会出现这种情况,所以,这也是为什么我们觉得吃这苦值了,因为我们可以直观地看到行变换的信息!
有了之前所有知识的铺垫,现在我想讨论一个很有意思的内容,那就是我们将一个矩阵消元得到上三角矩阵需要进行多少次的运算?再具体一点就是:对于一个 n × n n×n n×n的矩阵,我们需要多少次运算才可以完成消元得到上三角矩阵,我们先来举个例子:
A 100 × 100 = [ a ⋯ c ⋮ ⋱ ⋮ d ⋯ b ] A_{100×100}=\begin{bmatrix}\begin{array}{ccc} a & \cdots & c\\ \vdots & \ddots & \vdots\\ d & \cdots & b \end{array}\end{bmatrix} A100×100= a⋮d⋯⋱⋯c⋮b
这是一个 100 × 100 100×100 100×100的矩阵( n = 100 n=100 n=100),并且矩阵中任何元素都不为 0 0 0,如果我们要对其进行消元,那么就要先将第一列除第一行的元素外的所有元素都变为 0 0 0,这时我们要做几次运算(一次运算包括一次乘法和一次减法)?没错, 100 × 99 100×99 100×99次,为什么?我们不妨这么想,只要是发生改变的元素是不是都被做了一次运算?那么是不是除了第一行以外的元素是不是都发生了改变,也就是说有 99 99 99行元素被改变了,而每行有 100 100 100个元素,所以是 100 × 99 100×99 100×99次。
我们再来思考一下,如果是第二次消元,要做多少次运算呢?没错, 99 × 98 99×98 99×98次,现在我们已经发现规律,为了方便表示,我们将 100 × 99 100×99 100×99近似为 10 0 2 100^{2} 1002,如果我们设运算次数为k,并用 n n n来表示的话,就可以得到如下式子:
k = n 2 + ( n − 1 ) 2 ⋯ + 2 2 + 1 2 k=n^{2}+(n-1)^{2}\cdots+2^{2}+1^{2} k=n2+(n−1)2⋯+22+12
这样我们就得到了计算量的近似值,如果我们学过积分求和,就可以将式子简化为:
k = n 2 + ( n − 1 ) 2 ⋯ + 2 2 + 1 2 = 1 3 n 3 = ∫ n 2 k=n^{2}+(n-1)^{2}\cdots+2^{2}+1^{2}=\frac{1}{3} n^{3}=\int n^2 k=n2+(n−1)2⋯+22+12=31n3=∫n2
没有学过积分的同学看不懂也不用慌,这只是一个补充的知识,我们学习还是以线性代数为主。现在,我们就可以知道我们在进行 A = L U A=LU A=LU分解时,大约要进行多少次运算了!
刚刚我们在求矩阵运算的计算量时,假设矩阵中没有 0 0 0元素,这是为什么呢?因为当有 0 0 0出现时,我们可能会需要将矩阵中的两行交换位置,这时我们就需要转置矩阵了(矩阵左乘置换矩阵后就会改变行的位置,如果你不知道原因,可以看看我之前的笔记)。现在,我们对一个单位矩阵进行位置交换,看看最后会发生哪些有趣的事!
A = [ 1 0 0 0 1 0 0 0 1 ] A=\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix} A= 100010001
首先,让我们思考一下矩阵 A A A一共会有几个置换矩阵?我们来操作一下,首先将 r o w 1 row1 row1和 r o w 2 row2 row2换一下位置得到:
A 1 = [ 0 1 0 1 0 0 0 0 1 ] A_{1}=\begin{bmatrix}0&1&0\\1&0&0\\0&0&1\end{bmatrix} A1= 010100001
然后,将 r o w 1 row1 row1和 r o w 3 row3 row3交换位置,会得到:
A 2 = [ 0 0 1 0 1 0 1 0 0 ] A_{2}=\begin{bmatrix}0&0&1\\0&1&0\\1&0&0\end{bmatrix} A2= 001010100
同理,我们求出其他置换矩阵:
A 3 = [ 1 0 0 0 0 1 0 1 0 ] , A 4 = [ 0 1 0 0 0 1 1 0 0 ] , A 5 = [ 0 0 1 1 0 0 0 1 0 ] , A_{3}=\begin{bmatrix}1&0&0\\0&0&1\\0&1&0\end{bmatrix}, A_{4}=\begin{bmatrix}0&1&0\\0&0&1\\1&0&0\end{bmatrix}, A_{5}=\begin{bmatrix}0&0&1\\1&0&0\\0&1&0\end{bmatrix}, A3= 100001010 ,A4= 001100010 ,A5= 010001100 ,
加上原来的单位矩阵,我们一共获得了六个矩阵,这六个矩阵非常有意思,如果我们任选两个相乘,会发现结果还是在这六个矩阵中,如果求逆呢?结果也还是在这六个矩阵中!比如我们来看矩阵 A 1 A_{1} A1,它交换了一二两行,现在我要变回去要怎么做?是不是再次交换一二两行就行了,也就是说它的逆矩阵等于本身!
我们再来看看 A 1 A_{1} A1的转置矩阵,转置操作很简单,就是把行变成列,列变成行的操作,记作 A T A^{T} AT。那么 A 1 T A_{1}^{T} A1T是什么?没错,是它自己!这就很神奇了,置换矩阵的逆矩阵与转置矩阵相等,多么奇妙的特性啊!
A T = A − 1 A^{T}=A^{-1} AT=A−1
最后,我们来探讨一下置换矩阵的数量,这里如果你尝试自己写出这些置换矩阵就会发现,其实是 3 + 2 + 1 3+2+1 3+2+1得到的,12交换,13交换,23交换,12交换之后再13交换,12交换之后再23交换,有种排列组合的味道,如果没有意识到这一点,你可以自己独立写出这些置换矩阵,就会有感觉。
我们把 3 + 2 + 1 3+2+1 3+2+1写成 3 ! 3! 3!,就可以得出结论:置换矩阵的数量就是 n ! n! n!,比如是 4 × 4 4×4 4×4的置换矩阵数量就是 4 ! = 24 4!=24 4!=24
至此, A = L U A=LU A=LU分解我们就讲完了,是不是感觉也并没有特别难呢?并且学完之后还能把之前的知识再复习一边,哈哈哈哈。
这个系列是我希望通过费曼学习法来更好地巩固学习线性代数,如果有表述上的错误可以私信我,不胜感激!!
B站:ZaneYooo
知乎:ZaneYooo
CSDN:ZaneYooo
稀土掘金:ZaneYooo
微信公众号(建设中)
希望你可以跟我一起构建起强大的知识体系,畅游在知识的海洋,改变世界改变自己!!!