线性代数中的矩阵

134 阅读6分钟

线性代数中的矩阵

矩阵是3D数学的重要基础。它主要用来描述两个坐标系统间的关系,通过定义一种运算而将一个坐标系中的向量转换到另一个坐标系中。

数学定义

在线性代数中,矩阵就是以行和列形式组织的矩形数字块。回忆前面曾将向量定义为一维数组,矩阵 也能像那样定义为二维数组("二维数组"中的"二"来自它们是行和列的事实,不要和2D向量或矩阵混淆)。向量是标量的数组,矩阵则是向量的数组。

矩阵的维度和记法

前面我们把向量的维度定义为它所包含的数的个数,与之类似,矩阵的维度被定义为它包含了多少行 和多少列。一个 r×cr ×c 矩阵有 r 行、 c 列。下面是一个 4×34×3 矩阵的例子:

[4012543124/311/2180]\left[\begin{array}{ccc}4 & 0 & 12 \\ -5 & \sqrt{4} & 3 \\ 12 & -4 / 3 & -1 \\ 1 / 2 & 18 & 0 \end{array}\right]

方阵

行数和列数相同的矩阵称作方阵,这个概念非常重要。

方阵的对角线元素就是方阵中行号和列号相同的元素。例如,3X3矩阵M的对角线元素为 m11m_{11} , m22m_{22}m33m_{33} 。其他元素均为非对角线元素。简单地说,方阵的对角线元素就是方阵对角线上的元素。

[m11m12m13m21m22m23m31m32m33]\left[\begin{array}{lll} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{array}\right]
  • 如果所有非对角线元素都为0,那么称这种矩阵为对角矩阵,例如:
[3000010000500002]\left[\begin{array}{cccc}3 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & -5 & 0 \\ 0 & 0 & 0 & 2\end{array}\right]

单位矩阵是一种特殊的对角矩阵。 n 维单位矩阵记作 InI_{n} ,是 n×nn ×n 矩阵,对角线元素为1,其他元素 为0。例如,3X3单位矩阵:

I3=[100010001]I_{3}=\left[\begin{array}{lll}1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{array}\right]

单位矩阵非常特殊,因为它是矩阵的乘法单位元。其基本性质是用任意一. 个矩阵乘以单位矩阵,都将得到原矩阵。所以,在某种意义上,单位矩阵对矩阵的作用就犹如1对于标量的作用。

向量作为矩阵使用

矩阵的行数和列数可以是任意正整数,当然也包括1。我们已经见过一行或一列的矩阵了----向量。 一个 n 维向量能被当作 1×n1 ×n 矩阵或 n×1n ×1 矩阵。 1×n1 ×n 矩阵称作行向量, n×1n ×1 矩阵称作列向量。行向量平着写,列向量则竖着写,例如:

[123][456]\left[\begin{array}{lll}1 & 2 & 3\end{array}\right] \quad\left[\begin{array}{l}4 \\ 5 \\ 6\end{array}\right]

直到现在,这两种记法都是混合使用的。其实,在几何意义上它们是一样的,绝大多数情况下它们的区别也不重要。

转置

考虑一个 r×cr ×c 矩阵MMMM的转置记作 MTM^{T} ,是一个 c×rc ×r 矩阵,它的列由M的行组成。可以从另一 方面理解, MijT=MjiM_{i j}^{T}=M_{j i} ,即沿着矩阵的对角线翻折。下面给出了两个矩阵转置的例子。

[123456789101112]T=[147102581136912][abcdefghi]T=[adgbehcfi]\left[\begin{array}{ccc} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{array}\right]^{T}=\left[\begin{array}{lll} 1 & 4 & 7 & 10 \\ 2 & 5 & 8 & 11 \\ 3 & 6 & 9 & 12 \end{array}\right] \quad\left[\begin{array}{lll} a & b & c \\ d & e & f \\ g & h & i \end{array}\right]^{T}=\left[\begin{array}{lll} a & d & g \\ b & e & h \\ c & f & i \end{array}\right]

对于向量来说,转置将使行向量变成列向量,使列向量成为行向量

