tips:我们这里介绍的都是极为感性的认识,追求的是直观理解,绝对谈不上严谨。我们的终极目标是教会你如何操作和使用这个数学工具。更严谨的数学推导和定义,建议在学校课堂或专业教材中深入学习!
在计算机图形学中矩阵是一个 矩形数表 ,其中可以放各种各样的数字,例如这样
A=[12π1]B=[ln27821880.5114514]
我们用 Ai,j 表示矩阵 A 的第 i 行第 j 列的元素。
例如 A1,2 表示矩阵 A 的第 1 行第 2 列的元素,也就是元素 π 。
矩阵的尺寸
通过上面的例子我们可以看到矩阵的行数和列数是可以不同的。
上例中 A 是 2 行 2 列的矩阵, B 是 2 行 3 列的矩阵。
我们将 A B 的尺寸记作 Size(A)=2×2 ,Size(B)=2×3 。
对于更一般的矩阵 C ,设 C 为 n 行 m 列的矩阵,则 C 的形状记作 Size(C)=n×m 。
特别的,如果 m=n ,我们称 C 是一个 方阵 。
这里的 × 表示的是笛卡尔积,而不是普通的乘法。它不满足交换率,即 a×b=b×a。所以 2×3 和 3×2 表示的是不同尺寸的矩阵。
矩阵的运算
矩阵的加减法
矩阵的加减法规则简单到一句话就能概括:对应位置的元素直接相加/相减。
既然要“对应位置”,那两个矩阵的尺寸必须相同。
例如:
设 矩阵 A 和 B 形状都是 n×m 我们想计算:
C=A±B
那我们只需要对所有下标 i 和 j 对应的元素进行实数加减法:Ci,j=Ai,j±Bi,j。最后得到的矩阵 C 的形状和 A、B 一模一样。
我们拿加法举例:
A=123123123B=111222333
那么
C=A+B=1+12+13+12+12+23+21+32+33+3=234345456
矩阵的转置
矩阵的转置是线性代数中的一种新的运算,它是一个一元运算,在我们之前学习的代数中是没有这个运算的,或者是说这个运算在我们之前学习的代数中是没有意义的。
转置运算就是将矩阵的行和列进行交换,就像你拿着一个矩形的两个对角(不相邻的两个角),这将构成一个旋转轴,将这个矩形平面绕着这个轴旋转 180 度一样。
假设我们有一个矩阵 A ,那么我们将矩阵 A 的转置记作 AT。
对每个元素 Ai,j 有 (AT)i,j=Aj,i
例如:
A=123123123AT=111222333
为什么说在我们之前的代数中转置是没有意义的,因为对于一个 实数 k 我们将它看作是一个 1×1 的矩阵对于一个 1×1 的矩阵做转置还是它本身
矩阵的数乘
数乘就是让一个 实数 与 矩阵 相乘
规则是:对矩阵中的每个元素乘以这个数
假设我们有一个矩阵 A 和 实数 k ,k⋅A 就是对每个元素 Ai,j 乘以 k ,即 k⋅Ai,j 。
例如:
A=123123123k=2k⋅A=2⋅A=246246246
矩阵的乘法
在介绍矩阵的乘法前,我们先介绍一下向量(虽然你很熟悉,但是线性代数中的向量与高中阶段的向量有些不同的地方)
如果矩阵的尺寸是 1×n 的,或者是 n×1 的,则这样尺寸的矩阵就是我们熟悉的向量了,所以向量其实是一种特殊的矩阵。
例如:
v=[12]
x=[12]
其中 1×n 的向量我们叫做 行向量, n×1 的向量我们叫做 列向量。
我们现在知道了向量其实是特殊形状的矩阵,它相对简单,我们首先看看向量(简单的矩阵)之间的乘法是怎么做的。
我们高中阶段都知道向量的点乘运算是对应元素相乘再求和(显然他们的元素个数应该相同)。
但是我们在线性代数中稍微有些不同,点乘(内积)在线性代数中定义为行向量与列向量的乘积,并且他们的元素个数也必须相同。
假设我们有向量 1×2的行向量 v ,以及 2×1 的列向量 x ,那么 他们做矩阵乘法就是
v×x=vx=∑i=12v1,i⋅xi,1=v1,1⋅x1,1+v1,2⋅x2,1
有时候我们会将 “×” 省略
写成矩阵的形式:
v×x=[12][12]=1⋅1+2⋅2=5
注意,一定不能写成
x×v=[12][12]
这样它会等于
x×v=[12]v=[1⋅v2⋅v]=[1224]
这个叫做向量的外积
由此我们可以看出,矩阵的乘法之间是没有交换律的,即 A×B=B×A
现在我们扩展到通常意义上的矩阵上,我们直接看例子:
对于一个 2×2 的矩阵 A
A=[12π1]
我们可以把 A 写成这样:
A=[v1v2]
其中 v1=[12]T ,v2=[π1]T
或者我们还可以把 A 写成:
A=[v3v4]
其中
v3=[1π] ,v4=[21]
可以看到矩阵的元素可以组合成向量,我们让矩阵与向量相乘
A×x=[12π1][12]=[v1v2][12]=v1⋅1+v2⋅2=[1⋅1+π⋅22⋅1+1⋅2]=[1+2π4]
有没有发现我们经过神奇的操作将矩阵乘法化为了我们熟悉的向量的点乘(行向量乘列向量),得到的结果依然是个向量。
我们可以大胆一点
A×A=[12π1][12π1]=[v1v2][v3v4]=v1v3+v2v4
这是列向量乘以行向量的形式,得使用向量的外积
A×A=v1v3+v2v4=[12]v3+[π1]v4=[1v3+πv42v3+1v4]=[1+2π42π1+2π]
恭喜你通过向量运算发明了矩阵乘法,但是在日常计算或者写代码时,我们更常用的是下面这个法则。
假设我们有两个矩阵 A 和 B,我们要计算 C=AB。
矩阵乘法不是你想乘就能乘的。必须满足 Size(A)=n×m, Size(B)=m×p, A 的列数(m)必须等于 B 的行数(m)。
而乘完之后得到的矩阵 C,它的尺寸是:n×p。
对于结果矩阵 C 中的任意一个元素 Ci,j,它的计算规则是:拿矩阵 A 的第 i 行,去和矩阵 B 的第 j 列做向量点乘。
写成数学公式就是:
Ci,j=k=1∑mAi,k⋅Bk,j
我们还拿矩阵 A 自己乘自己来试试:
A=[12π1]
我们要计算 C=A×A:
- C1,1(第1行第1列):拿 A 的第1行 [1π] 乘第1列 [12] ⟹1×1+π×2=1+2π
- C1,2(第1行第2列):拿 A 的第1行 [1π] 乘第2列 [π1] ⟹1×π+π×1=2π
- C2,1(第2行第1列):拿 A 的第2行 [21] 乘第1列 [12] ⟹2×1+1×2=4
- C2,2(第2行第2列):拿 A 的第2行 [21] 乘第2列 [π1] ⟹2×π+1×1=1+2π
把它们拼起来:
C=[1+2π42π1+2π]
矩阵乘法的性质
- AB=BA
- (AB)C=A(BC)
- A(B+C)=AB+AC,((A+B)C=AC+BC)
- (AB)T=BTAT
这些性质如果读者感兴趣自行验证吧
矩阵的逆
学了乘法我们来看看矩阵乘法的逆运算,或者称作矩阵的逆元,什么是逆元呢?在实数中 k 的逆元是 k1=k−1、k=0
在学习矩阵的逆这个概念之前我们看看单位矩阵的概念,在实数中我们有一个单位元也就是 1 ,1 乘任何实数 k 都等于 k ,那么我们矩阵中存不存在这样的单位元呢?
令人失望的在所有尺寸的矩阵下不存在一个统一的单位元,但是对于定义在同一个线性空间中的 n×n 的矩阵来说存在单位元。
对于元素是 3×3 的矩阵的线性空间,我们定义单位元为
I=100010001
对于尺寸更大的方阵来说也类似,就是从左上角,到右下角,都是1,其他都是0
我们上面提到过单位元:无论怎么乘单位元,结果等于它本身
I×A=A×I=A
读者可以自行验证,可以发现无论怎么乘都是 A 本身
在实数中我们知道 当一个数乘以自己的逆的时候,结果等于 1
k×k−1=1
而在矩阵中,我们同样这么定义
A×A−1=A−1×A=I
由于我们的逆是定义在单位元下的,所以同样只有方形矩阵才有逆
逆的性质
- (A−1)−1=A
- (AB)−1=B−1A−1
- 如果一个矩阵的对角阵,并且主对角线上的元素都不为0,则它的逆就是对主对角线上的元素取逆
- 如果一个矩阵是正交矩阵,则它的逆就是它的转置矩阵,如果一个矩阵满足 AAT=ATA=I,则它是正交矩阵
- 矩阵的逆是唯一的