Lecture3 矩阵乘法与逆
1. 矩阵乘法及其5种方式
- 1. 对于结果矩阵中的特定元素单个计算(entry)
假定矩阵乘法为:
AB=CAB = CAB=C
当Am×n,Bn×sA_{m\times n},B_{n\times s}Am×n,Bn×s时矩阵可乘(内标相同),且得到结果Cm×sC_{m\times s}Cm×s。
C中iii行jjj列的元素为:
Ci,j=(Row i ofA)⋅(Column j ofB)=∑k=1naikbkjC_{i,j} = (Row \ i \ of A)\cdot(Column \ j \ of B)=\sum_{k=1}^n a_{ik}b_{kj}Ci,j=(Row i ofA)⋅(Column j ofB)=∑k=1naikbkj - 2,3. 整行和整列去考虑
可以将BBB的列当成向量单独考虑,AAA乘以BBB的每个列向量构成新矩阵CCC的每个列。即CCC的每一列是AAA中列向量的线性组合。
同理AAA的每一行乘以BBB构成CCC的每一行。即CCC中的每行为BBB中行向量的线性组合。 - 4. 用A的列乘以B的行
AB=sum of{(Columns of A)⋅(Rows of B)}AB = sum \ of \{(Columns \ of \ A)\cdot(Rows \ of \ B)\}AB=sum of{(Columns of A)⋅(Rows of B)}
A中的列向量与B中的行向量相乘会得到一个m×sm\times sm×s的矩阵。将其组合相加可以得到ABABAB。 - 5.利用矩阵分块
只要将矩阵的大小按照符合乘法规则的要求来划分,可以得到:
AB=[A1∣A2−−−A3∣A4]⋅[B1∣B2−−−B3∣B4]=[A1B1+A2B3∣A1B2+A2B4−−−−−−−−−−−−A3B1+A4B3∣A3B2+A4B4] AB= \begin{bmatrix} A_1&|&A_2\\ -&-&-\\ A_3&|&A_4\\ \end{bmatrix}\cdot \begin{bmatrix} B_1&|&B_2\\ -&-&-\\ B_3&|&B_4\\ \end{bmatrix}= \begin{bmatrix} A_1B_1+A_2B_3&|&A_1B_2+A_2B_4\\ -----&--&-----\\ A_3B_1+A_4B_3&|&A_3B_2+A_4B_4\\ \end{bmatrix} AB=⎣⎡A1−A3∣−∣A2−A4⎦⎤⋅⎣⎡B1−B3∣−∣B2−B4⎦⎤=⎣⎡A1B1+A2B3−−−−−A3B1+A4B3∣−−∣A1B2+A2B4−−−−−A3B2+A4B4⎦⎤
2. 矩阵的逆(inverse)
只有方阵才存在逆。
AA−1=A−1A=I
AA^{-1} = A^{-1}A = I
AA−1=A−1A=I
若一个矩阵存在逆,称其可逆(invertible)或非奇异(non-singular)矩阵的左逆和右逆相等,均表示为A−1A^{-1}A−1。
- 矩阵的可逆性
A=[1326]A = \begin{bmatrix} 1&3\\ 2&6\\ \end{bmatrix}A=[1236]不可逆,因为找不到AAA的列的线性组合得到列向量[10]\begin{bmatrix} 1\\ 0\\ \end{bmatrix}[10](III的第一列)。
判断矩阵是否可逆的一种方法:
如果可以找到非零向量xxx,使得Ax=0Ax = 0Ax=0成立,则矩阵不可逆。
因为如果此时AAA可逆将等式两边乘以A−1A^{-1}A−1,得到x=0x=0x=0。
所以,若矩阵列向量的非零线性组合可以得到零向量,矩阵不可逆。 - 矩阵逆的求法
假设AAA的逆存在,如何求A−1A^{-1}A−1?
举个例子:
A=[1327] 求A−1 A = \begin{bmatrix} 1&3\\ 2&7\\ \end{bmatrix} \ \ \ \ 求A^{-1} A=[1237] 求A−1
假设A−1=[acbd]A^{-1} = \begin{bmatrix} a&c\\ b&d\\ \end{bmatrix}A−1=[abcd],可以设立方程:
[1327][acbd]=[1001] \begin{bmatrix} 1&3\\ 2&7\\ \end{bmatrix} \begin{bmatrix} a&c\\ b&d\\ \end{bmatrix}= \begin{bmatrix} 1&0\\ 0&1\\ \end{bmatrix} [1237][abcd]=[1001]
Gaussian-Jordan:Solve 2 equals at once
{[1327][ab]=[10][1327][cd]=[01]→[13∣1027∣01] \begin{cases} \begin{bmatrix} 1&3\\ 2&7\\ \end{bmatrix} \begin{bmatrix} a\\ b\\ \end{bmatrix}= \begin{bmatrix} 1\\ 0\\ \end{bmatrix}\\\\ \begin{bmatrix} 1&3\\ 2&7\\ \end{bmatrix} \begin{bmatrix} c\\ d\\ \end{bmatrix}= \begin{bmatrix} 0\\ 1\\ \end{bmatrix}\\ \end{cases}\rightarrow \begin{bmatrix} 1&3&|&1&0\\ 2&7&|&0&1\\ \end{bmatrix} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧[1237][ab]=[10][1237][cd]=[01]→[1237∣∣1001]
首先写出上述方程增广矩阵形式,再使用Lecture2中提到的elimination进行消元,最终左侧将得到单位阵III。
[13∣1027∣01]→[13∣1001∣−21]→[10∣7−301∣−21] \begin{bmatrix} 1&3&|&1&0\\ 2&7&|&0&1\\ \end{bmatrix}\rightarrow \begin{bmatrix} 1&3&|&1&0\\ 0&1&|&-2&1\\ \end{bmatrix}\rightarrow \begin{bmatrix} 1&0&|&7&-3\\ 0&1&|&-2&1\\ \end{bmatrix} [1237∣∣1001]→[1031∣∣1−201]→[1001∣∣7−2−31]
对于以上方式的理解为相当于将单位阵的每个列单独看做一个向量bbb,该向量可视作AAA中的列的线性组合(矩阵乘法的第二种方式),之后对于每一列解它线性组合对应的系数就相当于解Ax=bAx=bAx=b的一个过程,可以使用消元法。而对每个列的消元的过程可以合并起来(因为都是初等行变换)。
另一种理解是:AAA经过的初等行变换可以看做乘以一系列的EEE矩阵,详见上节消元法的介绍,当AAA经过初等行变换变为III的时候,这一系列的EEE相乘就相当于乘以A−1A^{-1}A−1 ,此时将III作同样的变换,相当于乘以一系列的EEE最终的结果是变为A−1A^{-1}A−1。
Lecture4 矩阵的LU分解
这节课的总的目标是以一种更高阶的方式去审视高斯消元。
1. 上节课没讲完的关于逆的小问题
- AB的逆
假设A,BA,BA,B均可逆,(AB)−1=B−1A−1(AB)^{-1}=B^{-1}A^{-1}(AB)−1=B−1A−1
因为(AB)(B−1A−1)=I(AB)(B^{-1}A^{-1})=I(AB)(B−1A−1)=I(乘法满足结合律) - A转置的逆
(AT)−1=(A−1)T(A^T)^{-1}=(A^{-1})^T(AT)−1=(A−1)T
因为(AA−1)T=I⇒(A−1)TAT=I(AA^{-1})^T=I \Rightarrow (A^{-1})^TA^T=I(AA−1)T=I⇒(A−1)TAT=I
2. 矩阵LU分解过程
-
以2x2的矩阵为例
将AAA分解为A=LUA=LUA=LU,UUU为上三角矩阵(Upper triangular),LLL为下三角矩阵(Lower triangular)。
A=[2187] A= \begin{bmatrix} 2&1\\ 8&7\\ \end{bmatrix}\\ A=[2817]
Lecture2中可知可以通过矩阵消元的方法得到E,UE,UE,U矩阵,且将AAA经过初等行变换转化成UUU的过程可看作左乘EEE矩阵,此处不考虑行交换的情况。
[10−41][2187]=[2103]→E2,1A=U \begin{bmatrix} 1&0\\ -4&1\\ \end{bmatrix} \begin{bmatrix} 2&1\\ 8&7\\ \end{bmatrix}= \begin{bmatrix} 2&1\\ 0&3\\ \end{bmatrix}\rightarrow E_{2,1}A = U [1−401][2817]=[2013]→E2,1A=U
所以将AAA分解为A=LUA=LUA=LU的形式,只要将UUU左乘E2,1E_{2,1}E2,1的逆阵即可。
A=[2187]=[1041][2103]A=\begin{bmatrix} 2&1\\ 8&7\\ \end{bmatrix}= \begin{bmatrix} 1&0\\ 4&1\\ \end{bmatrix} \begin{bmatrix} 2&1\\ 0&3\\ \end{bmatrix} A=[2817]=[1401][2013]
L=[1041]L=\begin{bmatrix} 1&0\\ 4&1\\ \end{bmatrix}L=[1401],U=[2103]U=\begin{bmatrix} 2&1\\ 0&3\\ \end{bmatrix}U=[2013]再进一步可以将AAA进一步分解为A=LDUA=LDUA=LDU
A=[2187]=[1041][2103]=[1041][2003][11/201]A=\begin{bmatrix} 2&1\\ 8&7\\ \end{bmatrix}= \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=[2817]=[1401][2013]=[1401][2003][101/21] -
考虑3x3的情况
假设没有行交换(no row exchange):
E3,2E3,1E2,1A=UE_{3,2}E_{3,1}E_{2,1}A = U E3,2E3,1E2,1A=U
通过变换得:
A=E2,1−1E3,1−1E3,2−1U=LUA = E_{2,1}^{-1}E_{3,1}^{-1}E_{3,2}^{-1}U=LUA=E2,1−1E3,1−1E3,2−1U=LU
3. 为什么要进行LU分解?
为什么A=LUA=LUA=LU的形式比EA=UEA=UEA=U要好?
举个典型的例子:
假设E2,1=[100−210001]E_{2,1}=\begin{bmatrix}
1&0&0\\
-2&1&0\\
0&0&1
\end{bmatrix}E2,1=⎣⎡1−20010001⎦⎤,E3,2=[1000100−51]E_{3,2}=\begin{bmatrix}
1&0&0\\
0&1&0\\
0&-5&1
\end{bmatrix}E3,2=⎣⎡10001−5001⎦⎤,没有E3,1E_{3,1}E3,1(即第三行第一列本来就是0)。
然后做矩阵乘法:
E3,2E2,1=[1000100−51][100−210001]=[100−210(10)−51]=E
E_{3,2}E_{2,1} =
\begin{bmatrix}
1&0&0\\
0&1&0\\
0&-5&1
\end{bmatrix}
\begin{bmatrix}
1&0&0\\
-2&1&0\\
0&0&1
\end{bmatrix}=
\begin{bmatrix}
1&0&0\\
-2&1&0\\
(10)&-5&1
\end{bmatrix}=E
E3,2E2,1=⎣⎡10001−5001⎦⎤⎣⎡1−20010001⎦⎤=⎣⎡1−2(10)01−5001⎦⎤=E
结果第三行第一列中有个10,而这个10是由第一行影响得到的,第一行的-2倍加到第二行之后,新第二行的-5倍加到第三行。不可以由两个EEE矩阵直观地看出来。
接下来我们来看以逆的角度考虑:
E2,1−1E3,2−1=[100210001][100010051]=[100210051]=L
E_{2,1}^{-1}E_{3,2}^{-1} =
\begin{bmatrix}
1&0&0\\
2&1&0\\
0&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\\
0&5&1
\end{bmatrix}=L
E2,1−1E3,2−1=⎣⎡120010001⎦⎤⎣⎡100015001⎦⎤=⎣⎡120015001⎦⎤=L
这时候可以得到:L=E2,1−1+E3,1−1+E3,2−1L=E_{2,1}^{-1}+E_{3,1}^{-1}+E_{3,2}^{-1}L=E2,1−1+E3,1−1+E3,2−1,只要在矩阵相应部分写上消元乘数就可以得到。
结论:
A=LUA=LUA=LU包含了矩阵消元法的全部信息,即只要将原矩阵按照LLL矩阵从左到右,从上到下的顺序,按照对应系数进行初等行变换,就可以得到UUU。
同理,从列的角度考虑即:将原矩阵按照UUU矩阵从上到下,从左到右的顺序经过初等列变换,可以得到LLL。
4. LU分解的总运算步数问题(复杂度)
如果将一次乘法之后加法看作是一次运算。
1. 对n×nn\times nn×n的矩阵进行消元,运算步数为:
Steps=n(n−1)+(n−1)(n−2)+...+2×1Steps = n(n-1)+(n-1)(n-2)+...+2 \times 1Steps=n(n−1)+(n−1)(n−2)+...+2×1
近似约为:
Steps≈n2+(n−1)2+...+12=16n(n+1)(2n+1)≈13n2Steps \approx n^2+(n-1)^2+...+1^2 = \frac{1}{6}n(n+1)(2n+1) \approx \frac{1}{3}n^2Steps≈n2+(n−1)2+...+12=61n(n+1)(2n+1)≈31n2
2. 对右侧向量 bbb 进行运算,运算步数为:
Steps=[(n−1)+(1)](n−1)/2=(n−1)n/2≈n2Steps = [(n-1)+(1)](n-1)/2 = (n-1)n/2 \approx n^2Steps=[(n−1)+(1)](n−1)/2=(n−1)n/2≈n2
所以在完成LU分解后,对于有几个右侧向量的情况,可以节省很多时间,不必每次都对左侧进行行变换。
5. 转置与置换初步介绍(transpose and permutation)
置换矩阵可以用来做行交换(row exchange)
3x3矩阵III有6种permutation(行交换方法):
[100010001],[010100001],[001010100][100001010],[010001100],[001100010]
\begin{bmatrix}
1&0&0\\
0&1&0\\
0&0&1\\
\end{bmatrix},
\begin{bmatrix}
0&1&0\\
1&0&0\\
0&0&1\\
\end{bmatrix},
\begin{bmatrix}
0&0&1\\
0&1&0\\
1&0&0\\
\end{bmatrix}\\
\begin{bmatrix}
1&0&0\\
0&0&1\\
0&1&0\\
\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}
⎣⎡100010001⎦⎤,⎣⎡010100001⎦⎤,⎣⎡001010100⎦⎤⎣⎡100001010⎦⎤,⎣⎡001100010⎦⎤,⎣⎡010001100⎦⎤
这些矩阵两两相乘的结果仍在这个矩阵集合中(相当于将右侧矩阵再进行一次行交换),这些矩阵的逆矩阵也在这个集合中,因为就相当于把原先对调的两行调回去。
且这些permutation矩阵有一个重要的性质:
P−1=PTP^{-1}=P^TP−1=PT