[xyz]T=[xyz][xyz]T=[xyz]\left[\begin{array}{lll} x & y & z \end{array}\right]^{T}=\left[\begin{array}{l} x \\ y \\ z \end{array}\right] \quad\left[\begin{array}{l} x \\ y \\ z \end{array}\right]^{T}=\left[\begin{array}{lll} x & y & z \end{array}\right]

转置记法经常用于在书面表达中书写列向量,如 [123]T\begin{bmatrix}1&2&3\end{bmatrix}^T。 有两条非常简单但很重要的关于矩阵转置的引理:

  • 对于任意矩阵MM, (MT)T=M(M^{T})^{T}=M 。从另一方面来说,将一个矩阵转置后,再转置一次,便会得到原矩阵。这条法则对向量也适用。
  • 对于任意对角矩阵DD,都有 DT=DD^{T}=D ,包括单位矩阵II也如此。

标量和矩阵的乘法

矩阵 MM 能和标量 kk 相乘,结果是一个和 MM 维数相同的矩阵。矩阵和标量相乘的记法如下所示, 标量经常写在左边,不需要写乘号。这种乘法法则很直观,即用k乘以M中的每个元素。

kM=k[m11m12m13m21m22m23m31m32m33]=[km11km12km13km21km22km23km31km32km33]k M=k\left[\begin{array}{lll} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{array}\right]=\left[\begin{array}{lll} k m_{11} & k m_{12} & k m_{13} \\ k m_{21} & k m_{22} & k m_{23} \\ k m_{31} & k m_{32} & k m_{33} \end{array}\right]

矩阵乘法

某些情况下,两个矩阵能够相乘。决定矩阵能否相乘以及怎样计算结果的法则初看起来有些奇怪。一 个 r×nr ×n 矩阵A能够乘以一个 n×cn ×c 矩阵B,结果是一个 r×cr ×c 矩阵,记作ABAB。 例如,设AA4×24 \times 2矩阵,BB2×52\times5矩阵,那么结果ABAB4×54\times5矩阵:

image.png

如果矩阵A的列数和B的行数不匹配,则乘法AB无意义。

矩阵乘法计算如下:记 r×nr ×n 矩阵 A 与 n×cn ×c 矩阵B的积 r×cr ×c 矩阵ABABCCCC的任意元素 CijC_{i j} 等于AA 的第 ii 行向量与 BB 的第 jj 列向量的点乘结果。正式定义为:

cij=k=1naikbkjc_{i j}=\sum_{k=1}^{n} a_{i k} b_{k j}

这看起来很复杂,其实这是一个简单的法则。对结果中的任意元素 CijC_{ij},取 AA 的第 ii 行和 BB 的第 jj 列,将行和列中的对应元素相乘,然后将结果相加(等于 AA 的第 ii 行和 BB 的第 jj 列的点积)。CijC_{ij} 就等于这个和:

看一些例子,下面展示了怎样计算 C24C_{24}

[c11c12c13c14c15c21c22c23c24c25c31c32c33c34c35c41c42c43c44c45]=[a11a12a21a22a31a32a41a42][b11b12b13b14b15b21b22b23b24b25]\left[\begin{array}{ccccc} c_{11} & c_{12} & c_{13} & c_{14} & c_{15} \\ c_{21} & c_{22} & c_{23} & c_{24} & c_{25} \\ c_{31} & c_{32} & c_{33} & c_{34} & c_{35} \\ c_{41} & c_{42} & c_{43} & c_{44} & c_{45} \end{array}\right] = \left[\begin{array}{cc} a_{11} & a_{12} \\ a_{21} & a_{22} \\ a_{31} & a_{32} \\ a_{41} & a_{42} \end{array}\right] \left[\begin{array}{ccccc} b_{11} & b_{12} & b_{13} & b_{14} & b_{15} \\ b_{21} & b_{22} & b_{23} & b_{24} & b_{25} \end{array}\right]
c24=a21b14+a22b24c_{24} = a_{21} b_{14} + a_{22} b_{24}
  • 任意矩阵 MM 乘以方阵 SS,不管从哪边乘,都将得到与原矩阵大小相同的矩阵。当然,前提是假定乘法有意义。如果 SS 是单位矩阵,结果将是原矩阵 MM,即:
MI=IM=MM I = I M = M

