高中数学的行列式法

The purpose of computation is insight, not numbers.
- Richard Hamming

本文旨在介绍高中应试时使用的行列式法,并对其证明与内涵进行补充。

毕竟讲了行列式和压圆却不讲线代实在是一种弟弟行为。

为什么行列式可以计算有向面积和平面法向量,为什么压圆法中面积变化一样?

【其实在斜二测那里讲过为什么面积不变呢w

提示在它该在的地方,只是你需要把鼠标移过去。手机的话也许……是点一下那个位置?

向量

$i^2=j^2=k^2=ijk=-1$

开一点小小的玩笑,这是向量命名的来源。

所以什么是向量呢?

对物理学生来说,向量是一些箭头,有长度和方向两个值决定,可以在空间中任意平移。

对于计算机学生来说,向量是一个列表。

然而对于数学学生来说呢?

数学总是试图建立起一些抽象的模型,所以我们留到之后再说。

当然,在最开始,直观地用箭头理解就好了。由于习惯,我们把原点作为向量的起点。那么与此同时,每个向量可以用其终点的坐标来表示。

向量加法与向量数乘

向量加法可以理解为把一条向量平移到另一条向量的终点,那么这条向量的终点就是这两个向量的和的终点。另一方面
$$
\left[\begin{matrix}x_1\\y_1\end{matrix}\right]+\left[\begin{matrix}x_2\\y_2\end{matrix}\right]=\left[\begin{matrix}x_1+x_2\\y_1+y_2\end{matrix}\right]
$$

为什么这样子定义是合理的呢?

可以考虑把箭头看成一种变换,每个点延箭头平移。那么我们可以选择

向右平移 $x_1$,向上平移 $y_1$;然后向右平移 $x_2$,向上平移 $y_2$

我们当然也可以一次性走完,即

向右平移 $x_1+x_2$,向上平移 $y_1+y_2$

嗯,很合理w

数乘的话,其实可以用类似的方法理解,即对一个向量的缩放(Scaling),所以数字也被称为标量(Scalar)。

为什么向量会有列表的表示方法呢?

那两个数 $x_1,y_1$ 是什么意思呢?

我们考虑两个向量 $\hat i=\left[\begin{matrix}1\\0\end{matrix}\right],\hat j=\left[\begin{matrix}0\\1\end{matrix}\right]$,那么一个向量 $\mathbb a=\left[\begin{matrix}x_1\\y_1\end{matrix}\right]$ 可以理解为 $x_1\hat i+y_1\hat j$,即 $\hat i,\hat j$ 通过数乘和加法得到 $\mathbb a$。

可以发现平面直角坐标系中每一条向量都可以通过这种方式得到。由于这种坐标表示的方法,我们称 $\hat i,\hat j$ 为这个平面的基向量。

当然这一部分展开来讲有点难,所以简单理解一下就好。

注意:每当使用坐标来表示向量时,它总是与我们选取的密切相关。

矩阵与线性变换

变换是函数的一种花哨的说法。

其实线性变换就是一种函数,只是输入输出都变成了向量而已。

那么为什么要用“变换”这个花哨的名字来迷糊我们呢?

这是在暗示可以有一些可视化的方式来理解线性变换。

线性变换

变换是有很多种的,并且可以非常复杂,尤其是对于一些复杂的复变函数,其变换有一种畸形的美感。

不过我们在这里仅仅讨论一种基础的变换:“线性”变换。

什么叫“线性”?

直观来讲,线性变换后,直线还是直线,原点位置不动。

如果想要满足直线还是直线,其实需要做到网格线保持平行且等距分布。

由于能力问题,我无法提供图片,所以非常抱歉,还请自己努力理解一下。

那么我们如何使用数值来表示变换呢?

具体来说:我们如何给出一个计算公式,使得对于一个向量坐标,我们能得到变换之后的向量坐标呢?

