You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SymPy中定义产生湮灭算符的对易关系以正确计算对易子?

在SymPy中定义对易关系并计算对易子

SymPy的基础Operator类不会自动处理量子对易关系,你需要借助专门的量子模块或自定义算符类来实现需求,以下是两种可行方案:

方案1:使用SymPy量子物理模块(推荐)

sympy.physics.quantum中的AnnihilationOperator和CreationOperator已经内置了玻色子的对易规则,不同模式的算符默认对易为0,直接调用即可:

from sympy import Dagger
from sympy.physics.quantum import AnnihilationOperator, Commutator

# 初始化玻色子湮灭/产生算符
a = AnnihilationOperator('a')
ad = Dagger(a)
b = AnnihilationOperator('b')
bd = Dagger(b)

# 定义哈密顿量
H = ad * a + bd * b

# 计算目标对易子
comm = Commutator(a, ad * b)
print(comm.doit())  # 输出:b

方案2:自定义算符类实现对易规则

如果不想依赖量子模块,可以通过重载Operator的_commutator方法,手动定义所需的对易关系:

from sympy import Operator, Dagger, Commutator

class BosonOperator(Operator):
    def __init__(self, symbol):
        super().__init__(symbol)
        self.symbol = symbol

    def _commutator(self, other, **kwargs):
        # 同模式算符:[a, a†] = 1,[a†, a] = -1
        if isinstance(other, Dagger) and other.arg.symbol == self.symbol:
            return 1
        if isinstance(self, Dagger) and isinstance(other, BosonOperator) and other.symbol == self.arg.symbol:
            return -1
        # 不同模式算符对易子为0
        if isinstance(other, (BosonOperator, Dagger)):
            other_sym = other.symbol if isinstance(other, BosonOperator) else other.arg.symbol
            if other_sym != self.symbol:
                return 0
        # 其他情况返回未计算的对易子
        return Commutator(self, other)

# 初始化自定义算符
a = BosonOperator('a')
ad = Dagger(a)
b = BosonOperator('b')
bd = Dagger(b)

# 展开并计算对易子:[A, BC] = [A,B]C + B[A,C]
comm = Commutator(a, ad * b).expand(commutator=True)
print(comm.doit())  # 输出:b

注意事项

基础Operator类没有预设对易逻辑,直接计算Commutator只会返回未展开的表达式,必须通过上述两种方式定义对易规则才能得到正确结果。

内容的提问来源于stack exchange,提问作者harsh vardhan upadhyay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:53