矩阵运算
矩阵运算是线性代数的核心工具,线性代数中大部分运算都可以转化成对矩阵的运算,矩阵在很大程度上构成了线性代数的运算基础。
在介绍矩阵运算之前,我们有必要先熟悉矩阵元素的表示,这是理解矩阵加法、乘法等操作的基础。此外,我们要能够掌握常见的特殊矩阵类型,因为这些概念在后续的矩阵运算中将会频繁出现。
1. 矩阵元素与特殊矩阵类型
矩阵元素表示:矩阵被定义为一个 m×n 的数组,其中 m 是矩阵的行数,n 是列数。矩阵中的每个元素位于特定的行和列的位置,矩阵中第 i 行第 j 列的元素记为 aij ,并称为矩阵 (i,j) 元素。
列向量表示:矩阵 Am×n 的每一列可以看做是一个 m 维向量,矩阵 A 可以写成由列向量 aj (0≤j≤n) 组成的形式,表示为 A=[a1a2…an] 。
对角线元素表示:对角线元素是矩阵中行号和列号相同的元素,表示为 a11,a22,a33… ,它们构成 A 的主对角线。
对角矩阵 (Diagonal Matrix) :这是一种特殊的方阵(行数等于列数) ,除对角线元素外,其余元素均为零。对角矩阵在计算中可以简化运算,其乘法操作比一般矩阵更简单且高效。此外,对角矩阵在后续涉及的求逆矩阵和特征值分解等内容中将发挥十分重要的作用。
单位矩阵:对角线上全为 1,其余元素全为 0 的方阵。单位矩阵在矩阵运算中起到类似于数字 1 的作用,任何矩阵与单位矩阵相乘都会保持自身不变。
零矩阵:所有元素都为 0 的矩阵。零矩阵在矩阵加法中起到类似于数字 0 的作用。
2. 矩阵求和与标量乘法
只有
相同维数的矩阵才能求和,我们说两个
矩阵相等是指它们不仅维数相同,还意味着两个矩阵的对应元素必须完全相同。我们在
1.4 向量方程一节中,介绍过向量的加法,矩阵相加可以看做是多个向量相加。 矩阵加法、标量乘法规则如下:
加法运算
A+B 如果
A 和
B 都是
m×n的矩阵(即都有
m行和
n列),那么矩阵
A+B 的每一列向量是通过将
A 和
B 的对应列向量逐个元素相加得到的。这个操作在每一列向量上独立进行,因此可以将矩阵相加看作是对对应的列向量进行相加。
Am×n+Bm×n=[a1a2…an]+[b1b2…bn]=[a1+b1a2+b2…an+bn] 给定一个标量 r 和一个
m×n 的矩阵
A ,标量乘法
rA 是一个新的
m×n 矩阵,其中每个元素等于原矩阵对应元素乘以该标量,也可以看作是标量与矩阵的每个列向量逐一相乘。即:
rA=[ra1ra2…ran] 请看下面示例:
矩阵的和与标量乘法遵循通常的代数规则,有如下定理:
定理 1
矩阵运算的基本性质
设
A,B,C 是相同维数的矩阵,
r,s 是标量,则有:
A+B=B+A (A+B)+C=A+(B+C) A+0=A
r(A+B)=rA+rB (r+s)A=rA+sA r(sA)=(rs)A
3. 矩阵乘法
我们在
1.7 线性变换一节中提到过,矩阵
B 和向量
x 的乘积
Bx 可看作一个线性变换的过程,矩阵
B 把向量
x 变换成了向量
Bx 。如果继续对
Bx 施加变换
A ,就得到了向量
A(Bx) 。在这个过程中,矩阵变换
T(x)=A(Bx) 就是一个
复合变换。现在,我们希望只用一个矩阵
C 就能表示这个复合变换,那么这个
C 如何表示呢?
推导:
C=[Ab1Ab2⋯Abp]设定条件: A 是一个 m×n 的矩阵, B 是一个 n×p 的矩阵, 向量 x∈Rp 。 B 的列向量分别为 b1,b2,…,bp, x 的元素分别为 x1,x2,…,xp 。
矩阵 B 与向量 x 的乘法: 将矩阵
B 与向量
x 相乘,得到:
Bx=x1b1+x2b2+⋯+xpbp 应用矩阵变换 A :
A(Bx)=A(x1b1+x2b2+⋯+xpbp)=x1Ab1+x2Ab2+⋯+xpAbp=[Ab1Ab2…Abp]x 结论:
A(Bx)=[Ab1Ab2…Abp]x
复合变换
T 的标准矩阵
C 可以用
[Ab1Ab2…Abp] 来表示,我们把它记为
AB ,也即:
T(x)=A(Bx)=(AB)x(1) 对矩阵乘积
AB 的定义如下:
定义
矩阵乘积
AB若
A 是一个
m×n 矩阵,
B 是一个
n×p 矩阵,且矩阵
B 的列是
b1,b2,…,bp ,那么乘积
AB 是一个
m×p 的矩阵,其列为
Ab1,Ab2,…,Abp 。即:
AB=A[b1b2…bp]=[Ab1Ab2…Abp] 矩阵乘法的维度匹配
从对矩阵乘积
AB 的定义可以看出,矩阵
Am×n 的列数
n 必须等于矩阵
Bn×p 的行数
n ,乘积的结果是一个
m 行、
p 列的矩阵。例如:
A4×3B3×5=C4×5 ,而
B3×5A4×3 没有定义,可以看出矩阵乘法不满足交换律。
根据矩阵乘积 AB 的定义,观察下面的计算过程:
为了理解矩阵乘法的几何意义,下面的动画展示了两次复合变换的过程,注意观察
A(Bx) 和
(AB)x 的变换结果, 其中
B 是关于
x2=−x1 的
对称矩阵,
A 是
水平剪切矩阵。
4. 计算 AB 的行列法则
在实际计算矩阵乘积 AB 时,我们通常会使用更高效的行列法则 ( Row Column Rule ) ,通过逐行逐列进行乘积求和来计算矩阵乘积的每个元素。
计算
AB 的行列法则
如果矩阵乘积
AB 有定义,那么
AB 中的第
i 行和第
j 列的元素是矩阵
A 的第
i 行与矩阵
B 的第
j 列中对应元素的乘积之和。若
(AB)ij 表示矩阵
AB 中的第
i,j 个元素,且
A 是一个
m×n 的矩阵,则有:
(AB)ij=ai1b1j+ai2b2j+⋯+ainbnj 这个规则可以从计算Ax的行-向量规则推导出来。我们用这个规则重新计算上面示例中 AB 的乘积, 通过观察下面计算 AB 的动画过程来理解这个运算规则:
观察上面的计算过程,我们还可以对行列法则进行推广,
当只需要矩阵乘积的某一行时,可以直接用矩阵
A 的该行与矩阵
B 相乘,有如下结论:
rowi(AB)=rowi(A)⋅B 对于上面的示例,如果我们只需要计算
AB 的第二行,那么计算过程如下:
row2(AB)=row2(A)B=[1−5][413−263]=[−113−9] 行列法则适用范围
对于大多数常见的应用场景,如果矩阵大小在
1000×1000 或以下,行列法则通常足够直接且高效。如果矩阵规模在
10,000×10,000 以上或存在特殊结构(稀疏矩阵、大块矩阵等),则可以考虑使用
列-行展开法以及其他优化技术来提高性能。
5. 矩阵乘法的性质
接下来我们要介绍的是矩阵乘法性质,如结合律、分配律以及单位矩阵的特性,这些性质的灵活运用能够显著提升运算效率,并帮助我们设计出更加高效的算法。
定理2
矩阵乘法的性质
设
A,B,C 是相同维数的矩阵,
r,s 是标量,则有:
A(BC)=(AB)C (乘法结合律)
A(B+C)=AB+AC (乘法左分配率)
(B+C)A=BA+CA (乘法右分配率)
r(AB)=(rA)B=A(rB) (对任意标量 r,标量乘法结合律)
ImA=A=AIn (矩阵乘法的恒等式)
根据对矩阵乘积的定义来证明,设矩阵
C=[c1c2…cp] 由矩阵乘法定义可得:
BC=[Bc1Bc2…Bcp] A(BC)=[A(Bc1)ABc2…A(Bcp)] 由
(1) 式可知,
AB 的定义使得对一切
x 有
A(Bx)=(AB)x ,所以
A(BC)=[(AB)c1(AB)c2…(AB)cp]=(AB)C 设矩阵
A 是
m×n 的矩阵,矩阵
B,C 是
n×p 的矩阵, 根据矩阵乘法的行列法则,矩阵
A(B+C) 的
(i,j) 元素可以表示为:
(A(B+C))ij=ai1(b1j+c1j)+⋯+ain(bnj+cnj)=k=1∑naik(bkj+ckj) 运用标量乘法分配律,再把求和公式进行拆分成两项:
(A(B+C))ij=k=1∑naikbkj+k=1∑naikckj 右侧的表达式
AB+AC 的
(i,j) 元素可以分别计算:
(AB+AC)ij=(AB)ij+(AC)ij=k=1∑naikbkj+k=1∑naikckj 结论:由于
(A(B+C))ij与
(AB+AC)ij 对应元素完全相同,因此
(A(B+C))=(AB+AC)成立。
还是使用
AB 的行列法则来证明。设矩阵
A 为
m×n 矩阵,矩阵
B 为
n×p 矩阵,
r 为实数。
根据
AB 的行列法则
AB 的
(i,j) 元素为:
(AB)ij=k=1∑naikbkj 因此,
r(AB) 的
(i,j) 元素为:
(r(AB))ij=r⋅k=1∑naikbkj 而
(rA)B 的
(i,j) 元素为:
((rA)B)ij=k=1∑n(r⋅aik)bkj=r⋅k=1∑naikbkj 由此可见,
r(AB)ij=((rA)B)ij ,因此
r(AB)=(rA)B。同理,可证
r(AB)=A(rB) 设
Im 是一个
m×m 的单位矩阵,具有如下形式:
Im=10⋮001⋮0⋯⋯⋱⋯00⋮1 根据矩阵乘法行列法则,
ImA 的
(i,j) 元素为:
(ImA)ij=k=1∑m(Im)ik⋅akj 由于
Im 是单位矩阵,因此
(Im)ik 当
i=k 时为
1 ,其他情况为
0 。因此,求和简化为:
(ImA)ij=1⋅aij=aij 这表明
ImA 的第
i 行第
j 列的元素等于
A 的UI应的元素。因此:
Im=A 。同理可证得,
A=AIn 。
从前面对矩阵乘法的定义中,我们已经知道矩阵乘法不满足交换律。这一现象可以从几何角度来理解:对一个向量施加两个不同的矩阵变换时,如果变换的顺序不同,最终得到的结果可能会不同。例如: A 是旋转矩阵, B 是水平拉伸矩阵,请观察下面两种变换:
当然,交换变换顺序也有可能导致相同的结果( AB=BA )。此时,我们称 A 和 B 乘积可交换(前提要满足可相乘的条件 Am×nBn×m=Bn×mAm×n )。定理 2(e) 中单位矩阵 In 与任何矩阵 An×n(方阵)相乘都是可交换的。此外,两个对角矩阵相乘也是可交换的,这是因为对角矩阵的非零元素只出现在主对角线上,而这些元素之间的乘法是独立进行的,不涉及到矩阵的其他元素。例如对角矩阵:A=[3002],B=[2001.5] 相乘可交换。还有,二维平面内的旋转矩阵(更高维度不满足)相乘也是可交换的,请观察下面的变换,矩阵 A 表示逆时针旋转 180∘ ,矩阵 B 表示逆时针旋转 135∘ :
6. 矩阵的幂
矩阵的幂是指将一个矩阵与自身相乘若干次。从矩阵变换的角度来看,矩阵的幂表示对一个向量重复施加同一个线性变换。例如,如果矩阵 A 表示一个变换,那么 A2 表示将该变换施加两次,A3 表示将该变换施加三次,以此类推。矩阵幂的结果可以用来分析在多次重复变换下系统或图形的行为,例如下面的矩阵幂可以对图像进行多次重复变换:
对矩阵 A 进行幂运算时,通常会先尝试对矩阵 A 进行对角化处理,将其表示为A=PDP−1,其中 D 是一个对角矩阵, P 是一个可逆矩阵。对角化的主要作用是简化运算,使得复杂的矩阵幂运算可以转化为更容易处理的形式,从而提高计算效率。需要注意的是,并非所有矩阵都可以对角化。
7. 转置矩阵
给定一个 m×n 矩阵 A ,矩阵 A 的转置 (Transpose) 是一个 n×m 的矩阵,记作 A⊤ ,其列由矩阵 A 的对应行构成。请观察下面对矩阵 A 的转置过程:
转置矩阵有以下的代数性质:
定理 3
转置矩阵的性质
设矩阵
A 和
B 的维数使得以下的和与积能够成立,其中
r 为任意实数,则:
(A⊤)⊤=A
(A+B)⊤=A⊤+B⊤
(rA)⊤=rA⊤
(AB)⊤=B⊤A⊤
我们还是通过矩阵
AB 的
行列法则来证明。证明过程如下:
设
A 是一个
m×n 的矩阵,
B 是一个
n×p 的矩阵,那么它们的乘积
AB 是一个
m×p 的矩阵。矩阵
AB 的
(i,j) 元素为:
(AB)ij=k=1∑naikbkj 矩阵
AB 的转置
(AB)⊤ 是一个
p×m 的矩阵,它的
(i,j) 元素为:
(AB)ij⊤=(AB)ji=k=1∑najkbki 再求
(B⊤A⊤)ij :
(B⊤A⊤)ij=k=1∑n(B⊤)ik(A⊤)kj=k=1∑nbkiajk 可得,
(AB)ij⊤=(B⊤A⊤)ij 由于
(AB)⊤ 和
B⊤A⊤ 的所有
(i,j) 元素相同,因此:
(AB)⊤=B⊤A⊤ 转置矩阵是线性代数中一个重要的工具,它几乎应用于所有的矩阵操作和运算。以下是几个常见的使用场景:在某些矩阵运算中,通过将矩阵的行和列互换(即计算矩阵的转置)可以简化问题的求解;在数据统计中,获取的数据集的行列格式有时并不符合特定算法的输入要求,因此也需要对矩阵进行转置操作以匹配算法的需求;在图像处理和计算机图形学中,转置矩阵常用于表示坐标变换,例如在二维或三维空间中执行旋转、缩放等操作时,矩阵的转置能够帮助转换坐标系或执行反向变换。请观察下面的动画,从几何角度去理解转置矩阵的作用:
转置矩阵一般化的几何解释:在几何上,矩阵的转置操作相当于将线性变换的基向量映射关系“翻转”,具体地说就是将原来变换中的行向量和列向量的角色互换。一般来说,矩阵 A⊤ 对应的几何变换通常是矩阵 A 的逆向变换或与之对偶的变换。例如上面第一个示例中的 A 是一个旋转矩阵,那么 A⊤ 则对应反方向的旋转。
第二个示例中缩放矩阵 A 和它的转置矩阵 A⊤ 在几何上有相同的作用,这时我们称矩阵 A 是对称的。下面是对称矩阵的定义:
定义
对称矩阵
对称矩阵是一个方阵(即行数与列数相等的矩阵),其转置矩阵等于其本身。换句话说,矩阵
A 是对称矩阵,当且仅当对于矩阵中的任意元素
aij 和
aji ,有
aij=aji ,其中
i 和
j 是矩阵的行索引和列索引。
结合前面对角矩阵的特性,我们可以判断出所有的对角矩阵都是对称矩阵。对称矩阵具有良好的数学性质(如特征值为实数、易于分解等),在许多工程问题上应用广泛。
8. 矩阵运算在模式识别中的应用
在人工智能和计算机视觉中,模式识别是关键任务之一。接下来要介绍的应用是一个简化的模式匹配问题,用于判断 2×2 颜色块是否符合特定棋盘格模式。通过矩阵运算(转置与乘法),计算机可自动识别模式,原理可推广至更复杂的图像处理任务。
首先,将给定的
2×2 的颜色块转换为
4×1 的向量
v ,其中蓝色块被编码为
1 ,白色块编码为
0 。再设定一个用于专门用于检测
v 对应的棋盘格模式的
矩阵 M :
M=100−101000010−1001 接下来,模式识别的思路是这样的:计算
xTMx ,如果结果不为
0 ,那么
x=v 匹配失败;如果结果为
0 ,且
xx=0 ,那么
x=v 匹配成功。