线性代数与几何变换

/ dousha99

先来测试一下 WordPress 里面究竟能不能显示矩阵:

[1234] \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}

你应该看到一个包含 1, 2, 3, 4 的 2x2 矩阵。

线性代数的一大用途就是表示一些很几何的东西。然而我们上课的时候确实没怎么提及,主要还是讲了许多关于计算的内容。这篇文章的主要用途就是记一下线性代数除了计算和出考试题以外还有什么作用。

这篇文章假定你已经浏览过线性代数,所以不会再介绍关于向量和矩阵的基本概念。

一些基本思想

我们可以使用一对数字或者三个有序的数字表示平面或者空间中的一个点。我们可以写成点 P=(3,4) P = (3, 4) 表示这个点在坐标系中 x=3 x = 3 y=4 y = 4 的位置。

我们也可以用向量来表示点 P P . 其形式可以写成:

p=[34] \vec{p} = \begin{bmatrix} 3 \\ 4 \end{bmatrix}

注意到这里的向量和我们之前的表示形式不同(或者说相同)——其是竖写的,而不像坐标是横写的。这样写是……为了和矩阵的计算行为一致。

对于三维向量,我们也可以这样写:

p3=[xyz]\vec{p}_3 = \begin{bmatrix} x \\ y \\ z \end{bmatrix}

当我们谈到线性变换的时候,我们实际上是在讨论缩放旋转挤压投影等操作的总和。注意到这里是没有平移的——所有的线性变换都不会移动原点的位置。如果移动了,我们就没法用接下来的方法来表示了。

下面我们来探索线性变换和矩阵的关系。

二维几何变换

考虑一个单位矩阵 I2 \textbf{I}_2 , 学习过线性代数的你应该知道对于单位矩阵,其满足如下性质:

[1001][xy]=[xy]\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} x \\ y \end{bmatrix}

但是,如果我们换一个思路来看:将矩阵作为一个向量变换函数,如同 f(x)f(x) 一样,我们将矩阵写在向量左边就有了除了要遵循矩阵运算规则的意义了。可是我们如何定义这样一个函数呢?

我们先来考虑形成坐标轴的两个单位向量:x\vec{x}y\vec{y}. 其值分别为(为了节省纸张我们横着写)(1,0)(1, 0)(0,1)(0, 1). 这两个向量的线性组合(各自乘以一个标量并相加)可以表示整个二维平面上的所有点。

我们可以凭直觉猜到对于任何变换矩阵 M\textbf{M}, 其他点的坐标变换必然受制于这两个向量的变换。但具体的形式如何呢?不妨做一些计算:对于给定一个变换矩阵 M\textbf{M} 其形式如下:

[abcd] \begin{bmatrix} a & b \\ c & d \end{bmatrix}

那么我们通过暴力计算知道其满足如下条件:

x=Mx=[ac]\vec{x^{\prime}} = \textbf{M} \cdot \vec{x} = \begin{bmatrix} a \\ c \end{bmatrix}
y=My=[bd]\vec{y^{\prime}} = \textbf{M} \cdot \vec{y} = \begin{bmatrix} b \\ d \end{bmatrix}

这时候我们可以得出这样一个结论:矩阵的第一列是变换后的 x\vec{x} 向量,第二列是变换后的 y\vec{y} 向量。

那么,单位矩阵的单位性质 (identity property) 也就很容易得出了——变换前和变换后的单位向量并没有发生变化。

有变换就有逆变换。现在逆矩阵的几何意义也明晰了起来:对于一个变换矩阵 M\textbf{M}, 其逆矩阵 M1\textbf{M}^{-1} 满足这样一个性质:

M1M=I\textbf{M}^{-1} \cdot \textbf{M} = \textbf{I}

这就意味着逆矩阵是原变换的逆变换。我们可以通过暴力计算得出二维矩阵的逆变换如下:

[abcd]1=1adbc[dbca]\begin{bmatrix} a & b \\ c & d \end{bmatrix} ^{-1} = \frac{1}{ad - bc} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix}

