矩阵分块
为了简化矩阵运算或从不同角度看矩阵乘法,把矩阵分成多块,每块是子矩阵,子矩阵可“看作”一个数,只要满足形状要求,就可进行形式上的矩阵运算。
矩阵乘法实质就是矩阵乘以向量,把向量看成列向量,矩阵乘以向量就是矩阵乘以矩阵,以这个最基础构建来说明矩阵分块运算。矩阵乘以向量是向量组的线性组合,必须从这个根源说起!
A
x
=
x
1
a
1
+
⋯
+
x
n
a
n
=
(
x
1
a
1
+
⋯
+
x
k
a
k
)
+
(
x
k
+
1
a
k
+
1
+
⋯
+
x
n
a
n
)
=
A
1
x
1
k
+
A
2
x
k
n
=
[
A
1
,
A
2
]
[
x
1
k
x
k
n
]
A
=
[
a
1
,
⋯
,
a
n
]
A
1
=
[
a
1
,
⋯
,
a
k
]
A
2
=
[
a
k
+
1
,
⋯
,
a
n
]
x
=
(
x
1
,
⋯
,
x
n
)
x
1
k
=
(
x
1
,
⋯
,
x
k
)
x
k
n
=
(
x
k
+
1
,
⋯
,
x
n
)
k
∈
[
1
,
n
)
A\mathbf{x} = x_1\mathbf{a_1}+\cdots+x_n\mathbf{a_n} \\ = (x_1\mathbf{a_1}+\cdots+x_k\mathbf{a_k}) + (x_{k+1}\mathbf{a_{k+1}}+\cdots+x_n\mathbf{a_n}) \\ = A_1 \mathbf{x_{1k}} + A_2 \mathbf{x_{kn}} \\ = \left[A_1, A_2\right]\left[ \begin{matrix} \mathbf{x_{1k}} \\ \mathbf{x_{kn}} \\ \end{matrix} \right] \\ A = \left[ \mathbf{a_1},\cdots,\mathbf{a_n}\right] \\ A_1 = \left[ \mathbf{a_1},\cdots,\mathbf{a_k}\right] \\ A_2 = \left[ \mathbf{a_{k+1}},\cdots,\mathbf{a_n}\right] \\ \mathbf{x} = ({x_1},\cdots,{x_n}) \\ \mathbf{x_{1k}} = ({x_1},\cdots,{x_k}) \\ \mathbf{x_{kn}} = ({x_{k+1}},\cdots,{x_n}) \\ k \in [1,n)
Ax=x1a1+⋯+xnan=(x1a1+⋯+xkak)+(xk+1ak+1+⋯+xnan)=A1x1k+A2xkn=[A1,A2][x1kxkn]A=[a1,⋯,an]A1=[a1,⋯,ak]A2=[ak+1,⋯,an]x=(x1,⋯,xn)x1k=(x1,⋯,xk)xkn=(xk+1,⋯,xn)k∈[1,n)
上面公式意思是,把矩阵
A
A
A 和向量
x
\mathbf{x}
x 任意分成两组,对每组进行矩阵乘以向量,然后矩阵写成分块形式,得到分块计算形式
[
A
1
,
A
2
]
[
x
1
k
x
k
n
]
=
A
1
x
1
k
+
A
2
x
k
n
\left[A_1, A_2\right]\left[ \begin{matrix} \mathbf{x_{1k}} \\ \mathbf{x_{kn}} \\ \end{matrix} \right] = A_1 \mathbf{x_{1k}} + A_2 \mathbf{x_{kn}}
[A1,A2][x1kxkn]=A1x1k+A2xkn
矩阵分块运算用向量理论解释的话,就是空间的直和分解。
子矩阵和子向量看成一个数,进行形式上的矩阵乘法,上式就是形式上的行向量乘以列向量得内积!
矩阵其它形式的分块运算道理和这个一样,本书不给出证明。特别强调一点,子矩阵只要满足形状要求,就可进行形式上的矩阵运算,但由于矩阵乘法不满足交换律,一定要注意矩阵相乘的顺序,这个特别容易出错,因为我们太习惯实数的代数运算,经常不自觉地交换变量的前后位置,但矩阵不能交换!
矩阵乘法的四种方式
以矩阵分块看待矩阵,矩阵可以看作是列向量的分块,
A
=
[
a
1
,
a
2
,
⋯
,
a
n
]
A = \left[ \mathbf{a_1},\mathbf{a_2},\cdots,\mathbf{a_n}\right]
A=[a1,a2,⋯,an] ,前面一直是这么看待矩阵,这是最重要的看待方式。矩阵还可以看作是行向量的分块,
A
=
[
a
r
1
T
a
r
2
T
⋮
a
r
n
T
]
A = \left[ \begin{matrix} \mathbf{a^T_{r1}} \\ \mathbf{a^T_{r2}} \\ \vdots \\ \mathbf{a^T_{rn}} \end{matrix} \right]
A=⎣⎢⎢⎢⎡ar1Tar2T⋮arnT⎦⎥⎥⎥⎤ ,这也是一种重要的看待方式。为了区分,行向量下标有字母
r
r
r 。此时一定要注意,
a
r
i
\mathbf{a_{ri}}
ari 表示列向量,但不是矩阵
A
A
A 的列向量,而是矩阵
A
A
A 的行向量旋转后变换成的列向量。例如
A
=
[
0
2
1
3
]
a
r
1
T
=
[
0
2
]
a
r
2
T
=
[
1
3
]
a
r
1
=
[
0
2
]
a
r
2
=
[
1
3
]
A = \left[ \begin{matrix} 0 & 2 \\ 1 & 3 \end{matrix} \right] \quad \mathbf{a^T_{r1}} = \left[0 \quad 2\right] \quad \mathbf{a^T_{r2}} = \left[1 \quad 3\right] \quad \mathbf{a_{r1}} = \left[ \begin{matrix} 0 \\ 2 \end{matrix} \right] \quad \mathbf{a_{r2}} = \left[ \begin{matrix} 1 \\ 3 \end{matrix} \right] \quad
A=[0123]ar1T=[02]ar2T=[13]ar1=[02]ar2=[13]
有四种矩阵分块方式进行矩阵相乘。
-
最常用的,几何意义最明显的,就是定义矩阵乘法的方式, A B = [ A b 1 , ⋯ , A b p ] AB=\left[ A\mathbf{b_1},\cdots,A\mathbf{b_p}\right] AB=[Ab1,⋯,Abp] ,即把矩阵 A A A 作为整体,矩阵 B B B 看作列向量的分块。积矩阵每列是矩阵 A A A 列向量组的线性组合。
-
矩阵 A A A 看作列向量的分块, A = [ a 1 , a 2 , ⋯ , a n ] A = \left[ \mathbf{a_1},\mathbf{a_2},\cdots,\mathbf{a_n}\right] A=[a1,a2,⋯,an] ,矩阵 B B B 看作行向量的分块, B = [ b r 1 T b r 2 T ⋮ b r n T ] B = \left[ \begin{matrix} \mathbf{b^T_{r1}} \\ \mathbf{b^T_{r2}} \\ \vdots \\ \mathbf{b^T_{rn}} \end{matrix} \right] B=⎣⎢⎢⎢⎡br1Tbr2T⋮brnT⎦⎥⎥⎥⎤ ,矩阵相乘就是形式上的内积,得 A B = a 1 b r 1 T + a 2 b r 2 T + ⋯ + a n b r n T AB = \mathbf{a_1}\mathbf{b^T_{r1}}+\mathbf{a_2}\mathbf{b^T_{r2}}+\cdots+\mathbf{a_n\mathbf{b^T_{rn}}} AB=a1br1T+a2br2T+⋯+anbrnT ,就是对应列向量与行向量的外积之和。这种看法十分重要,表明积矩阵可以分解为 n n n 个简单矩阵之和。
-
矩阵 A A A 看作行向量的分块, A = [ a r 1 T a r 2 T ⋮ a r n T ] A = \left[ \begin{matrix} \mathbf{a^T_{r1}} \\ \mathbf{a^T_{r2}} \\ \vdots \\ \mathbf{a^T_{rn}} \end{matrix} \right] A=⎣⎢⎢⎢⎡ar1Tar2T⋮arnT⎦⎥⎥⎥⎤ ,矩阵 B B B 作为整体。 A B = [ a r 1 T a r 2 T ⋮ a r n T ] B = [ a r 1 T B a r 2 T B ⋮ a r n T B ] AB = \left[ \begin{matrix} \mathbf{a^T_{r1}} \\ \mathbf{a^T_{r2}} \\ \vdots \\ \mathbf{a^T_{rn}} \end{matrix} \right] B = \left[ \begin{matrix} \mathbf{a^T_{r1}}B \\ \mathbf{a^T_{r2}}B \\ \vdots \\ \mathbf{a^T_{rn}}B \end{matrix} \right] AB=⎣⎢⎢⎢⎡ar1Tar2T⋮arnT⎦⎥⎥⎥⎤B=⎣⎢⎢⎢⎡ar1TBar2TB⋮arnTB⎦⎥⎥⎥⎤ 。积矩阵每行是矩阵 B B B 行向量组的线性组合。
-
矩阵 A A A 看作行向量的分块, A = [ a r 1 T a r 2 T ⋮ a r n T ] A = \left[ \begin{matrix} \mathbf{a^T_{r1}} \\ \mathbf{a^T_{r2}} \\ \vdots \\ \mathbf{a^T_{rn}} \end{matrix} \right] A=⎣⎢⎢⎢⎡ar1Tar2T⋮arnT⎦⎥⎥⎥⎤ ,矩阵 B B B 看作列向量的分块, B = [ b 1 , b 2 , ⋯ , b n ] B = \left[ \mathbf{b_1},\mathbf{b_2},\cdots,\mathbf{b_n}\right] B=[b1,b2,⋯,bn] ,矩阵相乘就是形式上的外积,得 A B = [ a r 1 T b 1 a r 1 T b 2 ⋯ , a r 1 T b n ⋮ a r n T b 1 a r n T b 2 ⋯ , a r n T b n ] AB = \left[ \begin{matrix} \mathbf{a^T_{r1}}\mathbf{b_1} & \mathbf{a^T_{r1}}\mathbf{b_2} \cdots, \mathbf{a^T_{r1}}\mathbf{b_n}\\ \vdots \\ \mathbf{a^T_{rn}}\mathbf{b_1} & \mathbf{a^T_{rn}}\mathbf{b_2} \cdots, \mathbf{a^T_{rn}}\mathbf{b_n} \end{matrix} \right] AB=⎣⎢⎡ar1Tb1⋮arnTb1ar1Tb2⋯,ar1TbnarnTb2⋯,arnTbn⎦⎥⎤ ,这种看法用来计算积矩阵每个位置的数值,即第 i i i 行第 j j j 列的数值是矩阵 A A A 的第 i i i 个行向量与矩阵 B B B 的第 j j j 个列向量的内积。这种看法计算矩阵数值比较方便。国内教材基本采用这种方式定义矩阵乘法,把矩阵看成数的表格,掩盖了几何图像。