实际情况是,我们只需要记录变换后的 $\hat i,\hat j$。

因为“网格线保持平行且等距分布”有一个重要推论

对于向量 $\mathbb a=x_1\hat i+y_1\hat j$,如果我们用 $T\left(\mathbb a\right)$ 表示变换后的 $\mathbb a$,那么有
$$T\left(\mathbb a\right)=x_1T\left(\hat i\right)+y_1T\left(\hat j\right)$$

可以试着自己证明一下。

矩阵

神奇地发现,对于二维的情况,我们只需要记录四个数字就可以表示这种奇妙的变换,即

若在线性变换 $T$ 中,$T\left(\hat i\right)=\left[\begin{matrix}a\\c\end{matrix}\right],T\left(\hat j\right)=\left[\begin{matrix}b\\d\end{matrix}\right]$,那么
$$T\left(\left[\begin{matrix}x\\y\end{matrix}\right]\right)=x\left[\begin{matrix}a\\c\end{matrix}\right]+y\left[\begin{matrix}b\\d\end{matrix}\right]=\left[\begin{matrix}ax+by\\cx+dy\end{matrix}\right]$$

通常我们把这些坐标包装在一个 $2\times 2$ 的格子中,称它为矩阵。

可以把一个 $2\times 2$ 矩阵理解为两个特殊的向量,即变换后的 $\hat i,\hat j$。

我们甚至可以直接这样子定义矩阵向量乘法

$$\left[\begin{matrix}a & b\\c & d\end{matrix}\right]\left[\begin{matrix}x\\y\end{matrix}\right]=x\left[\begin{matrix}a\\c\end{matrix}\right]+y\left[\begin{matrix}b\\d\end{matrix}\right]=\left[\begin{matrix}ax+by\\cx+dy\end{matrix}\right]$$

这里矩阵放在左边,类似一个函数。

矩阵乘法与线性变换复合

考虑这样一个问题,现在我们有两个线性变换 $T_1,T_2$,我们想知道 $T_2\left(T_1\left(\mathbb u\right)\right)$。

一个一个计算未免过于复杂。

我们可以发现这两个变换的复合依然是线性的。(为什么?)

那么也就是说,存在一个矩阵可以表示这两个变换的复合。

假设 $T_1,T_2$ 对应的矩阵分别是 $M_1,M_2$,那么 $T_2\left(T_1\left(\mathbb u\right)\right)$ 可以写成 $M_2M_1\mathbb u$。

注意计算顺序是从右往左,类似函数的复合。

那么我们如何找到一个矩阵 $M$,使其满足 $M\mathbb u=M_2M_1\mathbb u$ 呢?

记住,矩阵记录的是变换后的基向量。

可以先试着自己推导一下 $M$ 的表达式。

假设 $M_1=\left[\begin{matrix}a & b\\c & d\end{matrix}\right],M_2=\left[\begin{matrix}e & f\\g & h\end{matrix}\right]$,有
$$T_2\left(T_1\left(\hat i\right)\right)=T_2\left(\left[\begin{matrix}e\\g\end{matrix}\right]\right)=\left[\begin{matrix}ae+bg\\ce+dg\end{matrix}\right]\\
T_2\left(T_1\left(\hat j\right)\right)=T_2\left(\left[\begin{matrix}f\\h\end{matrix}\right]\right)=\left[\begin{matrix}af+bh\\cf+dh\end{matrix}\right]$$
显然
$$
M=\left[\begin{matrix}ae+bg & af+bh\\ce+dg & cf+dh\end{matrix}\right]
$$

我们也可以由此定义矩阵乘法。

可以试着证明一下矩阵乘法的结合律
$$\left(AB\right)C=A\left(BC\right)$$

我们可以选择对每个矩阵设出它的每个元素,然后来慢慢算。不过这样子显然很糟糕,而且对我们没有任何启发。

考虑每个矩阵都是一个变换。

