引言
几何代数(Geometric Algebra,GA)是一种统一的数学语言,能够优雅地处理向量、旋转、投影等几何对象。它由 William Clifford 在 19 世纪提出,结合了格拉斯曼的外代数和哈密顿的四元数思想。
1. 从向量到几何代数
1.1 传统向量代数的局限
传统向量代数有两种乘法:
- 点积:a⋅b=∣a∣∣b∣cosθ(标量)
- 叉积:a×b(仅在 3D 有定义,是伪向量)
问题:
- 叉积不能推广到任意维度
- 无法统一处理不同类型的几何对象
- 旋转表示不够自然
1.2 几何积的引入
几何积(Geometric Product)定义为:
ab=a⋅b+a∧b
其中:
- a⋅b:内积(对称)
- a∧b:外积(反对称)
几何积的关键性质:
ab+ba=2(a⋅b)
ab−ba=2(a∧b)
2. Clifford 代数的构造
2.1 定义
给定向量空间 V 和二次型 Q,Clifford 代数 Cl(V,Q) 是满足以下条件的结合代数:
v2=Q(v)⋅1
对于正定内积空间,ei2=1(单位向量的平方为 1)。
2.2 基本示例
Cl(R2) 的基:{1,e1,e2,e1e2}
其中 e1e2 是双向量(bivector),代表平面的有向面积。
Cl(R3) 的基:
{1,e1,e2,e3,e1e2,e2e3,e3e1,e1e2e3}
共 23=8 个基元素。
2.3 多重向量
多重向量(Multivector)是几何代数中的一般元素:
M=⟨M⟩0+⟨M⟩1+⟨M⟩2+⋯
其中 ⟨M⟩k 是 k-向量分量(k-vector):
- 0-向量:标量
- 1-向量:向量
- 2-向量:双向量(有向面积)
- 3-向量:三向量(有向体积)
3. 基本运算
3.1 外积
外积产生更高阶的多重向量:
a∧b=ab−a⋅b
性质:
- 反交换:a∧b=−b∧a
- a∧a=0
- 结合律:(a∧b)∧c=a∧(b∧c)
3.2 内积
内积降低阶数:
对于向量 a 和双向量 B:
a⋅B=21(aB−Ba)
结果是一个向量。
3.3 对偶
在 n 维空间中,伪标量 I=e1e2⋯en。
对偶:A∗=AI−1
在 3D 中,向量的对偶是双向量,反之亦然。这解释了为什么叉积"看起来像"向量。
4. 反射与旋转
4.1 反射
向量 v 关于单位向量 n 的反射:
v′=−nvn
这个公式直接利用了几何积!
推导:
−nvn=−n(v∥+v⊥)n=v⊥−v∥
4.2 旋转
两次反射等于一次旋转。设 m,n 是两个单位向量,夹角为 θ/2:
v′=mnvnm=RvR~
其中 R=mn 是旋转子(rotor),R~=nm 是其逆。
4.3 旋转子
2D 旋转子:
R=cos2θ+e1e2sin2θ
3D 绕轴 u(单位向量)旋转角度 θ:
R=cos2θ+Iusin2θ
其中 Iu=uI 是旋转平面的双向量。
优点:
- 避免了万向锁(gimbal lock)
- 计算效率高
- 自然推广到任意维度
5. 与其他代数的关系
5.1 复数
Cl(R2) 的偶子代数(even subalgebra)同构于复数:
z=a+be1e2↔a+bi
其中 (e1e2)2=−1。
5.2 四元数
Cl(R3) 的偶子代数同构于四元数:
i=e2e3,j=e3e1,k=e1e2
满足 i2=j2=k2=ijk=−1。
5.3 泡利矩阵
Cl(R3) 与泡利矩阵构成的代数同构:
e1↔σ1,e2↔σ2,e3↔σ3
6. 物理应用
6.1 电磁场
Maxwell 方程可以用几何代数简洁表示。定义电磁场二形式:
F=E+IcB
Maxwell 方程变为:
∇F=ϵ0ρ−μ0J
仅需一个方程!
6.2 狭义相对论
时空代数 Cl(1,3) 自然包含 Lorentz 变换。
度规:γ02=1,γi2=−1(i=1,2,3)
时空间隔:s2=(ct)2−x2−y2−z2
Lorentz boost:x′=RxR†
6.3 量子力学
Dirac 方程可以用时空代数写成:
∇ψIσ3−eAψ=mψγ0
旋量 ψ 是时空代数中的偶元素。
7. 计算示例
7.1 投影与拒斥
向量 v 在 u 上的投影:
v∥=(v⋅u)u−1=u2v⋅uu
拒斥(垂直分量):
v⊥=(v∧u)u−1
7.2 面积与体积
平行四边形面积:∣A∣=∣a∧b∣
平行六面体体积:∣V∣=∣a∧b∧c∣
7.3 复合旋转
旋转的复合就是旋转子的乘积:
Rtotal=R2R1
先 R1 后 R2。这比旋转矩阵更高效!
代码实现
Python 中可以使用 clifford 库:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| from clifford import Cl
layout, blades = Cl(3) e1, e2, e3 = blades['e1'], blades['e2'], blades['e3']
a = 2*e1 + 3*e2 b = e1 - e3 print(a*b)
print(a ^ b)
import numpy as np theta = np.pi / 2 R = np.cos(theta/2) + (e1^e2) * np.sin(theta/2) v = e1 v_rotated = R * v * ~R print(v_rotated)
|
总结
几何代数提供了统一优雅的几何语言:
- 几何积:统一了点积和外积
- 多重向量:自然表示各阶几何对象
- 旋转子:比矩阵和四元数更直观高效
- 维度无关:公式自然推广到任意维度
- 物理统一:电磁学、相对论、量子力学的自然语言
参考资料
- Hestenes, D. & Sobczyk, G. Clifford Algebra to Geometric Calculus, 1984
- Doran, C. & Lasenby, A. Geometric Algebra for Physicists, 2003
- Dorst, L. et al. Geometric Algebra for Computer Science, 2007
- Bivector.net - 几何代数资源