我以费曼的视角和你聊这套东西——基于公开的著作和讲义推断,不是要替谁代言。目标是让你读完,能用自己的话把几何代数讲给一个没学过的人听。讲不出来,就是还没真懂。
先说一个让我别扭了很多年的事。
学向量的时候,老师给你两个乘法。一个叫点积,$a \cdot b$,乘出来是个数——告诉你两个向量有多"同向"。另一个叫叉积,$a \times b$,乘出来是个新向量——告诉你两个向量撑开的平面是哪个,顺带给了个面积。
两个乘法。各管一摊。一个出标量,一个出向量。我那时候就纳闷:为什么是两个?两个向量相乘,难道不该有一个统一的乘法吗?凭什么要拆成两半,一半管度量、一半管方向?
这问题问出去,多半被敷衍过去。"就是这样定义的,好用。"——好用是好用,可它不美。两套乘法之间没有代数上的亲缘,点积满足交换律,叉积反对称,它们凑不到一个结合的代数里。你没法写 $(ab)c = a(bc)$,因为 $ab$ 这个东西压根没有定义。
其实,早在十九世纪,就有人被这事折磨过。1843 年,Hamilton 在都柏林的桥上刻下四元数 $i^2 = j^2 = k^2 = ijk = -1$,他想要的正是一个"统一的向量乘法"。1844 年,Grassmann 提出外代数,用楔积 $a \wedge b$ 编码面积和体积。两条线,一个管旋转,一个管子空间,互不搭理。
1878 年,一个叫 William Clifford 的英国人,三十三岁就早逝的数学家,把这两条线缝在了一起。他定义了一个新的乘法——后来叫几何积(geometric product)——把 Hamilton 的四元数和 Grassmann 的外积装进了同一个代数。Clifford 自己更愿意叫它"geometric algebra"。
然后呢?然后这套东西就被埋了七十年。
因为 Gibbs 和 Heaviside 从四元数里"砍"出了一套更轻便的向量分析——点积、叉积、$\nabla$ 算子——1901 年写进教科书,工程师学得快,物理够用。Clifford 代数太抽象,门槛高,就被晾在一边。直到 1960 年代,David Hestenes 在 Caltech 重新捡起它,主张这套东西该成为物理和几何的统一语言。
这套东西到底要干什么?说穿了就一句话:
这一章我不堆定义。我只给你一个预告:在二维平面上,两个向量相乘,会乘出一个让你意外的东西——一个"数"加上一个"面积"。而那个面积元素,平方竟然是 $-1$。是不是有点眼熟?
往下走。先从最简单的地方下水。
拿一张纸,画两个互相垂直的单位向量,叫 $e_1$、$e_2$。这就是二维欧氏平面。
现在我要大胆地定义一个"乘法",把两个向量直接乘起来。规则很简单,就两条:
第二条是关键。它把"乘法"和"度量"绑死了——向量自乘,得到的是一个标量,是长度平方。这跟数不一样:$3^2 = 9$,但向量 $a$ 的平方是 $\|a\|^2$,可能是个正数(欧氏空间),也可能不是(后面讲时空会见到负的)。
好,拿这两条规则去算几个东西。
第一,$e_1$ 自己乘自己:
单位向量自乘,得 $1$。同理 $e_2^2 = 1$。这没什么意外。
第二,$e_1$ 乘 $e_2$。它们正交,所以 $e_1 \cdot e_2 = 0$。但乘出来的东西不可能是零——零意味着"没乘出什么",可这两个向量明明撑开了一个平面啊。那 $e_1 e_2$ 到底是什么?
它是一个新的对象。不是标量,也不是我们熟悉的向量。它代表"$e_1$ 和 $e_2$ 撑开的那个有向平面"。给它起个名字,叫双向量(bivector),记作 $e_1 e_2$,或者 $e_{12}$。
双向量是什么样子?想象一个有方向的面积片。它有大小(面积多少)、有方向(哪个平面)、有定向(顺时针还是逆时针)。但它没有"法向量"——它就是平面本身,不是垂直于平面的那根轴。这一点很重要,后面会反复用到。
现在,做一件刺激的事。把 $e_1 e_2$ 再乘一次自己:
用结合律,先算 $e_2 e_1$。注意 $e_2 e_1$ 和 $e_1 e_2$ 什么关系?用分配律展开 $(e_1 + e_2)^2$ 试试:
而 $(e_1+e_2)^2$ 按规则二应该等于 $\|e_1+e_2\|^2 = 1+1 = 2$。两相比较,得出:
正交向量的几何积反对称。换顺序,差个负号。这跟叉积像,但又不完全一样——叉乘出向量,这里乘出的是双向量。
回到 $(e_1 e_2)^2$。把中间的 $e_2 e_1$ 换成 $-e_1 e_2$:
停一下。
$(e_1 e_2)^2 = -1$。
一个东西,平方等于负一。这不就是虚数单位 $i$ 干的事吗?
这不是巧合,也不是牵强附会。它是一个扎扎实实的代数事实:复数 $\mathbb{C}$,和二维几何代数里"标量 + 双向量"那个子集,是同构的。复数乘法,就是几何积在那个子集上的特例。第九章我会把这件事彻底讲透,现在你只要记住这个画面:虚数不是天上掉下来的,它是平面的影子。
再算一个。$(e_1 + e_2) e_1$:
这里我顺手把 $e_1 e_2$ 记作 $I$(二维的单位伪标量)。结果是一个"$1$"加上一个"$-I$"——一个标量加一个双向量。这就是几何积的常态:它不保持纯度。两个向量乘出来,一般既带度量(标量部分),又带方向(双向量部分),两者并排躺在一个"混合体"里。
这个"混合体",就是下一章要拆开看的东西。
上一章那个混合体 $1 - I$,看着怪。一个数加一个面积,像把苹果和橘子放一个篮子。其实别慌——它跟复数 $a + bi$ 是一回事:实部加虚部,不是"融合成一个数",是"在一个更大的代数里并排保留"。
现在我把这个混合体正式拆开。对任意两个向量 $a, b$,几何积可以写成:
右边的两项,一个是你认识的,一个可能新。
就是熟悉的点积。对称:$a \cdot b = b \cdot a$。结果是标量。告诉你两个向量有多"平行"——具体说,是 $|a||b|\cos\theta$。平行时最大,正交时为零。
用 grade 的话说:两个向量(grade 1)做内积,结果降到了 grade 0(标量)。内积降维,携带度量。
这是 Grassmann 的楔积。反对称:$a \wedge b = -b \wedge a$。结果是双向量(grade 2),代表两个向量撑开的有向面积。平行时为零(共线撑不出面积),正交时最大。
用 grade 的话说:两个向量(grade 1)做外积,结果升到了 grade 2(双向量)。外积升维,携带方向。
中间情形——既不平行也不正交——既出标量又出双向量,这正是几何积的一般长相。
大部分教材是这样教的:先有点积、叉积,然后把它们拼成几何积。逻辑上没错,可概念上把车放到了马前面。
Clifford 的本意是反过来的:几何积才是原始运算,内积和外积是从它身上切下来的两片。
怎么切?用 grade 投影。记 $\langle M \rangle_k$ 为取 $M$ 的 grade-$k$ 部分,那么:
几何积把"度量"和"方向"压进同一个乘法;内积是它的标量切片,外积是它的双向量切片。这就像一束白光穿过棱镜——白光是原始的,七色是分解出来的。先有几何积,再谈内积外积。
就凭三条:
一个乘法,既含度量又含方向,还结合还自洽。这就够开一整门代数了。下面看看它能装下多少东西。
到目前为止,我们见过的对象有三种:标量(grade 0)、向量(grade 1)、双向量(grade 2)。这条线还能往上走。
取 $k$ 个线性无关的向量 $a_1, a_2, \ldots, a_k$,做外积:
这叫一个 k-blade(k 叶)。它的几何意义是这 $k$ 个向量撑开的有向 k 维体积。
| grade | 对象 | 几何意义 | 例子 |
|---|---|---|---|
| 0 | 标量 scalar | 数值 / 权重 | $3$, $-1.5$ |
| 1 | 向量 vector | 有向线段 | $e_1$, $a$ |
| 2 | 双向量 bivector | 有向面积片 | $e_1 e_2$, $a \wedge b$ |
| 3 | 三向量 trivector | 有向体积块 | $e_1 e_2 e_3$ |
| ⋯ | ⋯ | ⋯ | ⋯ |
| $n$ | 伪标量 pseudoscalar | 全空间有向体积 | $I = e_1 e_2 \cdots e_n$ |
这张表是 GA 的脊梁骨,往后所有东西都挂在 grade 这条线上:内积降 grade,外积升 grade,对偶翻 grade。盯住 grade,就不会乱。
有个细节得说清楚。"blade"是能写成"几个向量外积"的那种 k-向量,也就是可分解的。一般的 k-向量(叫 k-vector)是若干 blade 的线性组合,不一定能分解成单个 blade。
二维里所有双向量都是 blade(都是 $e_{12}$ 的倍数)。三维里双向量也都是 blade。但到了四维以上,会出现"不可分解"的 k-向量——它们是几个 blade 叠加,却无法合并成一个。入门阶段不用纠结这个,知道有这回事就行。
$n$ 维空间里,最高 grade 的 blade 叫伪标量,记 $I = e_1 e_2 \cdots e_n$。"伪"字是说它定向反转时变号,跟真标量不一样。
$I$ 平方是多少?跟维数和度规有关。欧氏二维,$I^2 = -1$(第二章算过)。欧氏三维,$I^2 = e_1 e_2 e_3 e_1 e_2 e_3$,反推一下得 $-1$。欧氏四维,$I^2 = +1$。一般地,欧氏 $n$ 维里 $I^2 = (-1)^{n(n-1)/2}$。
别去死记这个公式。记住两件事就够:一,$I$ 代表"整个空间的定向";二,$I^2 = \pm 1$,具体符号算一次记一次。$I$ 在后面讲对偶时会反复出场,它是把"向量"和"轴"互相转换的钥匙。
第二章末尾那个 $1 - I$,是"标量加双向量"的混合。这种混合不是病,是常态。因为几何积不保持 grade——两个向量乘出来既有 grade 0 又有 grade 2,三个向量乘出来可能更杂。要是只允许"纯 grade"的对象存在,几何积就不封闭,代数就散架了。
所以要允许混合。把所有 grade 的 blade 线性叠加起来,就得到多重向量(multivector):
$\langle M \rangle_k$ 是取 $M$ 的 grade-$k$ 部分,叫 grade 投影算子。一个多重向量就像一个"抽屉柜",每个抽屉装一个 grade 的东西,互不干扰,但又同属一个柜子。
"标量加双向量"听着别扭,那我换个说法你就熟了:复数 $a + bi$ 不就是"实部加虚部"吗?实部是标量,虚部是带个 $i$ 的东西。在二维 GA 里,$i$ 就是 $e_1 e_2$ 这个双向量。所以 $a + b\,e_1 e_2$ 和 $a + bi$ 是一回事——一个抽屉装实数,一个抽屉装"平面方向元素"。
加在一起,不是"融合成一个数",是"在一个更大的代数里并排保留"。这跟复数完全一样。NASA 的教学材料里有个很好的类比:复数的实部虚部相加不意味着"捏成一个数",而是"在 $\mathbb{C}$ 这个代数里共存"。多重向量就是这个想法的推广——只不过抽屉从两个变成 $n+1$ 个。
既然多重向量是混合体,我经常需要"只取标量部分"或"只取向量部分"。这就是 $\langle \cdot \rangle_k$ 的用处:
前面说过,内积外积就是几何积的 grade 切片:
更一般地,两个 blade 相乘,结果会跨好几个 grade。一个 $r$-blade 和一个 $s$-blade 做几何积,结果 span 从 $|r-s|$ 到 $r+s$(步长 2)的所有 grade。比如两个双向量(grade 2)相乘,结果是 grade 0 + grade 2 + grade 4。这是几何积"溢出 grade"的本性,不是 bug。
在三维欧氏空间,最一般的多重向量长这样:
四样东西并排:一个数、一个向量、一个双向量、一个伪标量。$1 + 1 + 3 + 3 + 1 = 8$ 个实数分量——这就是为什么三维 GA 是 $2^3 = 8$ 维的。一般 $n$ 维 GA 是 $2^n$ 维,维度增长很快,这也是它在大规模数值计算上不占便宜的原因之一。
这一章是 GA 的重头戏。rotor——旋转子——是 GA 最优雅、最有说服力的应用。但我不打算直接抛公式。我要从一个你能亲手比划的东西讲起:反射。
拿一面镜子,法向量是 $\mathbf{n}$(单位向量)。向量 $\mathbf{v}$ 照镜子,镜像是 $\mathbf{v}'$。这个操作怎么写?
把 $\mathbf{v}$ 拆成"沿法向"和"切向"两部分:$\mathbf{v} = \mathbf{v}_\perp + \mathbf{v}_\parallel$,其中 $\mathbf{v}_\perp = (\mathbf{v}\cdot\mathbf{n})\mathbf{n}$ 垂直于镜面,$\mathbf{v}_\parallel$ 平行于镜面。反射把垂直部分取反,切向不变:$\mathbf{v}' = -\mathbf{v}_\perp + \mathbf{v}_\parallel$。
用几何积,这个操作有一个惊人简洁的写法:
两边夹,中间取反。这就是"三明治积"的雏形。你可以自己验证一下:$\mathbf{n}\mathbf{v}\mathbf{n}^{-1} = \mathbf{n}(\mathbf{v}_\perp + \mathbf{v}_\parallel)\mathbf{n}^{-1}$,利用 $\mathbf{n}$ 和 $\mathbf{v}_\perp$ 平行(几何积出标量、可交换)、和 $\mathbf{v}_\parallel$ 正交(几何积出双向量、反对称),就能化出 $-\mathbf{v}_\perp + \mathbf{v}_\parallel$。过程不复杂,自己算一遍很有收获。
现在做一件妙事。再拿第二面镜子,法向量 $\mathbf{m}$,跟第一面夹角 $\theta/2$。把 $\mathbf{v}$ 先照第一面,再照第二面:
两个负号抵消,两个三明治积合成一个。中间那个 $\mathbf{m}\mathbf{n}$ 是两个向量的几何积——一个标量加一个双向量。给它起个名字:
$R$ 就是 rotor(旋转子)。两次反射的复合,是一次旋转。旋转的角度是两面镜子夹角的两倍,也就是 $\theta$。旋转所在的平面,就是 $\mathbf{m}$ 和 $\mathbf{n}$ 撑开的平面。
把 $R = \mathbf{m}\mathbf{n}$ 展开。设 $\mathbf{m}, \mathbf{n}$ 都是单位向量,夹角 $\theta/2$,那么:
其中 $\mathbf{B}$ 是旋转平面的单位双向量。习惯上写成:
(差个符号约定,看 $\mathbf{B}$ 定向怎么取。)旋转公式:
这里 $\tilde{R}$ 是 $R$ 的反演(reverse,下一章详讲),就是把 $R$ 里向量的乘法顺序倒过来。对 rotor,$\tilde{R} = R^{-1}$,所以 $\tilde{R}$ 就是逆。
把 $\mathbf{e}_1$ 绕 $z$ 轴转 $90°$。旋转平面是 $xy$ 平面,所以 $\mathbf{B} = \mathbf{e}_{12} = \mathbf{e}_1\mathbf{e}_2$,$\theta = \pi/2$。
套三明治积 $\mathbf{v}' = R\mathbf{e}_1\tilde{R}$。展开算(耐心点,用 $\mathbf{e}_{12}\mathbf{e}_1 = \mathbf{e}_2$、$\mathbf{e}_1\mathbf{e}_{12} = -\mathbf{e}_2$ 这些),最后得到:
$(1,0,0)$ 转成了 $(0,1,0)$。对了。$90°$ 把 $x$ 轴转到了 $y$ 轴,没毛病。
注意一个细节:$\mathbf{B}$ 直接就是平面 $\mathbf{e}_{12}$,方向由下标顺序自然给出,不需要右手法则。这是 rotor 相对四元数最直观的胜利——旋转本来就是平面里的操作,硬要找个"垂直轴"是历史包袱。三维里你习惯用"轴"想旋转,是因为三维的平面恰好跟一根轴对偶(第七章讲对偶时会揭开这层)。但旋转的本质是"在某个平面里转",不是"绕某根轴转"。
| 表示 | 奇点 | 插值 | 维度推广 | 存储 |
|---|---|---|---|---|
| 欧拉角 | 有(万向锁) | 差 | 不可推广 | 3 |
| 旋转矩阵 | 无 | 差(正交化贵) | 任意但臃肿 | 9 |
| 四元数 | 无 | Slerp 好 | 仅 3D | 4 |
| rotor | 无 | Slerp 好 | 任意维度 | 4(3D 中) |
这一章讲几个"附属运算"。它们不复杂,但符号容易把人绕晕——不同教材的记号不统一,是 GA 入门最大的坑之一。我先把约定钉死,再讲含义。
反演(reversion)就是把 blade 里向量的乘法顺序倒过来:
对一个 grade-$r$ 的 blade,每换一对向量出一个负号,所以:
标量和向量不变($r=0,1$),双向量变号($r=2$),三向量不变($r=3$)……反演的关键性质是反序:$\widetilde{AB} = \tilde{B}\tilde{A}$。它的主要用途有两个:构造模方 $A\tilde{A}$,和求逆 $A^{-1} = \tilde{A}/(A\tilde{A})$。rotor 的"共轭"$\tilde{R}$ 就是反演,对 rotor 而言 $\tilde{R} = R^{-1}$。
对 grade-$r$ blade:$\hat{A_r} = (-1)^r A_r$。就是"奇数 grade 取负,偶数 grade 不变"。它对应"空间反演"($\mathbf{a} \mapsto -\mathbf{a}$)在代数上的延拓。性质:$\widehat{AB} = \hat{A}\hat{B}$,保持乘法。
反转所有方向。是构造"广义共轭"求逆的工具。入门阶段用得不多,知道有这回事即可。
对偶(dual)通过乘伪标量的逆实现:
(有的教材用 $IM$,约定不同,差个符号。本教程用 $MI^{-1}$。)
几何意义:对偶把 grade-$r$ 的对象变成 grade-$(n-r)$ 的对象。$n$ 是空间维数。在三维里,向量(grade 1)的对偶是双向量(grade 2)——这就是"向量"和"轴-角面积"互为对偶的代数根源。
现在可以揭开叉乘的底了。三维里:
叉乘的本质,是双向量取对偶。两个向量撑开一个有向面积(双向量 $\mathbf{a}\wedge\mathbf{b}$),在三维里这个面积恰好能对偶成一根向量——就是你熟悉的"叉乘结果"。那根"垂直于平面的轴",是三维特有的对偶产物,不是叉乘的本来面目。
这揭示叉乘两个隐藏的局限:
这一章短,但能让你尝到 GA "统一性"的甜头。
老问题:向量 $\mathbf{v}$ 在向量 $\mathbf{a}$ 上分解。传统做法,投影是 $\mathbf{v}_\parallel = \frac{\mathbf{v}\cdot\mathbf{a}}{|\mathbf{a}|^2}\mathbf{a}$,垂直分量得靠 $\mathbf{v}_\perp = \mathbf{v} - \mathbf{v}_\parallel$ 间接凑出来。一个用点积,一个用减法,不对称。
GA 给你一对称的写法:
点积给平行分量,楔积给垂直分量。结构完全对称。$\mathbf{a}^{-1} = \mathbf{a}/\mathbf{a}^2$ 是 $\mathbf{a}$ 的逆——还记得吗,几何积可逆,向量终于能做"除法"了,这里就用上了。
阳光斜照一根斜杆。杆在地面投下影子,那是 $\mathbf{v}_\parallel$(沿地面方向)。杆和影子之间那段"竖起来的部分",是 $\mathbf{v}_\perp$(垂直地面方向)。
传统法:先算影子(点积),再用杆减影子得到竖段。两步,两种运算。GA:影子用点积直接拿,竖段用楔积直接拿。一步到位,对称得像镜像。
不只是好看。它自然推广到子空间投影。把 $\mathbf{a}$ 换成一个双向量 $\mathbf{B}$(代表一个平面),公式形式不变:
投影到平面、投影到直线、投影到任意子空间,同一个公式。传统向量分析里,投影到平面要另写一套(用叉乘凑),投影到三维子空间又要换写法。GA 这边一个公式通吃。
这一章是 GA "统一性"主张的核心考场。我要把"复数和四元数被 GA 吃掉了"这件事讲透——讲清楚哪些是扎扎实实的代数同构,哪些是 Hestenes 学派的修辞夸大。费曼说过,第一条原则是别骗自己。这里尤其要睁大眼。
二维欧氏 GA,记 $\mathrm{Cl}(2,0)$。取正交基 $\mathbf{e}_1, \mathbf{e}_2$,伪标量 $I = \mathbf{e}_1\mathbf{e}_2$,满足 $I^2 = -1$(第二章算过)。
现在看"标量 + 双向量"这个子集:$\{a + bI \mid a, b \in \mathbb{R}\}$。它对几何积封闭(两个这种东西相乘还是这种东西),是一个子代数,叫偶子代数。
把 $I$ 换名成 $i$,它就是复数 $\mathbb{C}$:
正是复数乘法。所以 $\mathrm{Cl}(2,0)$ 的偶子代数与 $\mathbb{C}$ 作为 $\mathbb{R}$-代数同构。这是定理,不是修辞。
三维欧氏 GA,$\mathrm{Cl}(3,0)$。正交基 $\mathbf{e}_1, \mathbf{e}_2, \mathbf{e}_3$,有三个单位双向量:$\mathbf{e}_{23}, \mathbf{e}_{31}, \mathbf{e}_{12}$。
验证一下它们的乘法表(用 $\mathbf{e}_{ij}\mathbf{e}_{jk} = \mathbf{e}_{ik}$、$\mathbf{e}_{ij} = -\mathbf{e}_{ji}$ 这些规则):
跟 Hamilton 的 $i^2 = j^2 = k^2 = ijk = -1$ 一模一样。对应关系:
所以 $\mathrm{Cl}(3,0)$ 的偶子代数(标量 + 三个双向量)与四元数 $\mathbb{H}$ 同构。单位四元数就是 3D 的 rotor。Hamilton 当年发明的"versor",正是 Clifford 后来所称的 rotor——同一件事,两个名字,隔了一百年。
Grassmann 的外积直接嵌入几何积的反对称部分。$\bigwedge V$ 作为子结构整体进入 Clifford 代数;当度规退化为零(所有向量自乘为零),Clifford 代数就还原为外代数。这是数学上无可争议的包含关系。
物理里那三个 Pauli 矩阵 $\sigma_1, \sigma_2, \sigma_3$,满足 $\sigma_i\sigma_j = \delta_{ij} + i\epsilon_{ijk}\sigma_k$。这正是 $\mathrm{Cl}(3,0)$ 基向量的乘法表——内积部分 $\delta_{ij}$ 加双向量部分 $i\epsilon_{ijk}\sigma_k$。所以 Pauli 矩阵是 $\mathrm{Cl}(3,0)$ 的一个矩阵表示。同理 Dirac 矩阵是 $\mathrm{Cl}(1,3)$ 的表示。
Hestenes 的主张"矩阵只是表示,几何才是本体"在代数层面成立——表示论确实告诉我们这些矩阵只是 Clifford 代数的不可约表示。
| 关系 | 数学性质 | 评价 |
|---|---|---|
| 复数 ↔ $\mathrm{Cl}(2,0)$ 偶子代数 | 严格 $\mathbb{R}$-代数同构 | 真统一 |
| 四元数 ↔ $\mathrm{Cl}(3,0)$ 偶子代数 | 严格同构,单位四元数=rotor | 真统一 |
| 外代数 ⊂ Clifford 代数 | 子代数嵌入 | 真统一 |
| 叉乘 $= -I(\mathbf{a}\wedge\mathbf{b})$ | 3D 中的恒等式 | 真统一,但"叉乘该废弃"是修辞 |
| 微分形式 ↔ GA | 平直情形等价,弯曲流形需扩展 | 部分统一 |
| Pauli/Dirac 矩阵 ↔ Clifford 代数 | 矩阵表示 | 真统一(本体-表示区分) |
| "GA 统一一切数学" | 无严格陈述 | 货物崇拜 |
GA 的统一性,在复数、四元数、外代数、Pauli/Dirac 矩阵这几条线上是扎实的代数同构,这是它最值得讲的部分。但在"统一一切数学""取代旧工具"的宏大叙事上,要守住诚实的底线——讲清力量,也讲清代价与修辞。
前面都在欧氏空间里玩。这一章升一格,进时空——相对论的地盘。看 GA 怎么把麦克斯韦那四句话压成一句。
把 GA 搬到四维时空,度规变成 $(-,+,+,+)$ 或 $(+,-,-,-)$(看你用哪种约定)。这个 Clifford 代数记 $\mathrm{Cl}(1,3)$,Hestenes 给它起了个名叫 Spacetime Algebra(STA)。
基向量 $\mathbf{e}_0$(时间方向)自乘为 $+1$(或 $-1$),$\mathbf{e}_1, \mathbf{e}_2, \mathbf{e}_3$(空间方向)自乘为 $-1$(或 $+1$)。这种"负平方"是新的——欧氏空间里向量自乘都是正的,时空里时间方向平方为负,这正是相对论"时空距离"的代数根源。
在 STA 里,电场 $\mathbf{E}$ 和磁场 $\mathbf{B}$ 不再是两个分开的向量。它们合成一个双向量:
$I = \mathbf{e}_0\mathbf{e}_1\mathbf{e}_2\mathbf{e}_3$ 是时空伪标量。$\mathbf{E}$ 是含时间分量的双向量,$I\mathbf{B}$ 是纯空间双向量。两者相加,还是双向量。电磁场本来就是一个几何对象,只是在三维视角里被拆成了"电"和"磁"两半——就像一个三维向量在不同投影下看起来不同,电磁场在不同参考系下电场磁场会混,但 $F$ 本身不变。
传统的麦克斯韦方程组,四个方程(两个散度、两个旋度):
在 STA 里,塌缩成一个方程:
$\nabla$ 是时空导数($\partial_0 + \partial_1\mathbf{e}_1 + \partial_2\mathbf{e}_2 + \partial_3\mathbf{e}_3$),$J$ 是时空电流密度($\rho + \mathbf{J}$)。左边是场对时空的导数,右边是源。一个方程,把四个全包了。
更妙的是:在 STA 里,洛伦兹变换(boost)就是一个时空 rotor:
跟空间旋转 $R = \exp(-\frac{\theta}{2}\mathbf{e}_i\mathbf{e}_j)$ 同一个公式。这就是相对论"旋转即 boost"的几何真相——洛伦兹变换不是别的,就是时空里的旋转,只不过旋转平面含一个时间方向罢了。空间旋转和参考系变换,在 GA 里是同一类操作。
最后一章进阶。看 GA 怎么把"平移 + 旋转"这两件本来要凑 4×4 矩阵的事,统一成一个对象。
计算机图形学和机器人学里,刚体运动(旋转 + 平移)传统上用 4×4 齐次变换矩阵表示:
$R$ 是 3×3 旋转矩阵,$\mathbf{t}$ 是平移向量。这能用,但有股拼凑味——旋转和平移是两种本质不同的操作,硬塞进一个矩阵,靠齐次坐标那一行"1"来弥合。组合两个刚体运动要矩阵相乘,求逆要分块求逆,符号上不优雅。
GA 给另一个方案,叫 Projective Geometric Algebra(PGA)。在三维 PGA 里,加一个"零平方"的基向量 $\mathbf{e}_0$($\mathbf{e}_0^2 = 0$),把三维空间升到四维表示。这个 $\mathbf{e}_0$ 编码"无穷远",使得平移也能用"三明治积"形式表达——跟旋转同构。
在 PGA 里,平移、旋转、缩放都是 versor——同一个形式 $\mathbf{v}' = M\mathbf{v}M^{-1}$。刚体运动的 versor 叫 motor:
它把旋转($\mathbf{B}$ 部分)和平移($\mathbf{t}\wedge\mathbf{B}$ 部分)统一在一个对象里。组合两个刚体运动,就是两个 motor 相乘——还是 motor。求逆,就是取反演。整个刚体运动群 SE(3),在 PGA 里变成了一个干净的 versor 群。
bivector.net 社区列出的 GA 库不少:ganja.js(教育可视化)、clifford(Python 研究)、kingdon(Python,支持 PyTorch)、Versor、Garamon(C++ 模板)。但绝大多数定位是教育、可视化、原型。
唯一明确自称"production ready"的是 Klein——C++ 写的三维 PGA 库,手写 SSE 优化,号称可替代 GLM/RTM。即便如此,Klein 仍是小众库,三大引擎没采纳。
走到这,该收个尾了。我不打算给你一个"GA 伟大光明正确"的总结——那不诚实。我给你一个费曼式的、好坏都讲的交代。
GA 真正的魅力,不是"取代现有工具",是"让几何关系变得透明"。几件事它确实干得漂亮:
这些不是吹的,是扎扎实实的代数事实。它们让"为什么这样"变得可以回答,而不是"就是这样记住就行"。
但 GA 不是免费午餐。它的代价得说清:
数学史反复证明一件事:统一不等于取代。张量语言统一了向量、矩阵、多重线性映射,工程师照样用矩阵;范畴论统一了大量代数结构,本科生仍先学群环域。同理,GA 提供了一个自洽的统一视角,适合做几何与物理的元层次思考,但在具体计算和教学中,传统工具的"局部最优"往往更顺手。
三大游戏引擎没用 rotor,主流电磁学教材没用 $\nabla F = J$,航天姿态控制还在用四元数。这不是它们落后,是务实选择。Hestenes "取代向量分析教学"的主张推行半个世纪未果,本身就说明强行取代不是好策略。
费曼说,如果你不能把一个东西解释给大一新生听,说明你自己没真正理解。
GA 这套东西,我试着用费曼的方式讲给你了:从两个向量相乘的意外开始,到 rotor 从两次反射里长出来,到复数原来是平面的影子,到电磁场塌缩成一式。如果哪一段你还是只能背公式却讲不出"为什么",那就是我——或者这套记号——还没把它讲透。
别停在名字上。"双向量""rotor""grade"这些词本身不重要。重要的是:你能不能闭上眼,看见两个向量撑开一个有方向的平面,看见那个平面平方为负一,看见两面镜子夹出一个旋转。能看见,就懂了。看不见,就回去重算一遍 $(e_1 e_2)^2$。
事情就是这样。That's all there is to it.