提示:$\left(AB\right)C$ 是什么?$A\left(BC\right)$ 又是什么?$ABC$ 呢?真的有什么好证明的吗?

行列式

parallelepiped

首先自己想象一些线性变换。

可以发现有些把空间向外拉伸,有些向内挤压。

那么,如何测量拉伸或者挤压了多少呢?

或者说,如何计算面积的变化率呢?

我们首先考虑 $\hat i,\hat j$ 围成的小正方形。

实际上,只要知道这个小正方形的面积变化率,就能得到其它任意区域的面积变化率。

很显然对于正方形而言,这是成立的。

那么其他的图形可以用许多正方形来近似,只要用的正方形边长足够小,这个近似就能足够好。

先来看几个特殊的矩阵。

1.$\left[\begin{matrix}a & 0\\0 & d\end{matrix}\right]$

这个矩阵就是把 $\hat i,\hat j$ 缩放 $a,d$ 倍,那么显然变化率为 $ad$。

2.$\left[\begin{matrix}a & b\\0 & d\end{matrix}\right]$

与上一个类似,只是水平平移了一下,高并没有改变,所以变换率还是 $ad$。

3.$\left[\begin{matrix}a & b\\c & d\end{matrix}\right]$

这个矩阵是在上一个的基础上进行了一些竖直平移,此时又该如何计算呢?

答案是 $ad-bc$。

自己试着推一下吧。

提示:

我们称这个变化率为矩阵的行列式,用符号 $\mathrm{det}\left(M\right)$ 来表示。

然而可以发现,有的时候行列式可以是负的。

怎么会呢?

面积还能是负的?

简单来说,这和这个平面的取向有关,即有的时候 $\hat i$ 会被变换到 $\hat j$ 左边。想象一下,就像是一个平面被翻转了一样,于是这样子“背对”我们的面积就是负的;如果没有改变取向,那么这个面积还是“正对”我们的,所以就是正的。

或者也可以考虑,当 $\hat i$ 慢慢靠近 $\hat j$ 的时候,行列式在逐渐变小,直到 $\hat i,\hat j$ 重合,此时行列式为 $0$。那么继续旋转,当 $\hat i$ 旋转到 $\hat j$ 左边时,行列式自然就该是负的了。

这样子的面积叫做有向面积。

那么对于三维的情况呢?

我们再加一条基向量 $\hat k$,此时的行列式对应变换后 $\hat i,\hat j,\hat k$ 形成的平行六面体的体积。

然而它还是有可能是负的。

仔细想想,要是 $\hat k$ 被变换到了 $\hat i,\hat j$ 组成的平面以下,感觉那个六面体就像被反向了一样,于是体积就变成负的了。

具体来说,这里空间的取向改变了,所以行列式是负的。

判断空间的取向有很多方法,这里不再赘述。一般来说采用右手定则。

对没错就是头图。

如果你实在是想计算三阶矩阵的行列式,那么这里有一个公式
$$
\mathrm{det}\left(\left[\begin{matrix}a & b & c\\d & e & f\\g & h & i\end{matrix}\right]\right)=a\mathrm{det}\left(\left[\begin{matrix}e & f\\h & i\end{matrix}\right]\right)-b\mathrm{det}\left(\left[\begin{matrix}d & f\\g & i\end{matrix}\right]\right)+c\mathrm{det}\left(\left[\begin{matrix}d & e\\g & h\end{matrix}\right]\right)
$$

没有什么好说的,多找点来练习吧……

来看看行列式的一个重要公式
$$
\mathrm{det}\left(M_1M_2\right)=\mathrm{det}\left(M_1\right)\mathrm{det}\left(M_2\right)
$$

试着用一句话说明?

提示:$1\times 3\times 5$ 和 $1\times 15$ 有什么区别呢?

点积

Duality $\Leftrightarrow$ Natural-but-surprising correspondence

标准方法

