SymPy 玻色子量子算符模块 boson 完全指南:BosonOp、Fock 态与相干态
2026/9/15 5:42:41 网站建设 项目流程

SymPy 玻色子量子算符模块 boson 完全指南:BosonOp、Fock 态与相干态

【免费下载链接】sympyA computer algebra system written in pure Python项目地址: https://gitcode.com/GitHub_Trending/sy/sympy

本文围绕 SymPy 的量子物理子包sympy.physics.quantum.boson展开,系统讲解玻色子产生/湮灭算符BosonOp、Fock 数态(BosonFockKet/BosonFockBra)与相干态(BosonCoherentKet/BosonCoherentBra)的构造方式、代数性质与作用规则。读者阅读后将掌握如何在 SymPy 中构建满足[a, a†] = 1的玻色子算符代数、对 Fock 态与相干态执行算符作用(qapply)并计算内积,可用于谐振子、量子光学、二次量子化等问题的符号推导。

一、模块定位与文档来源

本文所依据的官方 API 文档为 doc/src/modules/physics/quantum/boson.rst,该文档本身是一个automodule指令存根,通过 Sphinx 自动提取模块 docstring 生成 API 参考页:

===== Boson ===== .. automodule:: sympy.physics.quantum.boson :members:

也就是说,该文档页的实质内容完全来自模块源码 sympy/physics/quantum/boson.py 中各类的 docstring 与签名。模块头注释一句话点明了定位:“Bosonic quantum operators.”(玻色子量子算符),并与姊妹模块sympy.physics.quantum.fermion(费米子算符,对应文档见 doc/src/modules/physics/quantum/fermion.rst)共同构成二次量子化框架的基础。

模块通过__all__暴露了 5 个公开符号(见 boson.py):

符号类型含义
BosonOp算符类玻色子产生/湮灭算符
BosonFockKet态矢类Fock 数态右矢 |n⟩
BosonFockBra态矢类Fock 数态左矢 ⟨n|
BosonCoherentKet态矢类相干态右矢 |α⟩
BosonCoherentBra态矢类相干态左矢 ⟨α|

模块依赖的核心基础设施——OperatorKet/BraHilbertSpace/FockSpaceDaggerCommutatorqapply——均来自sympy.physics.quantum包(见 sympy/physics/quantum/init.py 的__all__列表)。

二、BosonOp:玻色子产生与湮灭算符

BosonOp继承自量子算符基类Operator(见 sympy/physics/quantum/operator.py),是模块的核心类。其 docstring 给出了最根本的代数定义:

A bosonic operator that satisfies[a, Dagger(a)] == 1.

即它描述满足玻色子正则对易关系(canonical commutation relation, CCR)的算符。

2.1 构造参数

BosonOp的构造函数接受一到两个位置参数(见 boson.py):

参数类型说明
namestr玻色子模式的标签,如"a""b"
annihilationboolTrue(默认)表示湮灭算符,False表示产生算符

构造规则如下:

  • 只传一个参数时,自动补充annihilation=True(等价于BosonOp("a", True));
  • 传两个参数时,第二个参数会被转换为Integer后随name一起存入args
  • 参数个数不为 1 或 2 时抛出ValueError'1 or 2 parameters expected')。

对应的两个只读属性:

@property def name(self): return self.args[0] @property def is_annihilation(self): return bool(self.args[1])

此外类方法default_args()返回("a", True),即默认构造的算符标签为"a"且为湮灭算符。

2.2 基本用法

>>> from sympy.physics.quantum import Dagger, Commutator >>> from sympy.physics.quantum.boson import BosonOp >>> a = BosonOp("a") # 湮灭算符 a >>> a.is_annihilation True >>> Dagger(a) # 产生算符 a†,同样是一个 BosonOp Dagger(a) >>> Dagger(a).is_annihilation False >>> Commutator(a, Dagger(a)).doit() # 正则对易关系 [a, a†] = 1 1

上面的示例直接来自 boson.py 的 docstring。Daggersympy.physics.quantum.dagger中定义的通用厄米共轭操作(见 sympy/physics/quantum/dagger.py),对矩阵等价于转置加复共轭,对算符则调用其_eval_adjoint

2.3 源码级实现:共轭、对易与反对易

