Evanalysis
3.6预计阅读时间: 20 分钟

3.6 分块矩阵

把大矩阵分割成较小的块,并以这些块为单位进行熟悉的运算。

课程目录

大型矩阵往往含有逐项阅读时不易看出的简单结构:前几列可能代表一组变量, 其余列代表另一组变量,各组行也可能来自不同类型的方程。分块就是在不改变 任何元素的前提下,把这些分组明确记录下来。

所以,分块记号只是观察层次的改变,并不是一种新的矩阵。每一步合法的分块 运算,最终仍须由普通的逐项加法或行乘列法则来说明。它的优点,是在计算变大 之前先把结构与维数关系显示出来。

选择能显示结构的分块

假设线性模型的输入分成大小为 s1,s2s_1,s_2 的两组,输出分成大小为 r1,r2r_1,r_2 的两组。表示这个模型的矩阵便自然分成四块;位置 (i,j)(i,j) 的块 表示第 jj 组输入怎样影响第 ii 组输出。

分割线只有反映数学结构时才有帮助。常见选择会分离系数组、单位块、零块、重复 模式,或线性变换的不同阶段。任意分割虽然合法,却不一定能简化问题。

每次运算前应问三件事:

  1. 各分块行的高度及各分块列的宽度是多少?
  2. 对整体矩阵而言,拟进行的运算是否有定义?
  3. 若使用分块公式,其中每个乘积与每个和的维数是否相容?

第二与第三问必须分开。整体大小相同的两个矩阵总能逐项相加,即使显示出的 分块线不同;此时不能做的,只是把当前两种分块表示中的块直接一一配对。

记录各块的大小

定义

矩阵的分块

设 A∈Fm×nA \in \mathbb F^{m\times n},并选取正整数使

m=r1+⋯+rp,n=s1+⋯+sq.m=r_1+\cdots+r_p, \qquad n=s_1+\cdots+s_q.

把行依次分成高度为 r1,…,rpr_1,\ldots,r_p 的组,把列依次分成宽度为 s1,…,sqs_1,\ldots,s_q 的组,就可写成

A=[Aij]1≤i≤p, 1≤j≤q,Aij∈Fri×sj.A=[A_{ij}]_{1\leq i\leq p,\,1\leq j\leq q}, \qquad A_{ij}\in\mathbb F^{r_i\times s_j}.

AijA_{ij} 是第 ii 个分块行、第 jj 个分块列中的子矩阵。同一分块行内 各块都有 rir_i 行,同一分块列内各块都有 sjs_j 列。

分块网格是附加在原矩阵上的记号;去掉分块线后仍是同一个 m×nm\times n 矩阵。 增加分块线称为分割的细化,去掉分块线称为粗化。若同一矩阵上的两个 分割不同,把双方所有水平与垂直分块线合在一起,就得到一个共同细化。

定义

乘法相容的分块

设

A=[Aij]p×q,B=[Bjk]q×ℓ.A=[A_{ij}]_{p\times q}, \qquad B=[B_{jk}]_{q\times \ell}.

若存在正整数 ri,sj,tkr_i,s_j,t_k,使得

Aij∈Fri×sj,Bjk∈Fsj×tk,A_{ij}\in\mathbb F^{r_i\times s_j}, \qquad B_{jk}\in\mathbb F^{s_j\times t_k},

就称两个分割对乘法相容。也就是说,AA 的第 jj 个分块列宽度 sjs_j 必须逐组等于 BB 的第 jj 个分块行高度。内侧分块线的位置与数目要一致; AA 的外侧行分割和 BB 的外侧列分割则不必相同。

标量乘法不涉及第二个矩阵:标量直接乘到每一个已显示的分块即可。

不同分块行的高度不必相等,不同分块列的宽度也不必相等,块本身更不必是方阵, 一个矩阵的分块行数与分块列数也不必相同。真正需要的是每条带状区域内维数一致: 同一分块行共享一个高度,同一分块列共享一个宽度。把这些行高和列宽明确写出, 通常比只凭图中的分块线判断相容性更可靠。

分块运算何时成立

定理

分块加法与转置的相容性

设 A,B∈Fm×nA,B\in\mathbb F^{m\times n}。

  • 只要整体维数相同,普通矩阵和 A+BA+B 就有定义,与所用分块线无关。
  • 若两者使用相同的行分割 (r1,…,rp)(r_1,\ldots,r_p) 与列分割 (s1,…,sq)(s_1,\ldots,s_q),则
