矩阵是数字或 “元素” 的矩形阵列。当矩阵 A A A 有 m m m 行 n n n 列,则是一个 m × n m\times n m×n 的矩阵。如果矩阵的形状相同,则它们可以相加。矩阵也可以乘上任意常数 c c c。以下是 A + B A+B A+B 和 2 A 2A 2A 的例子,它们都是 3 × 2 3\times2 3×2 的矩阵: [ 1 2 3 4 0 0 ] + [ 2 2 4 4 9 9 ] = [ 3 4 7 8 9 9 ] , 2 [ 1 2 3 4 0 0 ] = [ 2 4 6 8 0 0 ] \begin{bmatrix}1&2\\3&4\\0&0\end{bmatrix}+\begin{bmatrix}2&2\\4&4\\9&9\end{bmatrix}=\begin{bmatrix}3&4\\7&8\\9&9\end{bmatrix},\kern 10pt2\begin{bmatrix}1&2\\3&4\\0&0\end{bmatrix}=\begin{bmatrix}2&4\\6&8\\0&0\end{bmatrix} 130240 + 249249 = 379489 ,2 130240 = 260480 矩阵的加法和向量的加法一样,每次处理一个元素。我们也可以将列向量看成是只有一列的矩阵( n = 1 n=1 n=1)。 − A -A −A 可以看成是 c c c 乘矩阵 A A A( c = − 1 c=-1 c=−1),它与 A A A 中全部元素的符号都相反。 A A A 加上 − A -A −A 是零矩阵,它的全部元素均为零。这些是基础知识,下面将考虑矩阵的乘法。
一、第一种方法:单个元素的计算
第
i
i
i 行第
j
j
j 列的元素记为
a
i
j
a_{ij}
aij 或
A
(
i
,
j
)
A(i,j)
A(i,j),第一行的
n
n
n 个元素分别记为
a
11
,
a
12
,
⋯
,
a
1
n
a_{11},a_{12},\cdots,a_{1n}
a11,a12,⋯,a1n。左下角的元素是
a
m
1
a_{m1}
am1,右下角的元素是
a
m
n
a_{mn}
amn。行的数字
i
i
i 从
1
1
1 到
m
m
m,列的数字
j
j
j 从
1
1
1 到
n
n
n。
若矩阵
A
A
A 和
B
B
B 可以相乘时,这里总共讨论
4
4
4 种方法求
A
B
AB
AB。矩阵
A
A
A 和
B
B
B 相乘需要满足如下条件:
A
B
AB
AB 可以相乘: 若
A
A
A 有
n
n
n 列,则
B
B
B 必须有
n
n
n 行
当
A
A
A 是
3
×
2
3\times2
3×2 的矩阵时,
B
B
B 可以是
2
×
1
2\times1
2×1(向量)、
2
×
2
2\times2
2×2(方阵)或
2
×
20
2\times20
2×20 的矩阵,必须是
2
2
2 行,但是不可以是
3
×
2
3\times2
3×2 的矩阵。
A
A
A 乘数
B
B
B 的每一列。 第一种矩阵相乘的方法是点积的方式,矩阵的乘法遵守以下法则:
矩阵乘法的基础法则
A
B
乘
C
等于
A
乘
B
C
(
2.4.1
)
\pmb{矩阵乘法的基础法则}\kern 10ptAB\,乘\,C\,等于\,A\,乘\,BC\kern 10pt(2.4.1)
矩阵乘法的基础法则AB乘C等于A乘BC(2.4.1)括号可以在
A
B
C
ABC
ABC 之间安全移动,
(
A
B
)
C
=
A
(
B
C
)
(AB)C=A(BC)
(AB)C=A(BC),线性代数也是基于这个法则。
假设
A
A
A 是
m
×
n
m\times n
m×n 的矩阵,
B
B
B 是
n
×
p
n\times p
n×p 的矩阵,它们可以相乘,乘积
A
B
AB
AB 是
m
×
p
m\times p
m×p 的矩阵。
(
m
×
n
)
×
(
n
×
p
)
=
(
m
×
p
)
,
[
m
rows
n
c
o
l
u
m
n
s
]
[
n
r
o
w
s
p
columns
]
=
[
m
rows
p
columns
]
(\pmb m\times n)\times(n\times \pmb p)=(\pmb m\times \pmb p),\kern 10pt\begin{bmatrix}\pmb{m\,\,\textrm{rows}}\\n\,\,columns\end{bmatrix}\begin{bmatrix}n\,\,rows\\\pmb{p\,\textrm{columns}}\end{bmatrix}=\begin{bmatrix}\pmb{m\,\,\textrm{rows}}\\\pmb{p\,\textrm{columns}}\end{bmatrix}
(m×n)×(n×p)=(m×p),[mrowsncolumns][nrowspcolumns]=[mrowspcolumns]一行乘一列是一种极端的情况,
1
×
n
1\times n
1×n 乘
n
×
1
n\times 1
n×1 的结果是
1
×
1
1\times1
1×1,这个数字就是点积。
任何情况下
A
B
AB
AB 中的元素都是点积,
A
B
AB
AB 左上角的元素
(
1
,
1
)
(1,1)
(1,1) 是
(
A
的行
1
)
⋅
(
B
的列
1
)
(A\,的行\,1)\cdot(B\,的列\,1)
(A的行1)⋅(B的列1)。这就是第一种计算方法,是矩阵乘法常用的方法。计算
A
A
A 的每一行和
B
B
B 的每一列的点积。
1.
A
B
的行
i
列
j
元素是
(
A
的行
i
)
⋅
(
B
的列
j
)
1.\kern 8ptAB\,的行\,i\,列\,j\,元素是\kern 10pt(A\,的行\,i)\cdot(B\,的列\,j)
1.AB的行i列j元素是(A的行i)⋅(B的列j)Figure 2.8 是
4
×
5
4\times5
4×5 矩阵
A
A
A 的第二行
(
i
=
2
)
(i=2)
(i=2),
5
×
6
5\times6
5×6 矩阵
B
B
B 的第三列
(
j
=
3
)
(j=3)
(j=3),它们的点积在
A
B
AB
AB 的行
2
2
2 列
3
3
3。矩阵
A
B
AB
AB 的行数与
A
A
A (
4
4
4 行)相同,列数与
B
B
B(
6
6
6 列)相同。
【例1】当且仅当方阵(Square matrices)的大小相同时,它们才可以相乘:
[
1
1
2
−
1
]
[
2
2
3
4
]
=
[
5
6
1
0
]
\begin{bmatrix}1&\kern 7pt1\\2&-1\end{bmatrix}\begin{bmatrix}2&2\\3&4\end{bmatrix}=\begin{bmatrix}5&6\\1&0\end{bmatrix}
[121−1][2324]=[5160]第一个点积是
1
⋅
2
+
1
⋅
3
=
5
1\cdot2+1\cdot3=5
1⋅2+1⋅3=5,其它三个点积可以通过同样的方法计算。每个点积需要两次乘法,总共是
8
8
8 次。
如果
A
A
A 和
B
B
B 都是
n
×
n
n\times n
n×n 的方阵,则
A
B
AB
AB 也是
n
×
n
n\times n
n×n 的方阵,它包含
n
2
n^2
n2 次点积,即
A
A
A 的行数乘
B
B
B 的列数。每一个点积需要
n
n
n 次乘法,所以计算
A
B
AB
AB 总共需要
n
3
n^3
n3 次乘法。当
n
=
100
n=100
n=100 时,需要
10
0
3
=
1000000
100^3=1000000
1003=1000000 次乘法;当
n
=
2
n=2
n=2 时,需要
2
3
=
8
2^3=8
23=8 次乘法。
目前有人找到只需要
7
7
7 次(会有额外的加法)的方法。但是比较难以处理,所以目前仍认为正常的科学计算需要
n
3
n^3
n3 次。
【例2】假设 A A A 是一个行向量( 1 × 3 1\times3 1×3), B B B 是一个列向量( 3 × 1 3\times1 3×1),则 A B AB AB 是 1 × 1 1\times1 1×1(仅有一个点积,一个元素)。若反过来相乘, B A BA BA(一列乘一行)则会得到一个完整的 3 × 3 3\times3 3×3 矩阵,这样的乘法也是允许的! 列乘行 ( n × 1 ) ( 1 × n ) = ( n × n ) [ 0 1 2 ] [ 1 2 3 ] = [ 0 0 0 1 2 3 2 4 6 ] \begin{matrix}列乘行\\(n\times1)(1\times n)=(n\times n)\end{matrix}\kern 10pt\begin{bmatrix}0\\1\\2\end{bmatrix}\begin{bmatrix}1&2&3\end{bmatrix}=\begin{bmatrix}0&0&0\\1&2&3\\2&4&6\end{bmatrix} 列乘行(n×1)(1×n)=(n×n) 012 [123]= 012024036 一行乘一列是内积(inner product),这是点积的另一个名称。一列乘一行是外积(outer product)。这是一些矩阵乘法的极端情况。
二、第二和第三种方法:行和列
在大图(big picture)中, A A A 乘 B B B 的每一列,结果是 A B AB AB 的一列,该列是 A A A 列的组合。 A B \pmb{AB} AB 的每一列都是 A \pmb A A 列的线性组合。这是矩阵乘法的列图像: 2. 矩阵 A 乘 B 的每一列 A [ b 1 ⋯ b p ] = [ A b 1 ⋯ A b p ] 2.\kern 8pt矩阵\,A\,乘\,B\,的每一列\kern 10ptA[b_1\cdots\, b_p]=[Ab_1\cdots\,Ab_p] 2.矩阵A乘B的每一列A[b1⋯bp]=[Ab1⋯Abp]行图像则相反, A A A 的每一行乘整个矩阵 B B B 是 A B AB AB 的一行。 A B \pmb{AB} AB 的每一行都是 B \pmb B B 行的线性组合: 3. A 的每一行乘矩阵 B [ A 的行 i ] [ 1 2 3 4 5 6 7 8 9 ] = [ A B 的行 i ] 3.\kern 8ptA\,的每一行乘矩阵\,B\kern 10pt[A\,的行\,i]\begin{bmatrix}1&2&3\\4&5&6\\7&8&9\end{bmatrix}=[AB\,的行\,i] 3.A的每一行乘矩阵B[A的行i] 147258369 =[AB的行i]消元法中用到的是行运算( E 乘 A E\,乘\,A E乘A), A A − 1 AA^{-1} AA−1 中用到的是列运算。“行-列图像” 有行与列的点积,手算矩阵时经常使用点积:有 m n p mnp mnp 次乘法/加法 步骤。 A B = ( m × n ) ( n × p ) = ( m × p ) , + m p 次点积,每次点积需要 n 个步骤 ( 2.4.2 ) AB=(m\times n)(n\times p)=(m\times p),+\kern 7ptmp\,次点积,每次点积需要\,n\,个步骤\kern 5pt(2.4.2) AB=(m×n)(n×p)=(m×p),+mp次点积,每次点积需要n个步骤(2.4.2)
三、第四种方法:列乘行
矩阵的第四种乘法是列乘行,然后将其相加:
4.
A
的列
1
至列
n
,乘
B
的行
1
至行
n
,将全部矩阵相加
4.\kern 8ptA\,的列\,1\,至列\,n,乘\,B\,的行\,1\,至行\,n,将全部矩阵相加
4.A的列1至列n,乘B的行1至行n,将全部矩阵相加
A
A
A 的列
1
1
1 乘
B
B
B 的行
1
1
1,
A
A
A 的列
2
,
3
2,3
2,3 乘
B
B
B 的行
2
,
3
2,3
2,3,然后相加:
[
col
1
col
2
col
3
⋅
⋅
⋅
⋅
⋅
⋅
]
[
row
1
⋯
row
2
⋯
row
3
⋯
]
=
(
col
1
)
(
row
1
)
+
(col
2)(row
2)+(col
3)(row
3)
\begin{bmatrix}\pmb{\textrm{col}\,1}&\pmb{\textrm{col\,2}}&\pmb{\textrm{col\,3}}\\\pmb \cdot&\pmb\cdot&\pmb\cdot\\ \pmb\cdot&\pmb\cdot&\pmb\cdot\end{bmatrix}\begin{bmatrix}\pmb{\textrm{row\,1}}&\pmb\cdots&\\\pmb{\textrm{row\,2}}&\pmb\cdots\\\pmb{\textrm{row\,3}}&\pmb\cdots\end{bmatrix}=\pmb{(\textrm {col\,1})(\textrm{row\,1})+\textrm{(col\,2)(row\,2)+(col\,3)(row\,3)}}
col1⋅⋅col2⋅⋅col3⋅⋅
row1row2row3⋯⋯⋯
=(col1)(row1)+(col2)(row2)+(col3)(row3)当
A
A
A 和
B
B
B 均是
2
×
2
2\times2
2×2 的矩阵时
A
B
=
[
a
b
c
d
]
[
E
F
G
H
]
=
[
a
E
+
b
G
a
F
+
b
H
c
E
+
d
G
c
F
+
d
H
]
AB=\begin{bmatrix}\pmb a&b\\\pmb c&d\end{bmatrix}\begin{bmatrix}\pmb E&\pmb F\\G&H\end{bmatrix}=\begin{bmatrix}\pmb{aE}+bG&\pmb{aF}+bH\\\pmb{cE}+dG&\pmb{cF}+dH\end{bmatrix}
AB=[acbd][EGFH]=[aE+bGcE+dGaF+bHcF+dH]
A
的列乘
B
的行,再相加
A
B
=
[
a
c
]
[
E
F
]
+
[
b
d
]
[
G
H
]
(
2.4.3
)
A\,的列乘\,B\, 的行,再相加\kern 10ptAB=\begin{bmatrix}\pmb a\\\pmb c\end{bmatrix}\begin{bmatrix}\pmb E&\pmb F\end{bmatrix}+\begin{bmatrix}b\\d\end{bmatrix}\begin{bmatrix}G&H\end{bmatrix}\kern 6pt(2.4.3)
A的列乘B的行,再相加AB=[ac][EF]+[bd][GH](2.4.3)
A
A
A 的列
k
k
k 乘
B
B
B 的行
k
k
k 得到一个矩阵,令
k
=
1
,
2
,
⋯
,
n
k=1,2,\cdots,n
k=1,2,⋯,n,然后将所有的矩阵相加得到
A
B
AB
AB。
如果
A
B
AB
AB 是
(
m
×
n
)
(
n
×
p
)
(m\times n)(n\times p)
(m×n)(n×p),则
n
n
n 个矩阵都是列与行相乘的
m
×
p
m\times p
m×p 矩阵。该方法同样需要
m
n
p
mnp
mnp 次乘法,只是顺序不同。
四、矩阵运算法则
矩阵运算遵循以下六个法则,还有一个法则是不正确的。矩阵可以是方形的也可以是矩形的。下面是三个加法法则:
A
+
B
=
B
+
A
(
交换律
commutative
law
)
c
(
A
+
B
)
=
c
A
+
c
B
(
分配律
distributive
law
)
A
+
(
B
+
C
)
=
(
A
+
B
)
+
C
(
结合律
associative
law
)
\begin{matrix}\kern20ptA+B=B+A\kern 17pt&\kern 10pt(交换律\,\textrm{commutative\,\,law})\\c(A+B)=cA+cB&\kern 3pt(分配律\,\textrm{distributive\,\,law})\\A+(B+C)=(A+B)+C&(结合律\,\textrm{associative\,\,law})\end{matrix}
A+B=B+Ac(A+B)=cA+cBA+(B+C)=(A+B)+C(交换律commutativelaw)(分配律distributivelaw)(结合律associativelaw)另外三个法则是乘法法则,注意
A
B
=
B
A
AB=BA
AB=BA 通常来说都是错误的:
A
B
≠
B
A
(
交换律通常不成立
)
A
(
B
+
C
)
=
A
B
+
A
C
(
左分配律
)
(
A
+
B
)
C
=
A
C
+
B
C
(
右分配律
)
A
(
B
C
)
=
A
(
B
C
)
(
A
B
C
的结合律
)
(
不需要括号
)
\begin{matrix}AB\neq BA&\kern 40pt(交换律通常不成立)\\A(B+C)=AB+AC&(左分配律)\\(A+B)C=AC+BC&(右分配律)\\A(BC)=A(BC)&\kern 81pt(ABC的结合律)(不需要括号)\end{matrix}
AB=BAA(B+C)=AB+AC(A+B)C=AC+BCA(BC)=A(BC)(交换律通常不成立)(左分配律)(右分配律)(ABC的结合律)(不需要括号)当
A
A
A 和
B
B
B 不是方阵时,
A
B
AB
AB 和
B
A
BA
BA 的大小不同,也不可能相等(假设可以相乘)。对于方阵,绝大部分情况都有
A
B
≠
B
A
AB\neq BA
AB=BA:
A
B
=
[
0
0
1
0
]
[
0
1
0
0
]
=
[
0
0
0
1
]
,
但是
B
A
=
[
0
1
0
0
]
[
0
0
1
0
]
=
[
1
0
0
0
]
AB=\begin{bmatrix}0&0\\1&0\end{bmatrix}\begin{bmatrix}0&1\\0&0\end{bmatrix}=\begin{bmatrix}0&0\\0&1\end{bmatrix},\,但是\,BA=\begin{bmatrix}0&1\\0&0\end{bmatrix}\begin{bmatrix}0&0\\1&0\end{bmatrix}=\begin{bmatrix}1&0\\0&0\end{bmatrix}
AB=[0100][0010]=[0001],但是BA=[0010][0100]=[1000]
A
I
=
I
A
AI=IA
AI=IA 是成立的,所有的方阵与
I
I
I 相乘都满足交换律,与
c
I
cI
cI 也一样。只有这些矩阵的乘法顺序才可交换。
法则
A
(
B
+
C
)
=
A
B
+
A
C
A(B+C)=AB+AC
A(B+C)=AB+AC 可以一次证明一列。对于第一列
A
(
b
+
c
)
=
A
b
+
A
c
A(\boldsymbol b+\boldsymbol c)=A\boldsymbol b+A\boldsymbol c
A(b+c)=Ab+Ac,这个是所有事情的关键 —— 线性。
法则
A
(
B
C
)
=
(
A
B
)
C
A(BC)=(AB)C
A(BC)=(AB)C 表示可以先乘
B
C
BC
BC 也可以先乘
A
B
AB
AB,这个法则很有用,是矩阵乘法的关键,证明如下:
证明: 设
B
B
B 的列为
b
1
,
⋯
,
b
n
\boldsymbol b_1,\cdots,\boldsymbol b_n
b1,⋯,bn,
C
C
C 仅有一列
c
\boldsymbol c
c,其分量为
c
1
,
⋯
,
c
n
c_1,\cdots,c_n
c1,⋯,cn。
A
B
AB
AB 的列为
A
b
1
,
⋯
,
A
b
n
A\boldsymbol b_1,\cdots,A\boldsymbol b_n
Ab1,⋯,Abn,则
A
B
c
=
c
1
A
b
1
+
⋯
+
c
n
b
n
AB\boldsymbol c=c_1A\boldsymbol b_1+\cdots+c_n\boldsymbol b_n
ABc=c1Ab1+⋯+cnbn。
B
c
B\boldsymbol c
Bc 仅有一列
c
1
b
1
+
⋯
+
c
n
b
n
c_1\boldsymbol b_1+\cdots+c_n\boldsymbol b_n
c1b1+⋯+cnbn,则
A
(
B
c
)
=
A
(
c
1
b
1
+
⋯
+
c
n
b
n
)
A(B\boldsymbol c)=A(c_1\boldsymbol b_1+\cdots+c_n\boldsymbol b_n)
A(Bc)=A(c1b1+⋯+cnbn)
由分配律可得上面两式相等,即
(
A
B
)
c
=
A
(
B
c
)
(AB)\boldsymbol c=A(B\boldsymbol c)
(AB)c=A(Bc)。同理,对于
C
C
C 的其它列均可按此方法证明,因此
(
A
B
)
C
=
A
(
B
C
)
(AB)C=A(BC)
(AB)C=A(BC)。
当
A
=
B
=
C
A=B=C
A=B=C 且为方阵时,
(
A
(A
(A 乘
A
2
)
A^2)
A2) 等于
(
A
2
(A^2
(A2 乘
A
)
A)
A)。它们的乘积都是
A
3
A^3
A3。矩阵的幂
A
p
A^p
Ap 和数字的运算法则一致:
A
p
=
A
A
A
⋯
A
(
p
个因子
)
(
A
p
)
(
A
q
)
=
A
p
+
q
(
A
p
)
q
=
A
p
q
A^p=AAA\cdots A\,(p\,个因子)\kern 8pt(A^p)(A^q)=A^{p+q}\kern 8pt(A^p)^q=A^{pq}
Ap=AAA⋯A(p个因子)(Ap)(Aq)=Ap+q(Ap)q=Apq这是指数的一般法则,
A
3
A^3
A3 乘
A
4
A^4
A4 是
A
7
A^7
A7,
A
3
A^3
A3 的
4
4
4 次方是
A
12
A^{12}
A12。当
p
p
p 和
q
q
q 是零或负数时,这个法则任然成立。假设
A
A
A 有
−
1
-1
−1 次方 —— 逆矩阵
A
−
1
A^{-1}
A−1。
A
0
=
I
A^0=I
A0=I 是单位矩阵,类似
2
0
=
1
2^0=1
20=1。
对于数字
a
−
1
=
1
/
a
a^{-1}=1/a
a−1=1/a,对矩阵来说逆矩阵写成
A
−
1
A^{-1}
A−1(不是
I
/
A
I/A
I/A,除了MATLAB)。除了
a
=
0
a=0
a=0 以外的数都有倒数,但是对于矩阵
A
A
A 有没有逆矩阵是线性代数的核心问题。
五、分块矩阵与分块乘法
矩阵可以被分割成块(blocks,小一些的矩阵)。下面是一个
4
×
6
4\times6
4×6 的矩阵,分割成
2
×
2
2\times2
2×2 的块,本例中每个块都是单位矩阵
I
I
I:
4
×
6
的矩阵分成
2
×
2
的分块矩阵
得到
2
×
3
个分块矩阵
A
=
[
1
0
1
0
1
0
0
1
0
1
0
1
1
0
1
0
1
0
0
1
0
1
0
1
]
=
[
I
I
I
I
I
I
]
\begin{matrix}4\times6\,的矩阵分成\\2\times2\,的分块矩阵\\\kern 20pt得到\,2\times3\,个分块矩阵\end{matrix}\kern 15ptA=\left[\begin{array}{cc|cc|cc}1&0&1&0&1&0\\0&1&0&1&0&1\\\hline1&0&1&0&1&0\\0&1&0&1&0&1\end{array}\right]=\begin{bmatrix}I&I&I\\I&I&I\end{bmatrix}
4×6的矩阵分成2×2的分块矩阵得到2×3个分块矩阵A=
101001011010010110100101
=[IIIIII]如果
B
B
B 也是
4
×
6
4\times6
4×6 的矩阵,且大小匹配,则可以对
A
+
B
A+B
A+B 匹配的方块相加。
将
b
\boldsymbol b
b 放在
A
A
A 旁边就变成增广矩阵,
[
A
b
]
\begin{bmatrix}A&\boldsymbol b\end{bmatrix}
[Ab] 有两个大小不一样的方块,这也是分块矩阵,左乘上消元矩阵得到
[
E
A
E
b
]
\begin{bmatrix}EA&E\boldsymbol b\end{bmatrix}
[EAEb]。只要形状匹配,那么分块相乘就没有问题。
分块乘法
:
如果
A
的分块可以乘
B
的分块,那么
A
B
就可以分块相乘。
A
的列分割必须和
B
的行分割相匹配。
[
A
11
A
12
A
21
A
22
]
[
B
11
B
21
]
=
[
A
11
B
11
+
A
12
B
21
A
21
B
11
+
A
22
B
21
]
(
2.4.4
)
\pmb{分块乘法}:如果\,A\,的分块可以乘\,B\,的分块,那么\,AB\,就可以分块相乘。A\,的列分割必须和\,B\,的行分割相匹配。\\\begin{bmatrix}A_{11}&A_{12}\\A_{21}&A_{22}\end{bmatrix}\begin{bmatrix}B_{11}\\B_{21}\end{bmatrix}=\begin{bmatrix}A_{11}B_{11}+A_{12}B_{21}\\A_{21}B_{11}+A_{22}B_{21}\end{bmatrix}\kern 15pt(2.4.4)
分块乘法:如果A的分块可以乘B的分块,那么AB就可以分块相乘。A的列分割必须和B的行分割相匹配。[A11A21A12A22][B11B21]=[A11B11+A12B21A21B11+A22B21](2.4.4)若每个分块都是数字(
1
×
1
1\times1
1×1 的矩阵),这种特殊情况就是矩阵的乘法,它们是一致的。上式所有的
A
A
A 都要放在
B
B
B 之前,因为
A
B
AB
AB 与
B
A
BA
BA 是不同的。
重点: 当对矩阵进行分块时,经常更容易看出它们如何作用的。如上例中分块矩阵是单位矩阵
I
I
I 就比原来的
4
×
6
4\times6
4×6 的矩阵更清晰。
【例3】(重要的特殊情况)将矩阵 A A A 每列分成一块,共 n n n 列,矩阵 B B B 每行分成一块,共 n n n 行,则 A B AB AB 的分块乘法就是列乘行相加: 列乘行 [ ∣ ∣ a 1 ⋯ a n ∣ ∣ ] [ − b 1 − ⋯ − b n − ] = [ a 1 b 1 + ⋯ + a n b n ] ( 2.4.5 ) \pmb{列乘行}\kern 10pt\begin{bmatrix}|& &|\\a_1&\cdots&a_n\\|& &|\end{bmatrix}\begin{bmatrix}-&b_1&-\\&\cdots\\-&b_n&-\end{bmatrix}=\begin{bmatrix}a_1b_1+\cdots+a_nb_n\end{bmatrix}\kern 15pt(2.4.5) 列乘行 ∣a1∣⋯∣an∣ −−b1⋯bn−− =[a1b1+⋯+anbn](2.4.5)这就是第四种矩阵乘法。下面是具体的例子: [ 1 4 1 5 ] [ 3 2 1 0 ] = [ 1 1 ] [ 3 2 ] + [ 4 5 ] [ 1 0 ] = [ 3 2 3 2 ] + [ 4 0 5 0 ] = [ 7 2 8 2 ] \begin{bmatrix}1&4\\1&5\end{bmatrix}\begin{bmatrix}3&2\\1&0\end{bmatrix}=\begin{bmatrix}1\\1\end{bmatrix}\begin{bmatrix}3&2\end{bmatrix}+\begin{bmatrix}4\\5\end{bmatrix}\begin{bmatrix}1&0\end{bmatrix}=\begin{bmatrix}3&2\\3&2\end{bmatrix}+\begin{bmatrix}4&0\\5&0\end{bmatrix}=\begin{bmatrix}7&2\\8&2\end{bmatrix} [1145][3120]=[11][32]+[45][10]=[3322]+[4500]=[7822]总结:通常使用行乘列求矩阵的乘积,要 4 4 4 个点积( 8 8 8 次乘法)。列乘行得到两个完整的矩阵(同样是 8 8 8 次乘法)。
【例4】(用分块消元)假设
A
A
A 的第一列是
1
,
3
,
4
1,3,4
1,3,4,要将
3
,
4
3,4
3,4 变成
0
,
0
0,0
0,0,需要减去主元行的
3
3
3 倍和
4
4
4 倍。这些行运算就是消元矩阵
E
21
E_{21}
E21、
E
32
E_{32}
E32:
E
21
=
[
1
0
0
−
3
1
0
0
0
1
]
,
E
31
=
[
1
0
0
0
1
0
−
4
0
1
]
E_{21}=\begin{bmatrix}\kern 7pt1&0&0\\-3&1&0\\\kern 7pt0&0&1\end{bmatrix},\kern 5ptE_{31}=\begin{bmatrix}\kern 7pt1&0&0\\\kern 7pt0&1&0\\-4&0&1\end{bmatrix}
E21=
1−30010001
,E31=
10−4010001
分块的思想就是用一个矩阵矩阵
E
E
E 完成上面的两次消元,该矩阵将第一列的主元
a
=
1
a=1
a=1 下面的数字全部变成
0
0
0:
E
=
[
1
0
0
−
3
1
0
−
4
0
1
]
乘
[
1
x
x
3
x
x
4
x
x
]
得到
[
1
x
x
0
y
y
0
z
z
]
E=\begin{bmatrix}\kern 7pt\pmb1&0&0\\\pmb{-3}&1&0\\\pmb{-4}&0&1\end{bmatrix}乘\begin{bmatrix}\pmb1&x&x\\\pmb3&x&x\\\pmb4&x&x\end{bmatrix}得到\begin{bmatrix}\pmb1&x&x\\\pmb0&y&y\\\pmb0&z&z\end{bmatrix}
E=
1−3−4010001
乘
134xxxxxx
得到
100xyzxyz
使用逆矩阵,分块矩阵
E
E
E 可以对整个列消元(将被消元部分看成一块)。假设矩阵有
4
4
4 块
A
,
B
,
C
,
D
A,B,C,D
A,B,C,D,通过分块消去
C
C
C:
分块消元
[
I
0
−
C
A
−
1
I
]
[
A
B
C
D
]
=
[
A
B
0
D
−
C
A
−
1
B
]
(
2.4.6
)
\pmb{分块消元}\kern 10pt\left[\begin{array}{c|c}I&0\\\hline-CA^{-1}&I\end{array}\right]\left[\begin{array}{c|c}A&B\\\hline C&D\end{array}\right]=\left[\begin{array}{c|c}A&B\\\hline0&D-CA^{-1}B\end{array}\right]\kern 15pt(2.4.6)
分块消元[I−CA−10I][ACBD]=[A0BD−CA−1B](2.4.6)消元法从第二行减去第一行
[
A
B
]
\begin{bmatrix}A&B\end{bmatrix}
[AB] 左乘
C
A
−
1
CA^{-1}
CA−1(以前是
c
/
a
c/a
c/a),使得块
C
C
C 变为了
0
0
0 块,块
D
D
D 变为
S
=
D
−
C
A
−
1
B
S=D-CA^{-1}B
S=D−CA−1B 。
分块消元是一次处理一列,主元方块是
A
A
A,最后的方块是
D
−
C
A
−
1
B
D-CA^{-1}B
D−CA−1B,如同
d
−
c
b
/
a
d-cb/a
d−cb/a,这个称为舒尔补(Schur complement)。
六、主要内容总结
- A B AB AB 的 ( i , j ) (i,j) (i,j) 元素是 ( A 的行 i ) ⋅ ( B 的列 j ) (A的行\,i)\cdot(B的列\,j) (A的行i)⋅(B的列j)。
- m × n m\times n m×n 的矩阵乘 n × p n\times p n×p 的矩阵会有 m n p mnp mnp 次乘法。
- A A A 乘 B C BC BC 等于 A B AB AB 乘 C C C(非常重要)。
- A B AB AB 也是这 n n n 个矩阵的和: ( A 的列 j ) ⋅ ( B 的行 j ) (A的列\,j)\cdot(B的行\,j) (A的列j)⋅(B的行j)。
- 当分块矩阵的形状能正确匹配时,就可以使用分块乘法。
- 分块消元会产生舒尔补 D − C A − 1 B \,D-CA^{-1}B D−CA−1B。
七、例题
【例5】一个图形(或网络)有 n n n 个节点。它的邻接矩阵(adjacency matrix) S S S 是 n × n n\times n n×n。它是一个 0 − 1 0-1 0−1 矩阵,当节点 i i i 与 节点 j j j 有边相连时 S i j = 1 S_{ij}=1 Sij=1。
无向图的邻接矩阵是方阵且对称,边的两个方向均可以行走
\bold{无向图的邻接矩阵是方阵且对称,边的两个方向均可以行走}
无向图的邻接矩阵是方阵且对称,边的两个方向均可以行走矩阵
S
2
S^2
S2 有一个很有用的解释,
S
i
j
2
S^2_{ij}
Sij2 是节点
i
i
i 与节点
j
j
j 之间长度为
2
\pmb 2
2 的路径的个数。上图中节点
2
2
2 与节点
3
3
3 之间长度为
2
2
2 的路径有两个:经过
1
1
1 的路径
2
−
1
−
3
2-1-3
2−1−3,经过
4
4
4 的路径
2
−
4
−
3
2-4-3
2−4−3。节点
1
1
1 到节点
1
1
1 长度为
2
2
2 的路径也是
2
2
2 个:
1
−
2
−
1
1-2-1
1−2−1 和
1
−
3
−
1
1-3-1
1−3−1。
S
2
=
[
2
1
1
2
1
3
2
1
1
2
3
1
2
1
1
2
]
,
S
3
=
[
2
5
5
2
5
4
5
5
5
5
4
5
2
5
5
2
]
S^2=\begin{bmatrix}\pmb 2&1&1&2\\1&3&\pmb 2&1\\1&2&3&1\\2&1&1&2\end{bmatrix},\kern 10ptS^3=\begin{bmatrix}2&\pmb 5&5&2\\5&4&5&5\\5&5&4&5\\2&5&5&2\end{bmatrix}
S2=
2112132112312112
,S3=
2552545555452552
你可以找到
5
5
5 条节点
1
1
1 到节点
2
2
2 长度为
3
3
3 的路径吗?
共
5
5
5 条:
1
−
2
−
1
−
2
,
1
−
2
−
3
−
2
,
1
−
2
−
4
−
2
,
1
−
3
−
1
−
2
,
1
−
3
−
4
−
2
1-2-1-2,1-2-3-2,1-2-4-2,1-3-1-2,1-3-4-2
1−2−1−2,1−2−3−2,1−2−4−2,1−3−1−2,1−3−4−2。
为什么
S
N
S^{N}
SN 可以计算出两个节点之间长度为
N
N
N 的所有路径数呢?我们从
S
2
S^2
S2 开始看某一元素的点积:
(
S
2
)
i
j
=
(
S
的行
i
)
⋅
(
S
的列
j
)
=
S
i
1
S
1
j
+
S
i
2
S
2
j
+
S
i
3
S
3
j
+
S
i
4
S
4
j
(
2.4.7
)
(S^2)_{ij}=(S的行\,i)\cdot(S的列\,j)=S_{i1}S_{1j}+S_{i2}S_{2j}+S_{i3}S_{3j}+S_{i4}S_{4j}\kern 20pt(2.4.7)
(S2)ij=(S的行i)⋅(S的列j)=Si1S1j+Si2S2j+Si3S3j+Si4S4j(2.4.7)若存在两步的路径
i
→
1
→
j
i\rightarrow 1\rightarrow j
i→1→j,第一个乘法得到
S
i
1
S
1
j
=
(
1
)
(
1
)
=
1
S_{i1}S_{1j}=(1)(1)=1
Si1S1j=(1)(1)=1,若不存在
i
→
1
→
j
i\rightarrow1\rightarrow j
i→1→j 的路径,那么要么
i
→
1
i\rightarrow1
i→1 不存在,要么就是
1
→
j
1\rightarrow j
1→j 不存在,此时
S
i
1
S
1
j
=
0
S_{i1}S_{1j}=0
Si1S1j=0。
(
S
2
)
i
j
(S^2)_{ij}
(S2)ij 会将所有的两步路径
i
→
k
→
j
i\rightarrow k\rightarrow j
i→k→j 的个数累加起来,得到总路径数。同样,
S
N
−
1
S
S^{N-1}S
SN−1S 会计算
N
N
N 步路径数,
S
N
−
1
S^{N-1}
SN−1 表示从
i
i
i 到
k
k
k 的
(
N
−
1
)
(N-1)
(N−1) 步的路径数,
S
S
S 表示从
k
k
k 到
j
j
j 的那一步路径数。矩阵乘法非常适合计算图形的路径,也可以看成公司内员工之间同相的频道个数。
【例6】下面有三个矩阵,什么时候
A
B
=
B
A
AB=BA
AB=BA ?什么时候
B
C
=
C
B
BC=CB
BC=CB ?什么时候
A
(
B
C
)
=
(
A
B
)
C
A(BC)=(AB)C
A(BC)=(AB)C ?给出矩阵元素
p
,
q
,
r
,
z
p,q,r,z
p,q,r,z 要满足的条件。
A
=
[
p
0
q
r
]
,
B
=
[
1
1
0
1
]
,
C
=
[
0
z
0
0
]
A=\begin{bmatrix}p&0\\q&r\end{bmatrix},\kern 5ptB=\begin{bmatrix}1&1\\0&1\end{bmatrix},\kern 5ptC=\begin{bmatrix}0&z\\0&0\end{bmatrix}
A=[pq0r],B=[1011],C=[00z0]如果
p
,
q
,
r
,
1
,
z
p,q,r,1,z
p,q,r,1,z 都是
4
×
4
4\times4
4×4 的块而不是数字,答案还一样吗?
解: 首先,
A
(
B
C
)
=
(
A
B
)
C
A(BC)=(AB)C
A(BC)=(AB)C 是永远正确的,该等式中括号并不需要,但是矩阵的顺序不能变。
通常情况下
A
B
≠
B
A
AB\neq BA
AB=BA
A
B
=
[
p
p
q
q
+
r
]
,
B
A
=
[
p
+
q
r
q
r
]
AB=\begin{bmatrix}p&p\\q&q+r\end{bmatrix},\kern 5ptBA=\begin{bmatrix}p+q&r\\q&r\end{bmatrix}
AB=[pqpq+r],BA=[p+qqrr]若要求
A
B
=
B
A
AB=BA
AB=BA,则需要满足
q
=
0
,
p
=
r
q=0,p=r
q=0,p=r。
B
C
=
C
B
BC=CB
BC=CB 是一个巧合:
B
C
=
[
0
z
0
0
]
,
C
B
=
[
0
z
0
0
]
BC=\begin{bmatrix}0&z\\0&0\end{bmatrix},\kern 5ptCB=\begin{bmatrix}0&z\\0&0\end{bmatrix}
BC=[00z0],CB=[00z0]若
p
,
q
,
r
,
z
p,q,r,z
p,q,r,z 均是
4
×
4
4\times 4
4×4 的块,
1
1
1 变为
I
I
I,那么所有所有的乘积也是一样的,所有答案也一样。