对于两个维数相同的向量,它们的点积是把对应维数的坐标相乘并求和,即
$$
\left[\begin{matrix}x_1\\y_1\end{matrix}\right]\cdot\left[\begin{matrix}x_2\\y_2\end{matrix}\right]=x_1x_2+y_1y_2
$$

然后就没什么好说的了。

几何意义

假设我们现在要求 $\mathbb u\cdot \mathbb v$,那么我们把 $\mathbb u$ 投影到 $\mathbb v$ 上,$\mathbb u$ 投影的长度乘 $\mathbb v$ 的长度就是它们的点积。

当然,如果 $\mathbb u$ 投影的方向和 $\mathbb v$ 相反,点积就是负的。

那么,为什么这两种观点会有联系呢?它们到底是什么关系?

夹角

投影的方式换一种说法,就是 $\mathbb u\cdot \mathbb v=\|\mathbb u\|\|\mathbb v\|\cos \langle \mathbb u,\mathbb v \rangle$。

然后首先考虑单位向量的点积,就是一个差角。最后乘上一个长度。

其实这个方法问题很大,因为在高维空间中角度根本没有定义,倒不如说定义的方式就是向量的点积。所以这个方法有点用结果去推导条件的感觉。

线性变换

我们换一个思路。

考虑这样一种线性变换:输入一个向量,输出一个数。其实就是把空间压缩成了一条线。

为了保证线性,需要保证等距分布在一条直线上的点变换后等距分布在数轴上。

由于线性变换完全由空间的基向量决定,只是这次这些向量落在了一个数上,所以这次我们求变换对应的矩阵时,每一列就只有单独的一个数。

先考虑输入二维向量的情况,假设变换后 $\hat i,\hat j$ 变为 $a,b$,那么这个变换对应的矩阵就是 $\left[\begin{matrix}a & b\end{matrix}\right]$

那么我们来考虑一个输入的向量 $\mathbb u=\left[\begin{matrix}x\\y\end{matrix}\right]$,有
$$
T\left(\mathbb u\right)=T\left(x\hat i+y\hat j\right)=xT\left(\hat i\right)+yT\left(\hat j\right)=ax+by
$$
写成矩阵的形式的话是
$$
\left[\begin{matrix}a & b\end{matrix}\right]\left[\begin{matrix}x\\y\end{matrix}\right]=ax+by
$$

想一下,那个 $1\times 2$ 的矩阵,就像是一个水平放置的向量。如果把矩阵“立”起来求点积,发现结果完全一样。

怎么回事呢?

为了简化问题我们先选定一个单位向量 $\mathbb u$,定义变换 $T$ 为平面上向量投影到 $\mathbb u$ 所对应的数轴上的值。显然这个变换是线性的。

然后,我们需要找到这个变换的矩阵,即变换后 $\hat i,\hat j$ 的位置。

???

怎么求?

注意:我们还没有定义角度。

那怎么办……不是需要那个角的三角函数吗?

来变个戏法,我们把 $\mathbb u$ 投影到 $\hat i,\hat j$ 上。

啊,对称性。

似乎 $\hat i,\hat j$ 对应的刚好是 $u_x,u_y$,巧了。

所以 $T$ 对应的矩阵是 $\left[\begin{matrix}u_x & u_y\end{matrix}\right]$,即投影后的长度和与单位向量做点积是一样的。

那么不是单位向量呢?乘一个长度就好了。

所以说,向量的点积等于的长度乘另一个向量的长度。

叉积

The ideal is to be able to paint a landscape in which the proof is obvious.

标准定义

对于二维向量来说,叉积等于其组成的矩阵的行列式,即 $\mathbb u\times \mathbb v=\mathrm{det}\left[\begin{matrix}\mathbb u\mid \mathbb v\end{matrix}\right]$,即平行四边形的有向面积。