A+B=[Aij+Bij]p×q.A+B=[A_{ij}+B_{ij}]_{p\times q}.
  • 若两种分块表示不同,可以去掉分块线、把两者重新作同一分块,或加入双方全部 分块线形成共同细化;此后便可在共享网格中逐块相加。
  • 若 A=[Aij]p×qA=[A_{ij}]_{p\times q} 且 Aij∈Fri×sjA_{ij}\in\mathbb F^{r_i\times s_j},则转置矩阵位置 (j,i)(j,i) 的块满足
(AT)ji=AijT,(AT)ji∈Fsj×ri.(A^T)_{ji}=A_{ij}^T, \qquad (A^T)_{ji}\in\mathbb F^{s_j\times r_i}.

转置会交换分块行与分块列,并把每一块本身转置。

定理

分块乘法定理

设

A=[Aij]p×q,Aij∈Fri×sj,A=[A_{ij}]_{p\times q}, \qquad A_{ij}\in\mathbb F^{r_i\times s_j},

以及

B=[Bjk]q×ℓ,Bjk∈Fsj×tk.B=[B_{jk}]_{q\times \ell}, \qquad B_{jk}\in\mathbb F^{s_j\times t_k}.

则普通乘积 ABAB 有定义,并具有分块

AB=[Cik]p×ℓ,Cik=(AB)ik=∑j=1qAijBjk.AB=[C_{ik}]_{p\times\ell}, \qquad C_{ik}=(AB)_{ik}=\sum_{j=1}^{q}A_{ij}B_{jk}.

固定 i,ki,k 后,每个 AijBjkA_{ij}B_{jk} 都是 ri×tkr_i\times t_k 矩阵, 所以这些项确实可以相加,且 Cik∈Fri×tkC_{ik}\in\mathbb F^{r_i\times t_k}。

在 2×22\times2 分块情形,公式就是

AB=[A11B11+A12B21A11B12+A12B22A21B11+A22B21A21B12+A22B22].AB= \begin{bmatrix} A_{11}B_{11}+A_{12}B_{21} & A_{11}B_{12}+A_{12}B_{22}\\ A_{21}B_{11}+A_{22}B_{21} & A_{21}B_{12}+A_{22}B_{22} \end{bmatrix}.

它的外观与普通 2×22\times2 乘法相同,却不能因此忽略维数或次序。矩阵块的 乘法通常不可交换,每个和中的各项也必须同型。

为什么分组不会改变运算法则

证明

为什么分块公式就是普通矩阵公式

对加法,固定任意元素位置 (a,b)(a,b),A+BA+B 在该处就是 aab+baba_{ab}+b_{ab}。共享网格只把这些逐项和重新组成长方形,因此 (i,j)(i,j) 块正是 Aij+BijA_{ij}+B_{ij}。若原分块线不同,双方分块线的并集仍把同一批行与列 分成连续小组,故共同细化总能让各块直接配对。

对转置,位置 (a,b)(a,b) 的元素移到 (b,a)(b,a)。所以原来位于 (i,j)(i,j) 的 长方形移到 (j,i)(j,i),且自身的行、列交换,得到 AijTA_{ij}^T,维数由 ri×sjr_i\times s_j 变成 sj×ris_j\times r_i。

对乘法,固定属于 AA 第 ii 个分块行的一行,以及属于 BB 第 kk 个 分块列的一列。普通的行乘列点积会对所有公共内坐标求和。把这个和按照 s1,…,sqs_1,\ldots,s_q 分组,第 jj 组的贡献恰是 AijBjkA_{ij}B_{jk} 中的对应 元素。因此

(AB)ik=Ai1B1k+⋯+AiqBqk.(AB)_{ik}=A_{i1}B_{1k}+\cdots+A_{iq}B_{qk}.

分块乘法没有创造新法则;它只是把普通行乘列之和分组,既不漏项也不重复。

下面的图解把选择分割、检查维数和组合乘积的过程连起来。

分块与分块乘积