(这就是 II 被称为单位矩阵的缘故)。

  • 矩阵乘法不满足交换律, 即: ABBAAB \neq BA
  • 矩阵乘法满足结合律,即: (AB)C=A(BC)(AB)C = A(BC) (假设 AA, BB, CC 的维数使其乘法有意义,要注意如果 (AB)C(AB)C 有意义,那么 A(BC)A(BC) 一定也有意义。) 矩阵乘法结合律可以扩展到多个矩阵的情况下,如:ABCDEF=((((AB)C)D)E)F=A((((BC)D)E)F)=(AB)(CD)(EF)A B C D E F = ((((A B) C) D) E )F = A((((B C) D) E) F) = (A B)(C D)(E F)

注意所有括法都能计算出正确结果,但有些组中标量乘法更少。寻找使标量乘法最少的括法的问题称作:矩阵链问题。

  • 矩阵乘法也满足与标量或向量的结合律,即:
(kA)B=k(AB)=A(kB)(vA)B=v(AB)(k A) B = k(A B) = A(k B) \quad (v A) B = v(A B)
  • 矩阵积的转置相当于先转置矩阵然后以相反的顺序乘:
    (AB)T=BTAT(A B)^{T}=B^{T} A^{T} 这一结论可以扩展到多个矩阵的情形: (M1M2Mn1Mn)T=MnTMn1TM2TM1T\left(M_{1} M_{2} \cdots M_{n-1} M_{n}\right)^{T}=M_{n}^{T} M_{n-1}^{T} \cdots M_{2}^{T} M_{1}^{T}

向量与矩阵的乘法

因为向量能被当作是一行或一列的矩阵,所以能够用前一节所讨论的规则与矩阵相乘。在这里,行向 量和列向量的区别非常重要。下面展示了3D 行、列向量如何左乘、右乘 3×33×3矩阵:

[xyz][m11m12m13m21m22m23m31m32m33]=[xm11+ym21+zm31xm12+ym22+zm32xm13+ym23+zm33]\left[\begin{array}{ccc} x & y & z \end{array}\right] \left[\begin{array}{ccc} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{array}\right] = \left[ \begin{array}{ccc} x m_{11} + y m_{21} + z m_{31} & x m_{12} + y m_{22} + z m_{32} & x m_{13} + y m_{23} + z m_{33} \end{array} \right]
[m11m12m13m21m22m23m31m32m33][xyz]=[xm11+ym12+zm13xm21+ym22+zm23xm31+ym32+zm33]\left[\begin{array}{ccc} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{array}\right] \left[\begin{array}{c} x \\ y \\ z \end{array}\right] = \left[ \begin{array}{l} x m_{11} + y m_{12} + z m_{13} \\ x m_{21} + y m_{22} + z m_{23} \\ x m_{31} + y m_{32} + z m_{33} \end{array} \right]
[m11m12m13m21m22m23m31m32m33][xyz]=(无定义)\left[\begin{array}{ccc} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{array}\right] \left[\begin{array}{ccc} x & y & z \end{array}\right] = (\text{无定义})
[xyz][m11m12m13m21m22m23m31m32m33]=(无定义)\left[\begin{array}{c} x \\ y \\ z \end{array}\right] \left[\begin{array}{ccc} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{array}\right] = (\text{无定义})

关于矩阵和向量相乘的注意事项:

  • 结果向量中的每个元素都是原向量与矩阵中单独行或列的点积。
  • 矩阵中的各个元素决定了输入向量中特定元素在输出向量中占的比重。例如,m11m_{11} 决定了输入 xx 对输出 xx 值的贡献。
  • 矩阵与向量的乘法满足对向量加法的分配律。对于向量 vvww 和矩阵 MM,有:
(v+w)M=vM+wM(v + w) M = v M + w M

几何解释

一般来说,方阵能描述任意线性变换。下一篇将给出线性变换的完整定义。但现在,知道线性变换保留了直线和平行线,而原点没有移动就足够了。线性变换保留直线的同时,其他的几何性质如长度、角度、面积和体积可能就被变换改变了。从非技术意义上说,线性变换可能"拉伸"坐标系,但不会"弯曲" 或"卷折"坐标系。下面是一组非常有用的变换:

  • 旋转
  • 缩放
  • 镜像
  • 投影
  • 仿射