如果你开心的话,也可以说 $\mathbb u\times\mathbb v=\|\mathbb u\|\|\mathbb v\|\sin\left(\theta\right)$,虽然这其实是高维空间中正弦的定义方式w。

对于三维向量来说,叉积得到的是一个向量,其长度为这两个向量所构成的平行四边形的面积,方向由右手定则决定,其中 $\hat i\times\hat j=\hat k$。

对没错还是头图。

对于两个向量 $\mathbb u=\left[\begin{matrix}u_1\\u_2\\u_3\end{matrix}\right],\mathbb v=\left[\begin{matrix}v_1\\v_2\\v_3\end{matrix}\right]$
$$
\left[\begin{matrix}u_1\\u_2\\u_3\end{matrix}\right]\times\left[\begin{matrix}v_1\\v_2\\v_3\end{matrix}\right]=\left[\begin{matrix}u_2v_3-v_2u_3\\u_3v_1-v_3u_1\\u_1v_2-u_2v_1\end{matrix}\right]
$$

但是这个有一个三阶行列式代替,可以简化记忆。

矩阵第二、三列为 $\mathbb u,\mathbb v$ 的坐标,在第一列写下 $\hat i,\hat j,\hat k$,然后计算这个矩阵的行列式。
$$
\left[\begin{matrix}u_1\\u_2\\u_3\end{matrix}\right]\times\left[\begin{matrix}v_1\\v_2\\v_3\end{matrix}\right]=\mathrm{det}\left(\left[\begin{matrix}\hat i & u_1 & v_1\\\hat j & u_2 & v_2\\\hat k & u_3 & v_3\end{matrix}\right]\right)
$$

矩阵的元素是向量???

没事,我们假设它是数,然后计算,最后得到 $\hat i\left(u_2v_3-v_2u_3\right)+\hat j\left(u_3v_1-v_3u_1\right)+\hat k\left(u_1v_2-u_2v_1\right)$。这个向量就是我们要求的叉积。

蛤?

也许有人会说这只是符号上的技巧,但是真的如此吗?

我们当然可以选择通过计算来解决这些问题,但是那样耗费大量精力,并且无法给我们启发。

记住,有矩阵的地方,就有线性变换。

线性变换

希望你还记得,在点积那里,我们用一个矩阵表示多维空间到一维空间的线性变换。

设变换 $T$ 是向量与 $\mathbb u,\mathbb v$ 所构成的平行六面体的有向体积,即
$$
T\left(\left[\begin{matrix}x\\y\\z\end{matrix}\right]\right)=\mathrm{det}\left(\left[\begin{matrix}x & u_1 & v_1\\y & u_2 & v_2\\z & u_3 & v_3\end{matrix}\right]\right)
$$
显然这个变换是线性的。

现在我们需要找到 $T$ 所对应的矩阵。

注意:这个变换也可以看作是与某个向量点积

那么现在假设我们找到了这个向量(矩阵)
$$
\mathbb p=\left[\begin{matrix}p_1\\p_2\\p_3\end{matrix}\right]
$$
也就是说
$$
\left[\begin{matrix}p_1\\p_2\\p_3\end{matrix}\right]\cdot\left[\begin{matrix}x\\y\\z\end{matrix}\right]=\mathrm{det}\left(\left[\begin{matrix}x & u_1 & v_1\\y & u_2 & v_2\\z & u_3 & v_3\end{matrix}\right]\right)\\
p_1x+p_2y+p_3z=\begin{align*}x\left(u_2v_3-v_2u_3\right)&+\\y\left(u_3v_1-v_3u_1\right)&+\\z\left(u_1v_2-u_2v_1\right)&\end{align*}\\
p_1=u_2v_3-v_2u_3\\
p_2=u_3v_1-v_3u_1\\
p_3=u_1v_2-u_2v_1
$$

好像这个向量就是我们要求的叉积呀。

那么,为什么这个向量满足垂直和长度那两个条件呢?