观看切线如何产生分块矩阵、为什么逐块加法需要相同分割,以及相容区块乘积如何重现普通乘法规则。

  1. 先定分割

    水平与垂直切线把一个矩阵分成长方形区块 A_ij。若 A_ij 有 m_i 行和 p_j 列,区块标记同时带有大小信息。

  2. 加法要同样切线

    逐块加法要求相同分割,因此每个 A_ij 都要有同样大小的对应 B_ij。

  3. 标量作用每块

    数乘保留分割:cA 是以 cA_ij 作为各区块的分块矩阵。

  4. 2 x 2 分块乘积

    对相容的 2 x 2 分块,AB 的左上区块是 C_11=A_11B_11+A_12B_21,模式与普通矩阵乘法相同。

  5. 相容性检查

    公式只有在每个 A_ikB_kj 都有定义时才可用。若 A_ik 是 m_i x p_k,而 B_kj 是 p_k x n_j,乘积大小就是 m_i x n_j。

  6. 列分块桥接

    当 B 被分成多列时,AB=[Ab_1,Ab_2,...,Ab_r]。这就是之后组织多个右端时会用到的同一种簿记想法。

分块矩阵只是把普通矩阵代数提升到较大的观察尺度。必须先固定分割,加法需要相同切线,而乘法只有在公式中每个区块乘积都是普通有定义矩阵乘积时才成立。

从相容大小到分块乘积

例题

带着维数读 2 × 2 符号公式

设 AA 的分块行高为 (r1,r2)(r_1,r_2)、分块列宽为 (s1,s2)(s_1,s_2),BB 的 分块列宽为 (t1,t2)(t_1,t_2)。例如

A11∈Fr1×s1,B12∈Fs1×t2,A12∈Fr1×s2,B22∈Fs2×t2.A_{11}\in\mathbb F^{r_1\times s_1}, \quad B_{12}\in\mathbb F^{s_1\times t_2}, \quad A_{12}\in\mathbb F^{r_1\times s_2}, \quad B_{22}\in\mathbb F^{s_2\times t_2}.

所以 A11B12A_{11}B_{12} 与 A12B22A_{12}B_{22} 都是 r1×t2r_1\times t_2,从而

(AB)12=A11B12+A12B22∈Fr1×t2.(AB)_{12}=A_{11}B_{12}+A_{12}B_{22} \in\mathbb F^{r_1\times t_2}.

这就是符号公式背后的维数检查;其他输出块也必须通过同样检查。

例题

两种分块表示不同,普通加法仍有定义

考虑

A=[102131−12045−2],B=[2103−12405011].A= \begin{bmatrix} 1&0&2&1\\3&1&-1&2\\0&4&5&-2 \end{bmatrix}, \qquad B= \begin{bmatrix} 2&1&0&3\\-1&2&4&0\\5&0&1&1 \end{bmatrix}.

把 AA 的行、列分别按 1+21+2、2+22+2 分割,把 BB 的行、列分别按 2+12+1、1+31+3 分割。当前左上块分别是 1×21\times2 与 2×12\times1, 不能直接配对。但两个原矩阵同为 3×43\times4,所以

A+B=[31242332546−1].A+B= \begin{bmatrix} 3&1&2&4\\2&3&3&2\\5&4&6&-1 \end{bmatrix}.

若要逐块计算,取共同的行分割 1+1+11+1+1 和列分割 1+1+21+1+2 即可。障碍来自 当前记号,而不是矩阵和本身。

例题

不同尺寸的矩形分块及其转置

把一个 3×53\times5 矩阵的行按 1+21+2、列按 2+32+3 分割:

A=[120345678901−123].A=\left[ \begin{array}{cc|ccc} 1&2&0&3&4\\ \hline 5&6&7&8&9\\ 0&1&-1&2&3 \end{array}\right].

四块大小依次为 1×2,1×3,2×2,2×31\times2,1\times3,2\times2,2\times3。转置后

AT=[15026107−1382493].A^T=\left[ \begin{array}{c|cc} 1&5&0\\ 2&6&1\\ \hline 0&7&-1\\ 3&8&2\\ 4&9&3 \end{array}\right].

新的行分割是 2+32+3,列分割是 1+21+2;原右上 1×31\times3 块成为左下 3×13\times1 块。块不必是方阵,转置只会交换两个维数。

例题

完整的数值分块乘法

采用外侧行分割 (2,1)(2,1)、内侧分割 (1,2)(1,2) 与外侧列分割 (2,1)(2,1):

A=[1203−14215],B=[1230124−11].A=\left[ \begin{array}{c|cc} 1&2&0\\3&-1&4\\ \hline 2&1&5 \end{array}\right], \qquad B=\left[ \begin{array}{cc|c} 1&2&3\\ \hline 0&1&2\\4&-1&1 \end{array}\right].