BosonOp通过一系列_eval_*钩子方法接入 SymPy 量子算符的分发机制(dispatch method)。Operator基类的_eval_commutator/_eval_anticommutator/_apply_operator会按操作数类型拼装方法名并分发调用(见 sympy/physics/quantum/operator.py),BosonOp正是利用这一机制实现自动化简:

厄米共轭(_eval_adjoint,见 boson.py)

def _eval_adjoint(self): return BosonOp(str(self.name), not self.is_annihilation)

湮灭算符的共轭就是同名模式的产生算符,反之亦然,因此Dagger(a)仍是一个BosonOp,且Dagger(Dagger(a)) == a

对易关系(_eval_commutator_BosonOp,见 boson.py)

def _eval_commutator_BosonOp(self, other, **hints): if self.name == other.name: # [a†, a] = -1 if not self.is_annihilation and other.is_annihilation: return S.NegativeOne elif 'independent' in hints and hints['independent']: # [a, b] = 0 return S.Zero return None

逻辑要点:

  • 同一模式[a†, a] = -1(等价于[a, a†] = 1);其他组合(如[a, a][a†, a†])未显式写出,返回None交由上层保持未化简形式;
  • 不同模式:只有传入independent=True提示时才化简为 0。默认情况下不同模式算符的对易子保持展开形式,例如测试用例中的Commutator(a, Dagger(b)).doit()结果是a*Dagger(b) - Dagger(b)*a(见 sympy/physics/quantum/tests/test_boson.py)。

与费米子对易(_eval_commutator_FermionOp,见 boson.py)

def _eval_commutator_FermionOp(self, other, **hints): return S.Zero

玻色子算符与费米子算符恒对易(即 [BosonOp, FermionOp] = 0),这是两种统计粒子可以共存于同一二次量子化框架的依据。

反对易关系(_eval_anticommutator_BosonOp,见 boson.py)

def _eval_anticommutator_BosonOp(self, other, **hints): if 'independent' in hints and hints['independent']: # {a, b} = 2 * a * b, because [a, b] = 0 return 2 * self * other return None

对于独立模式,由[a, b] = 0可推出{a, b} = ab + ba = 2ab

2.4 打印与显示

BosonOp针对字符串、LaTeX 与 pretty 打印分别实现(见 boson.py):

  • str 打印:湮灭算符直接显示模式名(如a),产生算符显示为Dagger(a)
  • LaTeX 打印:湮灭算符为{a},产生算符渲染为带共轭角标的{a}^\dagger
  • pretty 打印:产生算符在模式名右上角加(Unicode DAGGER 字符),适合终端/交互环境展示。

此外,由于BosonOp是普通 SymPy 表达式,Dagger(exp(a)) == exp(Dagger(a))这类指数算符关系也会被自动处理(测试见 test_boson.py)。

三、Fock 数态:BosonFockKet 与 BosonFockBra

Fock 态(数态)是玻色子模式占据数算符的本征态,记为 |n⟩(n 为非负整数)。

3.1 构造与属性

from sympy.physics.quantum.boson import BosonFockKet, BosonFockBra ket = BosonFockKet(3) # |3⟩ ket.n # 3 bra = BosonFockBra(2) # ⟨2| bra.n # 2
  • 构造参数nNumber(Fock 态占据数),存入label[0],通过.n属性读取;
  • BosonFockKet.dual_class()返回BosonFockBraBosonFockBra.dual_class()返回BosonFockKet,实现左右矢互相对偶;
  • 二者所属希尔伯特空间均为FockSpace()(见 boson.py),即二次量子化框架下的无穷维Fock 空间——FockSpace的 docstring 指出它在数学上是单粒子希尔伯特空间的无穷直和直积,其dimension属性为oo(见 sympy/physics/quantum/hilbert.py)。

3.2 正交归一性

Fock 态满足正交归一关系⟨n|m⟩ = δ_{n,m},源码通过KroneckerDelta实现(见 boson.py):

def _eval_innerproduct_BosonFockBra(self, bra, **hints): return KroneckerDelta(self.n, bra.n)

验证(对应测试 test_boson.py):

>>> (BosonFockBra(0) * BosonFockKet(1)).doit() 0 >>> (BosonFockBra(1) * BosonFockKet(1)).doit() 1