当然,并不是所有矩阵都有逆矩阵——当矩阵的行列式为 0 时(是奇异矩阵时)它就没有逆矩阵,就像不是所有变换都有逆变换一样。对于降低维度的变换,一般是没有逆变换的。我们将在之后说明。

缩放

现在我们可以尝试大胆使用矩阵去表述一个变换了。我们先从缩放入手。

我们希望将坐标沿 xx 轴缩放 kk 倍(k0k \neq 0 ),那么我们可以这样写:

Sk:x=[k001]\textbf{S}_{k:x} = \begin{bmatrix} k & 0 \\ 0 & 1 \end{bmatrix}

同理,在 yy 轴缩放 hh 倍,我们可以这样写:

Sh:y=[100h] \textbf{S}_{h:y} = \begin{bmatrix} 1 & 0 \\ 0 & h \end{bmatrix}

现在我们尝试将两个变换合并,暴力计算可以得出如下结论:

Sh:ySk:x=Sk:xSh:y=[k00h]\textbf{S}_{h:y} \cdot \textbf{S}_{k:x} = \textbf{S}_{k:x} \cdot \textbf{S}_{h:y} = \begin{bmatrix} k & 0 \\ 0 & h \end{bmatrix}

即缩放变换是可以交换的。

如果我们深挖下去,还会发现这样一个有趣的现象:

det(Sk:x)=k \det (\textbf{S}_{k:x}) = k
det(Sh:y)=h\det (\textbf{S}_{h:y}) = h
det(Sk:xSh:y)=kh \det (\textbf{S}_{k:x} \cdot \textbf{S}_{h:y}) = k \cdot h

矩阵行列式的几何意义也清晰起来:其代表变换后对于单位面积四边形的缩放比例。事实上这个对应关系并不仅限于缩放,其适用于所有二维矩阵。

注意到这里的 kkhh 并不一定是正数,他们也可以是 00 或者小于 00 的数。对于小于 00 的数,其很好理解:将对应的轴镜像放大;对于等于 00 的数,其实际上是一个投影,我们会在之后的章节中描写。

旋转

这里我们讨论纯旋转,即行列式为 11 的矩阵(因为如果不等于 1 1 的话会同时产生缩放,这个变换的行为会很烦人)。我们已经学习过基本的复变函数,那么不妨借用一下欧拉公式:

eiθ=cos(θ)+isin(θ) e^{i\theta} = \cos(\theta) + i\sin(\theta)

得到我们的旋转矩阵:

Rθ=[cos(θ)sin(θ)sin(θ)cos(θ)] \textbf{R}_{\theta} = \begin{bmatrix} \cos(\theta) & -\sin(\theta) \\ \sin(\theta) & \cos(\theta)\end{bmatrix}

跳步有点快……我们将 x\vec{x} 视作 1+0i=e0 1 + 0i = e^{0} , y\vec{y} 视作 0+1i=eiπ2 0 + 1i = e^{\frac{i\pi}{2}} . 那么旋转操作即为二者分别乘上 eiθ e^{i\theta} . 之后通过欧拉公式展开化简即可。

我们也可以通过直觉得出旋转操作也是可交换的,即满足 RθRϕ=RϕRθ \textbf{R}_{\theta} \cdot \textbf{R}_{\phi} = \textbf{R}_{\phi} \cdot \textbf{R}_{\theta} . 读者可自行验算。

挤压

如果我们在旋转时按住一个坐标轴不动呢?这时我们会将原本正交的结构拉伸成为非正交的结构。

我们已经在中学阶段学习过斜二测画法。其实斜二测画法是一种挤压变换。它等效于将 xx 轴按住不动并将 yy 轴顺时针旋转 45 45 度,并缩小一半:

S2=[124024] \mathbf{S}_{2} = \begin{bmatrix} 1 & \frac{\sqrt{2}}{4} \\ 0 & \frac{\sqrt{2}}{4} \end{bmatrix}

如果我们使 yy 轴与 xx 轴重合,会如何呢?这时候我们就会产生这样一个挤压矩阵:

S1=[1000] \mathbf{S}_{1} = \begin{bmatrix} 1 & 0 \\ 0 & 0 \end{bmatrix}