这里 A11A_{11} 是 2×12\times1,A12A_{12} 是 2×22\times2,B11B_{11} 是 1×21\times2,B21B_{21} 是 2×22\times2。四个输出块为

C11=A11B11+A12B21=[14191],C12=A11B12+A12B22=[711],C21=A21B11+A22B21=[220],C22=A21B12+A22B22=[13].\begin{aligned} C_{11}&=A_{11}B_{11}+A_{12}B_{21} =\begin{bmatrix}1&4\\19&1\end{bmatrix},\\ C_{12}&=A_{11}B_{12}+A_{12}B_{22} =\begin{bmatrix}7\\11\end{bmatrix},\\ C_{21}&=A_{21}B_{11}+A_{22}B_{21} =\begin{bmatrix}22&0\end{bmatrix},\\ C_{22}&=A_{21}B_{12}+A_{22}B_{22}=\begin{bmatrix}13\end{bmatrix}. \end{aligned}

例如右上块的实际计算是

C12=[13][3]+[20−14][21]=[39]+[42]=[711].C_{12} =\begin{bmatrix}1\\3\end{bmatrix}[3] +\begin{bmatrix}2&0\\-1&4\end{bmatrix} \begin{bmatrix}2\\1\end{bmatrix} =\begin{bmatrix}3\\9\end{bmatrix} +\begin{bmatrix}4\\2\end{bmatrix} =\begin{bmatrix}7\\11\end{bmatrix}.

组合各块便得到

AB=[1471911122013].AB= \begin{bmatrix} 1&4&7\\19&1&11\\22&0&13 \end{bmatrix}.

分块乘法前的维数检查

概念视角代数

内侧分块必须对应同一组坐标

计算输出块 (i,k)(i,k) 前,先逐项写出

(ri×sj)(sj×tk)=ri×tk.(r_i\times s_j)(s_j\times t_k)=r_i\times t_k.

对每个内侧指标 jj 都要检查。重复的 sjs_j 保证各乘积有定义;保持不变的 ri,tkr_i,t_k 保证所得乘积同型并可相加。最后还要核对:答案的分块行高总和等于 AA 的行数,分块列宽总和等于 BB 的列数。

对任何符号乘积之和,都要作两项检查:每个乘积须有定义,所有待相加结果须同型。 在真正相容的分块网格中,固定的 ri,tkr_i,t_k 会自动保证第二项。若只是任意罗列 一组不共享相应分块行高与分块列宽的子矩阵,就不能对它套用这个定理。

具体设 AA 是 2×42\times4 矩阵,BB 是 4×34\times3 矩阵。若 AA 的列按 1+31+3 分组,BB 的行却按 2+22+2 分组,普通乘积仍有定义,但目前的分块不能直接相乘:第一个拟议块乘积的内侧大小分别是一与二,第二个则是三与二,都不匹配。

保留双方的分割位置,把共同的内侧坐标细分成 1+1+21+1+2,并把所得分块写为

A=[C1 C2 C3],B=[D1D2D3].A=[C_1\ C_2\ C_3],\qquad B=\begin{bmatrix}D_1\\D_2\\D_3\end{bmatrix}.

此时 C1,C2C_1,C_2 是 2×12\times1,C3C_3 是 2×22\times2;D1,D2D_1,D_2 是 1×31\times3,D3D_3 是 2×32\times3。所以 AB=C1D1+C2D2+C3D3AB=C_1D_1+C_2D_2+C_3D_3,三个待相加矩阵都是 2×32\times3。细化分割修复了分块计算,却没有改变任何矩阵元素。共同的内侧分组说明哪些坐标一起贡献一个乘积,因而是公式成立的依据之一。

常见错误

常见错误

混淆矩阵和与一种特定的分块表示

只要整体维数相同,不同分块线不会使 A+BA+B 无定义;它们只使当前分块中的块 不能直接配对。可去掉分块线、重新作相同分块,或取共同细化。

常见错误

只检查整体矩阵的维数

m×nm\times n 矩阵能乘 n×un\times u 矩阵,并不代表任意分块显示都相容。 内侧分块边界也须一致,否则应先重新分块。

常见错误

把同位置的块相乘,而不是分块行乘分块列

(AB)ik(AB)_{ik} 是对内侧指标 jj 求和,不只是 AikBikA_{ik}B_{ik}。必须按原次序 让 AA 的完整分块行与 BB 的完整分块列配对。