3.3 产生/湮灭算符对 Fock 态的作用

BosonFockKet通过_apply_from_right_to_BosonOp实现了算符对态的作用规则(见 boson.py):

def _apply_from_right_to_BosonOp(self, op, **options): if op.is_annihilation: return sqrt(self.n) * BosonFockKet(self.n - 1) else: return sqrt(self.n + 1) * BosonFockKet(self.n + 1)

这正是量子力学中的标准规则:

  • 湮灭a|n⟩ = √n |n−1⟩(n=0 时给出√0 · |−1⟩的边界情形,需在物理语境下取舍);
  • 产生a†|n⟩ = √(n+1) |n+1⟩

由这两条规则可进一步推得占据数算符N = a†a满足N|n⟩ = n|n⟩。算符作用的实际执行者是qapply:它会把乘积中的算符逐个应用到态上,分派顺序为优先尝试_apply_operator,否则回退到_apply_from_right_to(见 sympy/physics/quantum/qapply.py)。

典型实战示例——计算 ⟨n|(a†)ⁿ|0⟩:

>>> from sympy.physics.quantum import qapply >>> n = 3 >>> qapply(BosonFockBra(n) * Dagger(a)**n * BosonFockKet(0)) sqrt(6)

结果为√6 = √(3!),即一般地⟨n|(a†)ⁿ|0⟩ = √(n!)。这正是测试 test_boson.py 中用sqrt(prod(range(1, n+1)))验证的结论。

四、相干态:BosonCoherentKet 与 BosonCoherentBra

相干态 |α⟩ 是湮灭算符的本征态,本征值为复数 α(相干态振幅),在量子光学中对应于经典相干光场。

4.1 构造与属性

from sympy.physics.quantum.boson import BosonCoherentKet, BosonCoherentBra ket = BosonCoherentKet(alpha) # |α⟩,alpha 可为 Number 或 Symbol ket.alpha # α bra = BosonCoherentBra(alpha) # ⟨α|
  • 构造参数alphaNumberSymbol,通过.alpha属性读取;
  • 二者互相对偶(dual_class相互指向);
  • 所属希尔伯特空间为抽象的HilbertSpace()(见 boson.py),对应 sympy/physics/quantum/hilbert.py 中定义的抽象希尔伯特空间。

4.2 湮灭算符本征性质

相干态的核心性质是a|α⟩ = α|α⟩,源码直接体现在_apply_from_right_to_BosonOp中(见 boson.py):

def _apply_from_right_to_BosonOp(self, op, **options): if op.is_annihilation: return self.alpha * self else: return None
  • 湮灭算符作用:本征值 α 提出,态不变;
  • 产生算符作用:不满足本征方程,返回None(不做化简)。

对应测试(test_boson.py):

>>> qapply(a * BosonCoherentKet(alpha1)) 1.2*|1.2>

左矢方向有对应的_apply_operator_BosonOp实现:⟨α|a† = α⟨α|(见 boson.py)。

4.3 相干态的内积(非正交性)

两个相干态的内积在源码中直接给出了闭式表达式(见 boson.py):

def _eval_innerproduct_BosonCoherentBra(self, bra, **hints): if self.alpha == bra.alpha: return S.One else: return exp(-(abs(self.alpha)**2 + abs(bra.alpha)**2 - 2 * conjugate(bra.alpha) * self.alpha)/2)

即:

  • 相同参数:⟨α|α⟩ = 1(归一化);
  • 不同参数:⟨α|β⟩ = exp(−(|α|² + |β|² − 2β̄α)/2),其中β̄表示 β 的复共轭。

注意该表达式恒不为零,说明相干态彼此不正交(非正交性),这是相干态有别于 Fock 态的重要特征。对实数参数 α₁、α₂ 的特殊情形,公式退化为exp(−(α₁−α₂)²/2),测试用例正是据此验证(见 test_boson.py):

>>> alpha1, alpha2 = 1.2, 4.3 >>> (BosonCoherentBra(alpha1) * BosonCoherentKet(alpha1)).doit() 1 >>> abs((BosonCoherentBra(alpha1) * BosonCoherentKet(alpha2)).doit() ... - exp((alpha1 - alpha2) ** 2 * Rational(-1, 2))) < 1e-12 True

