Lecture3 矩阵乘法与逆
1. 矩阵乘法及其5种方式
- 1. 对于结果矩阵中的特定元素单个计算(entry)
假定矩阵乘法为:
A B = C AB = C AB=C
当 A m × n , B n × s A_{m\times n},B_{n\times s} Am×n,Bn×s时矩阵可乘(内标相同),且得到结果 C m × s C_{m\times s} Cm×s。
C中 i i i行 j j j列的元素为:
C i , j = ( R o w i o f A ) ⋅ ( C o l u m n j o f B ) = ∑ k = 1 n a i k b k j C_{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. 整行和整列去考虑
可以将 B B B的列当成向量单独考虑, A A A乘以 B B B的每个列向量构成新矩阵 C C C的每个列。即 C C C的每一列是 A A A中列向量的线性组合。
同理 A A A的每一行乘以 B B B构成 C C C的每一行。即 C C C中的每行为 B B B中行向量的线性组合。 - 4. 用A的列乘以B的行
A B = s u m o f { ( C o l u m n s o f A ) ⋅ ( R o w s o f B ) } AB = sum \ of \{(Columns \ of \ A)\cdot(Rows \ of \ B)\} AB=sum of{(Columns of A)⋅(Rows of B)}
A中的列向量与B中的行向量相乘会得到一个 m × s m\times s m×s的矩阵。将其组合相加可以得到 A B AB AB。 - 5.利用矩阵分块
只要将矩阵的大小按照符合乘法规则的要求来划分,可以得到:
A B = [ A 1 ∣ A 2 − − − A 3 ∣ A 4 ] ⋅ [ B 1 ∣ B 2 − − − B 3 ∣ B 4 ] = [ A 1 B 1 + A 2 B 3 ∣ A 1 B 2 + A 2 B 4 − − − − − − − − − − − − A 3 B 1 + A 4 B 3 ∣ A 3 B 2 + A 4 B 4 ] 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)
只有方阵才存在逆。
A
A
−
1
=
A
−
1
A
=
I
AA^{-1} = A^{-1}A = I
AA−1=A−1A=I
若一个矩阵存在逆,称其可逆(invertible)或非奇异(non-singular)矩阵的左逆和右逆相等,均表示为
A
−
1
A^{-1}
A−1。
- 矩阵的可逆性
A = [ 1 3 2 6 ] A = \begin{bmatrix} 1&3\\ 2&6\\ \end{bmatrix} A=[1236]不可逆,因为找不到 A A A的列的线性组合得到列向量 [ 1 0 ] \begin{bmatrix} 1\\ 0\\ \end{bmatrix} [10]( I I I的第一列)。
判断矩阵是否可逆的一种方法:
如果可以找到非零向量 x x x,使得 A x = 0 Ax = 0 Ax=0成立,则矩阵不可逆。
因为如果此时 A A A可逆将等式两边乘以 A − 1 A^{-1} A−1,得到 x = 0 x=0 x=0。
所以,若矩阵列向量的非零线性组合可以得到零向量,矩阵不可逆。 - 矩阵逆的求法
假设 A A A的逆存在,如何求 A − 1 A^{-1} A−1?
举个例子:
A = [ 1 3 2 7 ] 求 A − 1 A = \begin{bmatrix} 1&3\\ 2&7\\ \end{bmatrix} \ \ \ \ 求A^{-1} A=[1237] 求A−1
假设 A − 1 = [ a c b d ] A^{-1} = \begin{bmatrix} a&c\\ b&d\\ \end{bmatrix} A−1=[abcd],可以设立方程:
[ 1 3 2 7 ] [ a c b d ] = [ 1 0 0 1 ] \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
{ [ 1 3 2 7 ] [ a b ] = [ 1 0 ] [ 1 3 2 7 ] [ c d ] = [ 0 1 ] → [ 1 3 ∣ 1 0 2 7 ∣ 0 1 ] \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进行消元,最终左侧将得到单位阵 I I I。
[ 1 3 ∣ 1 0 2 7 ∣ 0 1 ] → [ 1 3 ∣ 1 0 0 1 ∣ − 2 1 ] → [ 1 0 ∣ 7 − 3 0 1 ∣ − 2 1 ] \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]
对于以上方式的理解为相当于将单位阵的每个列单独看做一个向量 b b b,该向量可视作 A A A中的列的线性组合(矩阵乘法的第二种方式),之后对于每一列解它线性组合对应的系数就相当于解 A x = b Ax=b Ax=b的一个过程,可以使用消元法。而对每个列的消元的过程可以合并起来(因为都是初等行变换)。
另一种理解是: A A A经过的初等行变换可以看做乘以一系列的 E E E矩阵,详见上节消元法的介绍,当 A A A经过初等行变换变为 I I I的时候,这一系列的 E E E相乘就相当于乘以 A − 1 A^{-1} A−1 ,此时将 I I I作同样的变换,相当于乘以一系列的 E E E最终的结果是变为 A − 1 A^{-1} A−1。
Lecture4 矩阵的LU分解
这节课的总的目标是以一种更高阶的方式去审视高斯消元。
1. 上节课没讲完的关于逆的小问题
- AB的逆
假设 A , B A,B A,B均可逆, ( A B ) − 1 = B − 1 A − 1 (AB)^{-1}=B^{-1}A^{-1} (AB)−1=B−1A−1
因为 ( A B ) ( B − 1 A − 1 ) = I (AB)(B^{-1}A^{-1})=I (AB)(B−1A−1)=I(乘法满足结合律) - A转置的逆
( A T ) − 1 = ( A − 1 ) T (A^T)^{-1}=(A^{-1})^T (AT)−1=(A−1)T
因为 ( A A − 1 ) T = I ⇒ ( A − 1 ) T A T = I (AA^{-1})^T=I \Rightarrow (A^{-1})^TA^T=I (AA−1)T=I⇒(A−1)TAT=I
2. 矩阵LU分解过程
-
以2x2的矩阵为例
将 A A A分解为 A = L U A=LU A=LU, U U U为上三角矩阵(Upper triangular), L L L为下三角矩阵(Lower triangular)。
A = [ 2 1 8 7 ] A= \begin{bmatrix} 2&1\\ 8&7\\ \end{bmatrix}\\ A=[2817]
Lecture2中可知可以通过矩阵消元的方法得到 E , U E,U E,U矩阵,且将 A A A经过初等行变换转化成 U U U的过程可看作左乘 E E E矩阵,此处不考虑行交换的情况。
[ 1 0 − 4 1 ] [ 2 1 8 7 ] = [ 2 1 0 3 ] → E 2 , 1 A = 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
所以将 A A A分解为 A = L U A=LU A=LU的形式,只要将 U U U左乘 E 2 , 1 E_{2,1} E2,1的逆阵即可。
A = [ 2 1 8 7 ] = [ 1 0 4 1 ] [ 2 1 0 3 ] 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 = [ 1 0 4 1 ] L=\begin{bmatrix} 1&0\\ 4&1\\ \end{bmatrix} L=[1401], U = [ 2 1 0 3 ] U=\begin{bmatrix} 2&1\\ 0&3\\ \end{bmatrix} U=[2013]再进一步可以将 A A A进一步分解为 A = L D U A=LDU A=LDU
A = [ 2 1 8 7 ] = [ 1 0 4 1 ] [ 2 1 0 3 ] = [ 1 0 4 1 ] [ 2 0 0 3 ] [ 1 1 / 2 0 1 ] 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):
E 3 , 2 E 3 , 1 E 2 , 1 A = U E_{3,2}E_{3,1}E_{2,1}A = U E3,2E3,1E2,1A=U
通过变换得:
A = E 2 , 1 − 1 E 3 , 1 − 1 E 3 , 2 − 1 U = L U A = E_{2,1}^{-1}E_{3,1}^{-1}E_{3,2}^{-1}U=LU A=E2,1−1E3,1−1E3,2−1U=LU
3. 为什么要进行LU分解?
为什么
A
=
L
U
A=LU
A=LU的形式比
E
A
=
U
EA=U
EA=U要好?
举个典型的例子:
假设
E
2
,
1
=
[
1
0
0
−
2
1
0
0
0
1
]
E_{2,1}=\begin{bmatrix} 1&0&0\\ -2&1&0\\ 0&0&1 \end{bmatrix}
E2,1=⎣⎡1−20010001⎦⎤,
E
3
,
2
=
[
1
0
0
0
1
0
0
−
5
1
]
E_{3,2}=\begin{bmatrix} 1&0&0\\ 0&1&0\\ 0&-5&1 \end{bmatrix}
E3,2=⎣⎡10001−5001⎦⎤,没有
E
3
,
1
E_{3,1}
E3,1(即第三行第一列本来就是0)。
然后做矩阵乘法:
E
3
,
2
E
2
,
1
=
[
1
0
0
0
1
0
0
−
5
1
]
[
1
0
0
−
2
1
0
0
0
1
]
=
[
1
0
0
−
2
1
0
(
10
)
−
5
1
]
=
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倍加到第三行。不可以由两个
E
E
E矩阵直观地看出来。
接下来我们来看以逆的角度考虑:
E
2
,
1
−
1
E
3
,
2
−
1
=
[
1
0
0
2
1
0
0
0
1
]
[
1
0
0
0
1
0
0
5
1
]
=
[
1
0
0
2
1
0
0
5
1
]
=
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
=
E
2
,
1
−
1
+
E
3
,
1
−
1
+
E
3
,
2
−
1
L=E_{2,1}^{-1}+E_{3,1}^{-1}+E_{3,2}^{-1}
L=E2,1−1+E3,1−1+E3,2−1,只要在矩阵相应部分写上消元乘数就可以得到。
结论:
A
=
L
U
A=LU
A=LU包含了矩阵消元法的全部信息,即只要将原矩阵按照
L
L
L矩阵从左到右,从上到下的顺序,按照对应系数进行初等行变换,就可以得到
U
U
U。
同理,从列的角度考虑即:将原矩阵按照
U
U
U矩阵从上到下,从左到右的顺序经过初等列变换,可以得到
L
L
L。
4. LU分解的总运算步数问题(复杂度)
如果将一次乘法之后加法看作是一次运算。
1. 对
n
×
n
n\times n
n×n的矩阵进行消元,运算步数为:
S
t
e
p
s
=
n
(
n
−
1
)
+
(
n
−
1
)
(
n
−
2
)
+
.
.
.
+
2
×
1
Steps = n(n-1)+(n-1)(n-2)+...+2 \times 1
Steps=n(n−1)+(n−1)(n−2)+...+2×1
近似约为:
S
t
e
p
s
≈
n
2
+
(
n
−
1
)
2
+
.
.
.
+
1
2
=
1
6
n
(
n
+
1
)
(
2
n
+
1
)
≈
1
3
n
2
Steps \approx n^2+(n-1)^2+...+1^2 = \frac{1}{6}n(n+1)(2n+1) \approx \frac{1}{3}n^2
Steps≈n2+(n−1)2+...+12=61n(n+1)(2n+1)≈31n2
2. 对右侧向量
b
b
b 进行运算,运算步数为:
S
t
e
p
s
=
[
(
n
−
1
)
+
(
1
)
]
(
n
−
1
)
/
2
=
(
n
−
1
)
n
/
2
≈
n
2
Steps = [(n-1)+(1)](n-1)/2 = (n-1)n/2 \approx n^2
Steps=[(n−1)+(1)](n−1)/2=(n−1)n/2≈n2
所以在完成LU分解后,对于有几个右侧向量的情况,可以节省很多时间,不必每次都对左侧进行行变换。
5. 转置与置换初步介绍(transpose and permutation)
置换矩阵可以用来做行交换(row exchange)
3x3矩阵
I
I
I有6种permutation(行交换方法):
[
1
0
0
0
1
0
0
0
1
]
,
[
0
1
0
1
0
0
0
0
1
]
,
[
0
0
1
0
1
0
1
0
0
]
[
1
0
0
0
0
1
0
1
0
]
,
[
0
1
0
0
0
1
1
0
0
]
,
[
0
0
1
1
0
0
0
1
0
]
\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
=
P
T
P^{-1}=P^T
P−1=PT