矩阵是怎样变换向量的

向量在几何上能被解释成一系列与轴平行的位移。例如,向量 [1,3,4][1, -3, -4] 能被解释成依次进行以下位移:

[1,0,0],[0,3,0],[0,0,4].[1,0,0], \quad [0,-3,0], \quad [0,0,-4].

依据三角形法则将这个位移解释成向量的加法。

[134]=[100]+[030]+[004]\left[\begin{array}{c} 1 \\ -3 \\ 4 \end{array}\right] = \left[\begin{array}{c} 1 \\ 0 \\ 0 \end{array}\right] + \left[\begin{array}{c} 0 \\ -3 \\ 0 \end{array}\right] + \left[\begin{array}{c} 0 \\ 0 \\ 4 \end{array}\right]

一般来说,任意向量 vv 都能写为“扩展”形式:

v=[xyz]=[x00]+[0y0]+[00z]v = \left[\begin{array}{c} x \\ y \\ z \end{array}\right] = \left[\begin{array}{c} x \\ 0 \\ 0 \end{array}\right] + \left[\begin{array}{c} 0 \\ y \\ 0 \end{array}\right] + \left[\begin{array}{c} 0 \\ 0 \\ z \end{array}\right]

另一种略有差别的形式为:

v=[xyz]=x[100]+y[010]+z[001]v = \left[\begin{array}{c} x \\ y \\ z \end{array}\right] = x \left[\begin{array}{c} 1 \\ 0 \\ 0 \end{array}\right] + y \left[\begin{array}{c} 0 \\ 1 \\ 0 \end{array}\right] + z \left[\begin{array}{c} 0 \\ 0 \\ 1 \end{array}\right]

让我们将上面的向量和重新写一遍,这次,分别将 pp, ggrr 定义为指向 +x+x+y+y+z+z 方向的单位向量。

v=xp+yg+zrv = x p + y g + z r

现在,向量 vv 就被表示成向量 pp, qq, rr 的线性变换了。向量 pp, qq, rr 称作基向量。这里的基向量是笛卡尔坐标轴,但事实上,一个坐标系能用任意 3 个基向量定义,当然这三个向量要线性无关(也就是不在同一平面上)。以 pp, qq, rr 为行构建一个 3×33 \times 3 矩阵 MM,可得到:

M=[pqr]=[pxpypzqxqyqzrxryrz]M = \left[\begin{array}{c} p \\ q \\ r \end{array}\right] = \left[\begin{array}{ccc} p_{x} & p_{y} & p_{z} \\ q_{x} & q_{y} & q_{z} \\ r_{x} & r_{y} & r_{z} \end{array}\right]

用一个向量乘以该矩阵,得到:

[xyz][pxpypzqxqyqzrxryrz]=[xpx+yqx+zrxxpy+yqy+zryxpz+yqz+zrz]=xp+yq+zr\begin{aligned} \left[\begin{array}{ccc} x & y & z \end{array}\right] \left[\begin{array}{ccc} p_{x} & p_{y} & p_{z} \\ q_{x} & q_{y} & q_{z} \\ r_{x} & r_{y} & r_{z} \end{array}\right] &= \left[\begin{array}{ccc} x p_{x} + y q_{x} + z r_{x} & x p_{y} + y q_{y} + z r_{y} & x p_{z} + y q_{z} + z r_{z} \end{array}\right] \\ &= x p + y q + z r \end{aligned}

这和前面计算转换后的 v 的等式相同。我们发现关键点是:

如果把矩阵的行解释为坐标系的基向量,那么乘以该矩阵就相当于执行了一次坐标转换。若有:

aM=ba M = b

我们就可以说,矩阵 MMaa 转换到 bb

从这一点看,术语"转换"和"乘法"是等价的。

坦率地说,矩阵并不神秘,它只是用一种紧凑的方式来表达坐标转换所需的数学运算。进一步,用线 性代数操作矩阵,是一种进行简单转换或导出更复杂转换的简便方法。

矩阵的形式