五、与配套工具的协同使用

boson模块不是孤立的,它与sympy.physics.quantum中的通用工具深度协作,这些工具均有对应的 API 文档页:

工具模块与玻色子模块的关系
Daggersympy/physics/quantum/dagger.py产生算符的共轭操作入口,文档见 doc/src/modules/physics/quantum/dagger.rst
Commutator/AntiCommutatorsympy.physics.quantum.commutator/anticommutator触发BosonOp._eval_commutator_*的自动化简,文档见 doc/src/modules/physics/quantum/commutator.rst
qapplysympy/physics/quantum/qapply.py执行算符对态的作用,文档见 doc/src/modules/physics/quantum/qapply.rst
FockSpace/HilbertSpacesympy/physics/quantum/hilbert.pyFock 态与相干态各自所属的希尔伯特空间,文档见 doc/src/modules/physics/quantum/hilbert.rst
Operator/Ket/Brasympy.physics.quantum.operator/state算符与态矢的公共基类,文档见 doc/src/modules/physics/quantum/operator.rst

一次把上述工具串联起来的完整工作流示例:

from sympy.physics.quantum import Dagger, Commutator, qapply from sympy.physics.quantum.boson import (BosonOp, BosonFockKet, BosonFockBra, BosonCoherentKet) a = BosonOp("a") n = 3 # 1) 正则对易关系 assert Commutator(a, Dagger(a)).doit() == 1 # 2) Fock 态:产生算符逐级提升,⟨3|(a†)^3|0⟩ = √6 assert qapply(BosonFockBra(n) * Dagger(a)**n * BosonFockKet(0)) ** 2 == 6 # 3) 相干态:湮灭算符本征方程 a|α⟩ = α|α⟩ alpha = 1.2 assert qapply(a * BosonCoherentKet(alpha)) == alpha * BosonCoherentKet(alpha)

六、源码结构与测试印证

6.1 类实现清单(boson.py)

行号关键钩子方法
BosonOpL23-L114_eval_commutator_BosonOp_eval_commutator_FermionOp_eval_anticommutator_BosonOp_eval_adjoint
BosonFockKetL116-L150_eval_innerproduct_BosonFockBra_apply_from_right_to_BosonOp
BosonFockBraL152-L176_eval_hilbert_spacedual_class
BosonCoherentKetL179-L215_eval_innerproduct_BosonCoherentBra_apply_from_right_to_BosonOp
BosonCoherentBraL218-L244_apply_operator_BosonOpdual_class

6.2 测试覆盖(test_boson.py)

模块的全部核心行为都有对应测试:

  • test_bosonoperator(L13-L31):验证BosonOp类型、is_annihilation标记、等值语义(同模式同名、不同模式、不同升降标记均区分)、正则对易关系[a, a†] = 1、不同模式对易子保持未化简、Dagger(exp(a)) == exp(Dagger(a))
  • test_boson_states(L34-L51):验证 Fock 态正交归一、⟨n|(a†)ⁿ|0⟩ = √(n!),以及相干态归一化、两相干态重叠公式与湮灭本征方程。

若要在本地运行这些测试,可在仓库根目录执行:

python -m pytest sympy/physics/quantum/tests/test_boson.py -v

七、总结与延伸

sympy.physics.quantum.boson以极简的类层次实现了二次量子化中最常用的玻色子代数对象:BosonOp内建正则对易关系[a, a†] = 1与费米子对易关系,BosonFockKet/BosonFockBra提供正交归一且携带aa†作用规则(√n、√(n+1) 系数)的 Fock 态,BosonCoherentKet/BosonCoherentBra提供湮灭算符本征态及其非正交内积公式。所有行为都通过_eval_*分发钩子接入DaggerCommutatorqapply等通用工具,使其可以无缝参与更大的符号量子力学计算。

进一步阅读:费米子对应实现见 doc/src/modules/physics/quantum/fermion.rst;算符与态的基础框架见 doc/src/modules/physics/quantum/operator.rst 与 doc/src/modules/physics/quantum/state.rst;完整的量子物理模块导航见 doc/src/modules/physics/quantum/index.rst。

【免费下载链接】sympyA computer algebra system written in pure Python项目地址: https://gitcode.com/GitHub_Trending/sy/sympy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询