为了简化矩阵运算或从不同角度看矩阵乘法,把矩阵分成多块,每块是子矩阵,子矩阵可“看作”一个数,只要满足形状要求,就可进行形式上的矩阵运算。
矩阵乘法实质就是矩阵乘以向量,把向量看成列向量,矩阵乘以向量就是矩阵乘以矩阵,以这个最基础构建来说明矩阵分块运算。矩阵乘以向量是向量组的线性组合,必须从这个根源说起!
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 个列向量的内积。这种看法计算矩阵数值比较方便。国内教材基本采用这种方式定义矩阵乘法,把矩阵看成数的表格,掩盖了几何图像。