“不幸的是,没有人能告诉你矩阵像什么——你必须自己去感受。”
这是热门电影《黑客帝国》中的对白,而且它对于线性代数中的矩阵也同样成立。
除非您具备想象一个矩阵的能力,否则它只是一个方盒子中的九个数而已。

我们曾宣称矩阵表达坐标转换,所以当我们观察矩阵的时候,我们是在观察转换,观察新的坐标系。
但这个转换看起来像什么?特定的 3D 转换(如旋转、仿射等)和 3×33 \times 3 矩阵的 9 个数字之间有什么关系?
怎样构建一个矩阵来执行这个转换,而不是盲目照搬书上的公式?

为了回答这些问题,先看一下基向量 [1,0,0][1,0,0], [0,1,0][0,1,0], [0,0,1][0,0,1] 乘以任意矩阵 MM 时的情况:

[100][m11m12m13m21m22m23m31m32m33]=[m11m12m13]\left[\begin{array}{ccc}1 & 0 & 0\end{array}\right] \left[\begin{array}{ccc} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{array}\right] = \left[\begin{array}{ccc} m_{11} & m_{12} & m_{13} \end{array}\right]
[010][m11m12m13m21m22m23m31m32m33]=[m21m22m23]\left[\begin{array}{ccc}0 & 1 & 0\end{array}\right] \left[\begin{array}{ccc} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{array}\right] = \left[\begin{array}{ccc} m_{21} & m_{22} & m_{23} \end{array}\right]
[001][m11m12m13m21m22m23m31m32m33]=[m31m32m33]\left[\begin{array}{ccc}0 & 0 & 1\end{array}\right] \left[\begin{array}{ccc} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{array}\right] = \left[\begin{array}{ccc} m_{31} & m_{32} & m_{33} \end{array}\right]

正如您所见,用基向量 [1,0,0][1,0,0] 乘以 MM 时,结果是 MM 的第 1 行。其他两行也有同样的结果。这是一个关键的发现:

矩阵的每一行都能解释为转换后的基向量。

这和前一节中的发现基本思想是一样的,只不过是从不同的角度来看。这个强有力的概念有两条重要 性质:

  • 有了一种简单的方法来形象化解释矩阵所代表的变换。本节的后面将给出一些二维和三维的实例。
  • 有了反向建立矩阵的可能--给出一个期望的变换(如旋转、缩放等),能够构造一个矩阵代 表此变换。我们所要做的一切就是计算基向量的变换,然后将变换后的基向量填入矩阵。

让我们看一些实例。首先看2D情况,做一下热身以进入下一个全3D的例子。 看下列 2×22 \times 2 矩阵:

M=[2112]M = \left[\begin{array}{cc} 2 & 1 \\ -1 & 2 \end{array}\right]

这个矩阵代表的变换是什么?首先,从矩阵中抽出基向量 ppqq

p=[21]p=\left[\begin{array}{ll}2 & 1\end{array}\right]

q=[12]q=\left[\begin{array}{ll} -1 & 2 \end{array}\right]

以"原"基向量 (x 轴, y 轴)做参考,在笛卡尔平面中展示了这些向量。

如下图所示,xx 基向量变换至上面的 pp 向量,yy 基向量变换至 qq 向量。
所以,在 2D 中想象矩阵的方法就是想象由行向量构成的 “L” 形状。

在这个例子中,能够很清楚地看到,MM 代表的部分变换是逆时针旋转 2626^\circ

2d转换矩阵的行向量.svg

平行四边形称作"偏转盒",在盒子中画一个物体有助于理解

偏转盒.svg

很明显,矩阵M不仅旋转坐标系,还会拉伸它。

总结

  • 方阵的行能被解释为坐标系的基向量。
  • 为了将向量从原坐标系变换到新坐标系,用它乘以一个矩阵。
  • 从原坐标系到这些基向量定义的新坐标系的变换是一种线性变换。线性变换保持直线和平行线,但角度、长度、面积或体积可能会被改变。
  • 零向量乘以任何矩阵仍然得到零向量。因此,方阵所代表的线性变换的原点和原坐标系的 原点一致。变换不包含原点。
  • 可以通过想象变换后的坐标系的基向量来想象矩阵。这些基向量在2D中构成"L"型,在 3D中构成"三角架"型。用一个盒子及辅助物更有助于理解。