对偶运算教程¶
本教程介绍几何代数中对偶的概念及其应用。
目录¶
1. 什么是对偶?¶
对偶是几何代数中的一个基本运算,它在多向量的不同阶次之间建立映射。在 3D 欧几里得空间中:
| 原始元素 | 对偶 |
|---|---|
| 标量 | 三重向量(伪标量) |
| 向量 | 二重向量 |
| 二重向量 | 向量 |
| 三重向量 | 标量 |
对偶本质上给出了一个多向量的"正交补"。
直观理解¶
在 3D 中: - 向量**的对偶是**二重向量,表示垂直于该向量的平面 - 二重向量**的对偶是**向量,垂直于该平面 - 标量**的对偶是**体积元素(伪标量)
2. 数学定义¶
伪标量¶
伪标量 I 是代数中最高阶的元素:
import nblade
alg = nblade.Algebra.euclidean(3)
e1, e2, e3 = alg.basis_vectors()
# 伪标量 I = e1 ∧ e2 ∧ e3
I = e1 ^ e2 ^ e3
print(f"I = {I}") # e1∧e2∧e3
print(f"I² = {(I * I).scalar_part()}") # 在 3D 欧几里得空间中为 -1
对偶运算¶
多向量 A 的对偶定义为:
或等价地:
在 nblade 中使用对偶¶
import nblade
alg = nblade.Algebra.euclidean(3)
e1, e2, e3 = alg.basis_vectors()
# 向量的对偶
v = e1
v_dual = v.dual()
print(f"e1 的对偶: {v_dual}") # e2∧e3
# 二重向量的对偶
B = e1 ^ e2
B_dual = B.dual()
print(f"e1∧e2 的对偶: {B_dual}") # e3
3. 对偶与叉积¶
在 3D 中,叉积可以用对偶表示:
这就是为什么叉积只在 3D 中有效——它需要用对偶把二重向量映射回向量。
示例:通过对偶计算叉积¶
import nblade
alg = nblade.Algebra.euclidean(3)
e1, e2, e3 = alg.basis_vectors()
a = e1
b = e2
# 通过对偶计算叉积: a × b = (a ∧ b)*
wedge = a ^ b # a ∧ b = e1∧e2
cross = wedge.dual() # 对偶 = e3
print(f"a ∧ b = {wedge}") # e1∧e2
print(f"(a ∧ b)* = {cross}") # e3
# 这等价于叉积!
# e1 × e2 = e3
几何代数方法的优势¶
| 叉积 | 几何代数对偶 |
|---|---|
| 只在 3D 中有效 | 任意维度都有效 |
| 返回向量 | 返回二重向量(更自然) |
| 非结合律 | 外积满足结合律 |
4. 逆对偶¶
逆对偶反转对偶运算:
在 nblade 中使用逆对偶¶
import nblade
alg = nblade.Algebra.euclidean(3)
e1, e2, e3 = alg.basis_vectors()
v = e1 + 2*e2 + 3*e3
# 对偶
v_dual = v.dual()
# 逆对偶(应该恢复原始向量)
v_recovered = v_dual.inverse_dual()
print(f"原始向量: {v}")
print(f"对偶: {v_dual}")
print(f"逆对偶: {v_recovered}")
5. 应用¶
从平面获取法向量¶
由二重向量 B 定义的平面,其法向量为 n = B*:
import nblade
alg = nblade.Algebra.euclidean(3)
e1, e2, e3 = alg.basis_vectors()
# 由 e1∧e2 定义的平面(xy 平面)
plane = e1 ^ e2
# 法向量(指向 z 方向)
normal = plane.dual()
print(f"xy 平面的法向量: {normal}") # e3
面积与体积¶
对偶自然地关联了面积和体积:
import nblade
alg = nblade.Algebra.euclidean(3)
e1, e2, e3 = alg.basis_vectors()
# 面积元素
area = e1 ^ e2 # 表示面积的二重向量
# 面积的"体积"(大小)
# |B*| = |B| 在 3D 欧几里得空间中
area_magnitude = area.norm()
print(f"面积大小: {area_magnitude}") # 1.0
电磁场¶
在物理学中,电磁场 F = E + iB 使用对偶来关联 E 场和 B 场:
import nblade
alg = nblade.Algebra.euclidean(3)
e1, e2, e3 = alg.basis_vectors()
I = e1 ^ e2 ^ e3 # 伪标量
# 电场
E = e1 + e2
# 磁场作为二重向量(通过对偶)
# B_bivector = I * B_vector = dual(B_vector)
B_vector = e3
B_bivector = B_vector.dual() # e1∧e2
print(f"磁场二重向量: {B_bivector}")
总结¶
| 概念 | 公式 | nblade 方法 |
|---|---|---|
| 对偶 | A* = AI⁻¹ | A.dual() |
| 逆对偶 | (A*)* | A.inverse_dual() |
| 叉积(3D) | a × b = (a ∧ b)* | (a ^ b).dual() |
| 伪标量 | I = e₁∧e₂∧...∧eₙ | alg.config.volume_element() |
延伸阅读¶
- 运行示例:
python examples/tutorials/04_dual_operations.py - 参见:阶次操作
- API 参考:MultiVector.dual()