如果还记得上面我们提到:矩阵每一列就是变换后对应的轴上单位向量,那么我们会发现我们将一个二维空间挤压到了一条一维的直线上:新的坐标轴将无法「张成」一个平面,而只能张成一条直线。

挤压操作也是可以交换的,读者可以自行验证有 S2S1=S1S2\mathbf{S}_{2} \cdot \mathbf{S}_{1} = \mathbf{S}_{1} \cdot \mathbf{S}_{2}.

投影

投影是一种特殊的变换——它将一个高维空间映射到低维空间。一个最简单的投影是原点投影,即:

[0000]\begin{bmatrix} 0 & 0 \\ 0 & 0 \end{bmatrix}

这个变换会将任何点都变换到 (0,0) (0, 0) . 似乎没有什么意思。

另一个简单的变换是将 nn 维投影到 n1n - 1 维,我们以平面向线的投影为例子:

Px=[1000] \mathbf{P}_{x} = \begin{bmatrix} 1 & 0 \\ 0 & 0 \end{bmatrix}

我们也可以选择不向轴上投影,而是向平面内的任意一条直线投影。设直线 \ell 的方程为 :Ax+By=0 \ell : Ax + By = 0 , 定义其方向向量为 (BA2+B2,AA2+B2) (\frac{B}{\sqrt{A^2 + B^2}}, -\frac{A}{\sqrt{A^2 + B^2}}) , 可变换为对应的旋转矩阵:

R=[BA2+B2AA2+B2AA2+B2BA2+B2]\mathbf{R}_{\ell} = \begin{bmatrix} \frac{B}{\sqrt{A^2 + B^2}} & \frac{A}{\sqrt{A^2 + B^2}} \\ \frac{-A}{\sqrt{A^2 + B^2}} & \frac{B}{\sqrt{A^2 + B^2}} \end{bmatrix}

现在我们将旋转矩阵和投影矩阵组合,得到任意直线投影:

P=PxR=[BA2+B2AA2+B200]\mathbf{P}_{\ell} = \mathbf{P}_{x} \cdot \mathbf{R}_{\ell} = \begin{bmatrix} \frac{B}{\sqrt{A^2 + B^2}} & \frac{A}{\sqrt{A^2 + B^2}} \\ 0 & 0 \end{bmatrix}

虽然投影的交换性似乎是一个很滑稽的概念,但我们仍旧可以验证投影操作是可交换的。

三维几何变换

我们可以借鉴二维变换当中的一些内容,比如,我们依旧可以认为对于三维的变换矩阵 M3\textbf{M}_{3}, 我们依然可以将其视作变换后的 x,y,z\vec{x}, \vec{y}, \vec{z} 的坐标值。但是我们需要注意到:二维变换中的一些性质在三维(以及更高维)中失效了。

旋转不可交换

当我们尝试组合三维旋转时,必须意识到其不像二维旋转那样可以交换。在三维空间中进行的旋转是有操作顺序的。考虑这两个矩阵:

Rx=[100001010] \mathbf{R}_{-x} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & -1 & 0 \end{bmatrix}
Ry=[001010100] \mathbf{R}_{-y} = \begin{bmatrix} 0 & 0 & -1 \\ 0 & 1 & 0 \\ 1 & 0 & 0 \end{bmatrix}

当我们计算 RxRy\mathbf{R}_{-x} \cdot \mathbf{R}_{-y}RyRx\mathbf{R}_{-y} \cdot \mathbf{R}_{-x} 时,会发现这两个矩阵的结果不一样:

RxRy=[010001100] \mathbf{R}_{-x} \cdot \mathbf{R}_{-y} = \begin{bmatrix} 0 & -1 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 0 \end{bmatrix}
RyRx=[001100010] \mathbf{R}_{-y} \cdot \mathbf{R}_{-x} = \begin{bmatrix} 0 & 0 & -1 \\ 1 & 0 & 0 \\ 0 & -1 & 0 \end{bmatrix}

通常情况下,可以考虑使用 xyzxyz 顺序描述三维空间内的旋转。

正在加载评论……

发表评论

您的评论将由管理员审核后方可公开显示。

Your comments will be submitted to a human moderator and will only be shown publicly after approval.