或者说,什么样的向量满足与某个向量的点积等于这个向量与 $\mathbb u,\mathbb v$ 所构成的平行六面体的有向体积呢?

再想一下,关于点积的几何意义。

想到了吗?

我们先换一种思路,来看看平行六面体的体积是怎么求的。

我们首先要算出 $\mathbb u,\mathbb v$ 所构成的平行四边形的面积,然后再求出这个向量在垂直与平行四边形方向上的分量,即它投影到垂直方向上的长度,最后把它们乘起来。

换个方式叙述一下?

我们先求出这个向量投影到垂直方向上的长度,然后再乘平行四边形的面积。

再乘什么?

平行四边形的面积?

还是说?

这个方向上某个长度为平行四边形面积的向量的长度?

也就是说我们要找的 $\mathbb p$ 正好满足我们对叉乘的定义,所以才有这个神奇的计算方法。

数学学生的向量

Abstractness is the price of generality.

我们先对之前写的一些东西进行补充。

线性:

若一个变换 $T$ 满足一下两条性质
$$\begin{align*}T\left(\mathbb u+\mathbb v\right)&=T\left(\mathbb u\right)+T\left(\mathbb v\right)\\T\left(c\mathbb u\right)&=cT\left(\mathbb u\right)\end{align*}$$
则称 $T$ 是线性的。

行列式:

对于 $n\times n$ 的矩阵 $A=[a_{i,j}]$,其行列式定义如下:
$$\mathrm{det}\left(A\right)=\sum_{\sigma\in S_n}\left(\mathrm{sgn}\left(\sigma\right)\prod_{i=1}^{n}{a_{i,\sigma_i}}\right)$$
其中 $S_n$ 表示集合 $\{1,2,…,n\}$ 的所有排列,$\mathrm{sgn}$ 表示 $\sigma$ 的奇偶性,当 $\sigma$ 中有偶数对逆序对时 $\mathrm{sgn}\left(\sigma\right)=1$,不然等于 $-1$。

点积:

对于两个 $n$ 维向量 $\mathbb u=\left[\begin{matrix}u_1\\u_2\\\vdots\\u_n\end{matrix}\right],\mathbb v=\left[\begin{matrix}v_1\\v_2\\\vdots\\v_n\end{matrix}\right]$,它们的点积定义为
$$\mathbb u\cdot\mathbb v=\sum_{i=1}^{n}{u_iv_i}$$

当然还有一些我没有写出来的,比如特征值、逆矩阵……在此就不多说了。

然后,关于向量。

有人说,函数也是一种向量。

为什么呢?

有人还说求导是一种线性变换,甚至积分也是。

什么意思?

在这里,向量是一个抽象的东西,它不具体指代任何事物,只是作为一个工具。只要我们现在研究的东西满足一些“公理”,那么我们就可以说它是向量,然后使用向量能使用的一些数学工具。

也即是说,数学家们试着归纳总结一些具有相同特征的事物,不管是箭头也好,列表也好,然后把它们用数学语言表示出来,再在数学上进行推导计算,然后把结果用于实际。

想象一下,求导是个矩阵?多么疯狂。

然而我们只需要说明它符合一些“公理”,就可以用一些矩阵才能使用的公式定理。

是直接理解简单点呢,还是转换后再理解简单点呢?

或者我们换一个问题。

What is 3?

最后

终于写完了。

起因是小猫猫让我给她讲行列式,我就顺带着把线代一起写了。

感谢 3b1b 高超的教学技巧与深厚的数学底蕴让我得以理解很多难以描述的问题。

感谢 Yonda 的《程序员的数学 3:线性代数》,虽然我只能勉强看懂第一章。

感谢小猫猫给我写这篇博客的动机,本来一直想写的,只是没时间。【这几天啥都没干,一直熬夜才肝完了。

以及

寒假作业做不完啦!!!!!!!!!!!!!!!!!!

【逃