常见错误

误以为分块乘积可以交换次序

即使 AijBjkA_{ij}B_{jk} 与 BjkAijB_{jk}A_{ij} 都有定义,两者也未必相等。定理中的 次序继承自普通矩阵乘法,不能任意颠倒。

分块计算的检查要点

  • 行分割与列分割共同决定分块;同一分块行有共同高度,同一分块列有共同宽度。
  • 相同整体维数足以保证普通加法有定义。只有直接逐块配对才要求分块表示一致; 不同分割可改成共同细化。
  • 转置交换分块网格并逐块转置:(AT)ji=AijT(A^T)_{ji}=A_{ij}^T。
  • 若 Aij∈Fri×sjA_{ij}\in\mathbb F^{r_i\times s_j}、 Bjk∈Fsj×tkB_{jk}\in\mathbb F^{s_j\times t_k},则 (AB)ik=∑jAijBjk(AB)_{ik}=\sum_jA_{ij}B_{jk} 是 ri×tkr_i\times t_k 矩阵。
  • 分块乘法只是把普通行乘列的内侧求和按连续坐标组整理;实际计算前必须先检查维数。

练习

思考检查

为什么两个分块矩阵要有相同分割方式,才能逐块相加?

请在答案中使用“对应块”一词。

解答 · 答案

直接逐块相加时,一边的每个块都必须在另一边找到同样大小的对应块。这是对 分块表示的要求;只要整体维数相同,原矩阵仍可逐项相加。

思考检查

四个因子 A11A_{11}、B12B_{12}、A12A_{12}、B22B_{22} 的大小依次为 2×12\times1、1×41\times4、2×32\times3、3×43\times4。求 A11B12+A12B22A_{11}B_{12}+A_{12}B_{22} 的大小。

先检查两个乘积,再判断它们能否相加。

解答 · 答案

两个乘积的大小都是 2×42\times4,各自相乘的内维数分别是 11 和 33。因此它们可以相加,右上输出块的大小为 2×42\times4。

思考检查

请解释:为什么分块乘法本质上仍然是普通矩阵乘法?

答案中请用到“同一条规则”。

解答 · 引导解答

分块乘法使用普通乘法的同一条规则;它只按照分块线,把每个行乘列点积中的求和项 分组,没有增加、遗漏或改变任何求和项的次序。

思考检查

两个 4×44\times4 矩阵的行分组分别为 1+31+3 和 2+22+2,列分组同为 2+22+2。求能让两者直接逐块相加的最粗共同行细化。

在同一个四行表格中标出双方的行分割位置。

解答 · 引导解答

保留第 11 行和第 22 行之后的分割线,共同行分组便是 1+1+21+1+2;列分组仍为 2+22+2。这样两者的对应块大小相同,而所有矩阵元素都没有改变。

思考检查

根据给出的分块,计算乘积的右上块。

设

A11=[12],A12=[−1],B12=[1032],B22=[−21].A_{11}=\begin{bmatrix}1&2\end{bmatrix}, \quad A_{12}=\begin{bmatrix}-1\end{bmatrix}, \quad B_{12}=\begin{bmatrix}1&0\\3&2\end{bmatrix}, \quad B_{22}=\begin{bmatrix}-2&1\end{bmatrix}.

求 (AB)12=A11B12+A12B22(AB)_{12}=A_{11}B_{12}+A_{12}B_{22},并写出其维数。

解答 · 引导解答

两个乘积的形状分别为 (1×2)(2×2)=1×2(1\times2)(2\times2)=1\times2 与 (1×1)(1×2)=1×2(1\times1)(1\times2)=1\times2,所以可以相加。计算得

A11B12=[74],A12B22=[2−1],A_{11}B_{12}=\begin{bmatrix}7&4\end{bmatrix}, \qquad A_{12}B_{22}=\begin{bmatrix}2&-1\end{bmatrix},

从而

(AB)12=[93].(AB)_{12}=\begin{bmatrix}9&3\end{bmatrix}.

答案是 1×21\times2 块。先写维数,正好说明最后的数值加法为何合法。

相关笔记

若普通矩阵乘法的模式仍未稳固,可先回看 3.2 矩阵乘法、单位矩阵与线性方程组。

下一章可接着读 4.1 齐次方程组与零空间。 稍后的 5.1 可逆矩阵 会把矩阵结构连到可逆性。

本单元重点词汇