2.4 矩阵的运算法则

矩阵是数字或 “元素” 的矩形阵列。当矩阵 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) 矩阵乘法的基础法则ABC等于ABC(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的行ij元素是(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} [1211][2324]=[5160]第一个点积是 1 ⋅ 2 + 1 ⋅ 3 = 5 1\cdot2+1\cdot3=5 12+13=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.矩阵AB的每一列A[b1bp]=[Ab1Abp]行图像则相反, 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 EA), A A − 1 AA^{-1} AA1 中用到的是列运算。“行-列图像” 有行与列的点积,手算矩阵时经常使用点积:有 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)}} col1col2col3 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,这个法则很有用,是矩阵乘法的关键。
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=AAAA(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} A1 A 0 = I A^0=I A0=I 是单位矩阵,类似 2 0 = 1 2^0=1 20=1
对于数字 a − 1 = 1 / a a^{-1}=1/a a1=1/a,对矩阵来说逆矩阵写成 A − 1 A^{-1} A1(不是 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) 列乘行 a1an b1bn =[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= 130010001 ,E31= 104010001 分块的思想就是用一个矩阵矩阵 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= 134010001 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) 分块消元[ICA10I][ACBD]=[A0BDCA1B](2.4.6)消元法从第二行减去第一行 [ A B ] \begin{bmatrix}A&B\end{bmatrix} [AB] 左乘 C A − 1 CA^{-1} CA1(以前是 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=DCA1B
分块消元是一次处理一列,主元方块是 A A A,最后的方块是 D − C A − 1 B D-CA^{-1}B DCA1B,如同 d − c b / a d-cb/a dcb/a,这个称为舒尔补(Schur complement)。

六、主要内容总结

  1. A B AB AB ( i , j ) (i,j) (i,j) 元素是 ( A 的行   i ) ⋅ ( B 的列   j ) (A的行\,i)\cdot(B的列\,j) (A的行i)(B的列j)
  2. m × n m\times n m×n 的矩阵乘 n × p n\times p n×p 的矩阵会有 m n p mnp mnp 次乘法。
  3. A A A B C BC BC 等于 A B AB AB C C C(非常重要)。
  4. A B AB AB 也是这 n n n 个矩阵的和: ( A 的列   j ) ⋅ ( B 的行   j ) (A的列\,j)\cdot(B的行\,j) (A的列j)(B的行j)
  5. 当分块矩阵的形状能正确匹配时,就可以使用分块乘法。
  6. 分块消元会产生舒尔补   D − C A − 1 B \,D-CA^{-1}B DCA1B

七、例题

例5】一个图形(或网络)有 n n n 个节点。它的邻接矩阵(adjacency matrix) S S S n × n n\times n n×n。它是一个 0 − 1 0-1 01 矩阵,当节点 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 213,经过 4 4 4 的路径 2 − 4 − 3 2-4-3 243。节点 1 1 1 到节点 1 1 1 长度为 2 2 2 的路径也是 2 2 2 个: 1 − 2 − 1 1-2-1 121 1 − 3 − 1 1-3-1 131 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 1212,1232,1242,1312,1342
为什么 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 i1j,第一个乘法得到 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 i1j 的路径,那么要么 i → 1 i\rightarrow1 i1 不存在,要么就是 1 → j 1\rightarrow j 1j 不存在,此时 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 ikj 的个数累加起来,得到总路径数。同样, S N − 1 S S^{N-1}S SN1S 会计算 N N N 步路径数, S N − 1 S^{N-1} SN1 表示从 i i i k k k ( N − 1 ) (N-1) (N1) 步的路径数, 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,那么所有所有的乘积也是一样的,所有答案也一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/158741.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5项目实战(4)— 简单三步,教你按比例划分数据集

前言:Hello大家好,我是小哥谈。本节课就教大家如何去按照比例去划分数据集,希望大家学习之后可以有所收获!~🌈 前期回顾: YOLOv5项目实战(1)— 如何去训练模型 YOLOv5项目

万字长文:从 C# 入门学会 RabbitMQ 消息队列编程

RabbitMQ 简介 RabbitMQ 是一个实现了 AMQP 协议的消息队列,AMQP 被定义为作为消息传递中间件的开放标准的应用层协议。它代表高级消息队列协议,具有消息定位、路由、队列、安全性和可靠性等特点。 目前社区上比较流行的消息队列有 kafka、ActiveMQ、Pul…

freeRTOS--软件定时器

一、什么是定时器: 简单可以理解为闹钟,到达指定一段时间后,就会响铃。STM32 芯片自带硬件定时器,精度较高、达到定时时间后会触发中断,也可以生成 PWM 、输入捕获、输出比较,等等,功能强大&am…

基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码

基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于黄金正弦优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

从0开始学习数据结构 C语言实现 1.前篇及二分查找算法

一、前篇 1、什么是数据结构? 数据结构是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系 2、时间复杂度与空间复杂度 大O符号是用于描述函数渐进行为的数学符号 常用函数的增长表 阶乘O(n!) > 指数…

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蝠鲼觅食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

Spring Boot 中使用 ResourceLoader 加载资源的完整示例

ResourceLoader 是 Spring 框架中用于加载资源的接口。它定义了一系列用于获取资源的方法,可以处理各种资源,包括类路径资源、文件系统资源、URL 资源等。 以下是 ResourceLoader 接口的主要方法: Resource getResource(String location)&am…

VSCode 运行java程序中文乱码

现象描述 java文件中包含中文,运行java程序后,乱码报错。 解决方法 原本运行指令为 cd "d:\programProjects\Java_proj\" ; if ($?) { javac Solution.java } ; if ($?) { java Solution } 需要添加 编码格式 -encoding utf8 cd &quo…

python数据处理作业6:随机生产一个服从正态分布长度为1000的数组,将这个数组划分为25个区间,画出数组的直方图和密度图

每日小语 我只有忘掉自己,才能津津有味地进行沉思和遐想。——卢梭 gpt代码 import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm# 随机生成一个服从正态分布的长度为1000的数组 data np.random.randn(1000)# 划分为25个区间 num_…

【Linux】U盘安装的cfg引导文件配置

isolinux.cfg文件 default vesamenu.c32 timeout 600display boot.msg# Clear the screen when exiting the menu, instead of leaving the menu displayed. # For vesamenu, this means the graphical background is still displayed without # the menu itself for as long …

什么是好用的HR人才测评?

对于HR来说,选用一个合适的测评工具,我想不外乎以下几点: 1、成本可控 不是所有的HR都能申请到足够的资金,去做专业的人才测评,尤其是中小企业,这可是一笔不小 的开支。即使是基层普通岗位的成本&#xf…

redis运维(十一) python操作redis

一 python操作redis ① 安装pyredis redis常见错误 说明:由于redis服务器是5.0.8的,为了避免出现问题,默认最高版本的即可 --> 适配 ② 操作流程 核心:获取redis数据库连接对象 ③ Python 字符串前面加u,r,b的含义 原因: 字符串在…

视频一键转码:批量转换MP4视频的技巧

随着数字媒体设备的普及,视频文件在生活中扮演着越来越重要的角色。而在处理视频文件时,有时需要将其转换为不同的格式以适应不同的需求。其中,MP4格式因其通用性和高质量而备受青睐。本文详解云炫AI智剪如何一键转码的技巧,帮助批…

基础课6——开放领域对话系统架构

开放领域对话系统是指针对非特定领域或行业的对话系统,它可以与用户进行自由的对话,不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力,以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…

msvcp140.dll是什么东西以及如何解决其文件缺失问题

当我们在使用Windows电脑的过程中,有时候可能会遇到一些由于系统文件缺失或者损坏而导致的问题。其中,"msvcp140.dll缺失"就是一种常见的错误提示。msvcp140.dll究竟是什么?为什么它会缺失?又该如何解决这个问题呢&…

MIKE水动力笔记20_由dfs2网格文件提取dfs1断面序列文件

本文目录 前言Step 1 MIKE Zero工具箱Step 2 提取dfs1 前言 在MIKE中,dfs2是一个一个小格格的网格面的时间序列文件,dfs1是一条由多个点组成的线的时间序列文件。 如下两图: 本博文内容主要讲如何从dfs2网格文件中提取dfs1断面序列文件。 …

PaddleClas学习2——使用PPLCNet模型对车辆朝向进行识别(python)

使用PPLCNet模型对车辆朝向进行识别 1. 配置PaddlePaddle,PaddleClas环境2. 准备数据2.1 标注数据格式2.2 标注数据3. 模型训练3.1 修改配置文件3.2 训练、评估4 模型预测1. 配置PaddlePaddle,PaddleClas环境 安装:请先参考文档 环境准备 配置 PaddleClas 运行环境。 2. 准…

Unity Text文本首行缩进两个字符的方法

Text文本首行缩进两个字符的方法比较简单。通过代码把"\u3000\u3000"加到文本字符串前面即可。 参考如下代码: TMPtext1.text "\u3000\u3000" "这是一段有首行缩进的文本内容。\n这是第二行"; 运行效果如下图所示: 虽…

java入门,从CK导一部分数据到mysql

一、需求 需要从生产环境ck数据库导数据到mysql,数据量大约100w条记录。 二、处理步骤 1、这里的关键词是生产库,第二就是100w条记录。所以处理数据的时候就要遵守一定的规范。首先将原数据库表进行备份,或者将需要导出的数据建一张新的表了…

HarmonyOS 实现底部导航栏

该功能实现需要Tabs、TabsController、TabContent、Column等组件 Tabs相当于Android中的BottomNavigationView TabContent相当于Android中的fragment TabBuilder内相当于每个Item Entry Component struct Main {public tabsController : object new TabsController()State c…