由于我习惯说点乘和叉乘,下面就都是说点乘和叉乘了。点乘和叉乘或许大家都会算,但是有人想过它的本质是什么吗?点乘和叉乘是一种运算,而线性代数运算的核心是加法和数乘,之前提到的矩阵乘法,它也是建立在这个基础之上的。而矩阵乘法的本质是线性变换,这个线性变换的功能是将这个向量变到以这个矩阵包含的基向量组成的空间中。那么我们是不是也可以猜测点乘和叉乘也是一种线性变换呢?答案是对的,其实点乘和叉乘是一种特殊的线性变换,有着特殊的功能。
点乘
点乘(Dot Product)我们都知道如何计算,其计算也很简单,简单来说就是投影后成绩,在坐标系中表现为对应坐标相乘再求和。但是,如何从线性代数的角度去理解它呢?
点乘的结果是一个数,可以看作是一个一维的数据,从维度的角度上看,点乘是将多维数据变换成一维数据。多维转换成一维也是一种线性变换,这种线性变换也对应着一个矩阵。我们首先考虑找到存储这个线性变换信息的矩阵。考虑二维的情况,绿线为变换后的一维空间,变换后基向量为$\vec{u}$,如下图所示。

根据几何知识,$\vec{i}$变换后,在$\vec{u}$所对应的一维空间,其长度为$\vec{u}$的横坐标,同理,$\vec{j}$变换后,其在变换后的空间中坐标为$\vec{u}$的纵坐标,则这个线性变换对应的矩阵为$\begin{bmatrix} u_x & u_y \end{bmatrix}$,这个矩阵中的元素分别为$\vec{i}$和$\vec{j}$在$\vec{u}$的投影。这个线性变换的含义就是将向量转换成其在$\vec{u}$上的投影,将其作用与任何一个向量$\begin{bmatrix} x \\ y \end{bmatrix}$得:
$$
\begin{bmatrix} u_x & u_y \end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix}=u_xx+u_yy
$$
上式表明了$\begin{bmatrix} x \\ y \end{bmatrix}$在$\vec{u}$上的投影。而当$\vec{u}$不是单位向量时,其实就相当于乘以缩放系数。而这对应着点乘的计算方法:投影*长度(也就是缩放系数)。
到这里,我们找到了点乘所对应的线性变换。点乘的本质也是一种线性变换,其功能为将一个向量转换为一个值,这个值就是投影*长度。将这个线性变换对应的矩阵与点乘的式子相比较,可以发现,点乘前面的一项就是线性变换对应的矩阵的转置。那么,我们可以不再把向量看作是一个箭头,而是一种存储着线性变换信息的东西,这个线性变换的功能是得到将多维映射到一维空间的投影。通过点乘操作可以调用它存储的这种线性变换。因此,向量并不只是一个位置信息,而且还包含着一个多维到一维的线性变换。
引用3Blue1Brown视频里的一句话:
Sometimes you realize that it's easier to understand it (a vector) not as an arrow in space, but as the physical embodiment of a linear transformation - it's as if a vector is a conceptual shorthand for a linear transformation.
叉乘
沿着点乘的思路,我们来写出叉乘(Cross Product)对应的线性变换的功能是什么,以及这个线性变换所对应的矩阵。
考虑$\vec{v}$和$\vec{w}$,我们定义一个向量p,对于一个给定的向量(x,y,z),点乘后得到:
$$
\vec{p}\cdot \begin{bmatrix} x \\ y\\ z \end{bmatrix}=Det\left(\begin{bmatrix} x&v_1&w_1 \\ y&v_2&w_2\\ z&v_3&w_3 \end{bmatrix} \right)
$$
显然这个线性变换的功能是得到将向量转换为向量与$\vec{v}$和$\vec{w}$组成的区域的体积。根据前面的知识,一个矩阵的行列式表示基向量组成区域的体积(变换前为我们常说的坐标系,基向量组成的体积为1)。
$$
V=Det(M)=\vec{p}\cdot \begin{bmatrix} x \\ y\\ z \end{bmatrix}
$$
而根据几何知识,体积=底面积 * 高
底面积是$\vec{v}$和$\vec{w}$组成的区域的面积,接下来我们来看高。
高是很容易得到的,高其实就是投影,因此,利用前面点乘的知识,通过将$\begin{bmatrix} x \\ y\\ z \end{bmatrix}$与垂直于$\vec{v}$和$\vec{w}$的单位向量$\vec{u}$进行点乘,就可以得到高.
因此,我们得到这个等式:
$$
底面积*\vec{u}\cdot\begin{bmatrix} x \\ y\\ z \end{bmatrix}=\vec{p}\cdot \begin{bmatrix} x \\ y\\ z \end{bmatrix}
$$
显然,
$$
底面积*\vec{u}=\vec{p}
$$
我们可以发现,$\vec{p}$包含了两个信息,一是值为底面积,即$\vec{v}$和$\vec{w}$组成的区域的面积,而是方向为单位向量$\vec{u}$,垂直于$\vec{v}$和$\vec{w}$组成的区域。而这正好是$\vec{v}\times \vec{w}$。
因此,我们可以得到结论,叉乘后的结果是一个向量,这个向量蕴含着线性变换的信息。这和点乘是不同的,点乘的过程已经经历了一次线性变换,而叉乘的过程是得到一个存储着线性变换信息的向量。通过点乘作用于其他向量$\vec{m}$,这个向量存储的线性变换的信息得到释放,然后就可以得到$\vec{m}$与$\vec{v}$和$\vec{w}$组成的区域的体积。
总结
关于点乘和叉乘,我们不必从运算的角度去看待它,可以从线性变换的角度去看待它,以及知道它们的功能。它们的存在并不是为了增加一种运算,而是为了解决实际的问题。投影和体积都是数学中常常需要考虑的量,为此,就有了点乘和叉乘的诞生。
闲言碎语
写这篇文章的时候,改了很多次,直到现在也不是我满意的一个版本。在这里面很多描述我都感觉是有点不准确的,但是却想不到更为准确的描述。对于一些地方,感觉自己像是说了,又像是没说。看到这里的朋友,如果明白我所说的意思,那最好,如果没懂,可以先略过,这个并不是线性代数核心的部分。如果我有了更深入的理解,会来更新的。也欢迎各位朋友在讨论区里交流。