SymPy 量子力学模块中的笛卡尔坐标算符与本征态:cartesian 模块完全指南

📅 发布时间:2026/9/15 5:18:48
SymPy 量子力学模块中的笛卡尔坐标算符与本征态:cartesian 模块完全指南
SymPy 量子力学模块中的笛卡尔坐标算符与本征态cartesian 模块完全指南【免费下载链接】sympyA computer algebra system written in pure Python项目地址: https://gitcode.com/GitHub_Trending/sy/sympySymPy 的sympy.physics.quantum.cartesian模块是纯 Python 计算机代数系统SymPy中量子力学子模块的核心组成部分专门用于描述一维及三维笛卡尔坐标下的位置算符、动量算符及其本征态ket/bra。本文基于 cartesian.py 源码 与其对应测试 test_cartesian.py系统讲解X、Px等算符与XKet、PxKet等态的类设计、代数关系对易子、内积、连续谱归一化、在不同基下的表示方法以及算符与态之间的自动映射机制读完即可在 SymPy 中直接完成位置-动量表象的符号计算与验证。模块定位一维笛卡尔坐标下的算符与态该模块由官方文档入口 cartesian.rst 通过automodule指令引用其全部公开 API 均在sympy/physics/quantum/cartesian.py中定义。模块 docstring 明确指出其职责是 Operators and states for 1D cartesian position and momentum一维笛卡尔位置与动量算符和态并额外提供了用于二维/三维系统的YOp、ZOp与PositionKet3D。从 模块源码 可见其公开接口共 14 项位置算符XOp、YOp、ZOp动量算符PxOp预置算符实例X、Y、Z、Px一维位置本征态XKet、XBra一维动量本征态PxKet、PxBra三维位置本征态PositionState3D、PositionKet3D、PositionBra3D这些类全部继承自 operator.py 中的HermitianOperator厄米算符满足H Dagger(H)与 state.py 中的Ket/Bra/State基类因此天然具备量子代数运算qapply、Dagger、Commutator与表示represent能力。位置算符XOp、YOp、ZOp三个位置算符均继承HermitianOperator结构高度一致。以XOp为例cartesian.py#L45-L72default_args()返回(X,)即默认标签为X_eval_hilbert_space()返回L²(ℝ)即L2(Interval(S.NegativeInfinity, S.Infinity))——这是连续位置/动量本征态所属的平方可积函数空间_eval_commutator_PxOp()返回对易子[X, Px] iℏ_apply_operator_XKet()实现本征方程X|x⟩ x|x⟩_apply_operator_PositionKet3D()实现三维本征方程X|x,y,z⟩ x|x,y,z⟩_represent_PxKet()给出 X 算符在动量基下的表示见下文。YOp与ZOpcartesian.py#L75-L102结构相同docstring 分别注明用于 2D/3D 与 3D 系统其本征方程对应Y|…⟩ y|…⟩、Z|…⟩ z|…⟩。模块在文件底部实例化了全局单例算符cartesian.py#L132-L135X XOp(X) Y YOp(Y) Z ZOp(Z) Px PxOp(Px)日常使用直接引用X、Px即可无需每次手动构造实例。动量算符PxOpPxOpcartesian.py#L109-L130表示一维笛卡尔动量算符默认标签Px希尔伯特空间同为L2(Interval(-oo, oo))_apply_operator_PxKet()实现本征方程Px|px⟩ px|px⟩_represent_XKet()给出 Px 在位置基下的表示-iℏ δ(x₁ - x₂) d/dx₁。动量算符与位置算符的厄米性is_hermitian True由基类 HermitianOperator 声明这保证了两者作为可观测量的数学地位。位置本征态XKet 与 XBraXKetcartesian.py#L142-L173是连续位置本征态默认标签(x,)通过position属性self.label[0]暴露本征值 x。其关键行为dual_class()返回XBraXBra的dual_class()返回XKet二者互为对偶_eval_innerproduct_XBra()同一位置本征态的内积为狄拉克 δ 函数⟨x|x⟩ δ(x - x)体现连续谱的 δ 归一化_eval_innerproduct_PxBra()位置态与动量态的内积给出平面波因子⟨px|x⟩ exp(-i·x·px/ℏ)/√(2πℏ)_enumerate_state()借助模块级辅助函数_enumerate_continuous_1Dcartesian.py#L309-L325生成形如x_1、x_2的连续本征态序列用于表示representation计算。XBracartesian.py#L176-L190是位置本征 bra同样暴露position属性。动量本征态PxKet 与 PxBraPxKetcartesian.py#L254-L285是动量本征态默认标签(px,)momentum属性返回本征值。其内积规则与位置态互为对偶_eval_innerproduct_PxBra()⟨px|px⟩ δ(px - px)_eval_innerproduct_XBra()⟨x|px⟩ exp(i·x·px/ℏ)/√(2πℏ)即位置-动量变换的核函数。PxBracartesian.py#L288-L302为对偶 bra暴露momentum属性。三维位置本征态PositionKet3D三维部分由PositionState3D基类cartesian.py#L193-L221统一承载其默认标签为(x, y, z)并提供position_x、position_y、position_z三个只读属性。PositionKet3Dcartesian.py#L224-L236在此基础上实现三维 δ 归一化⟨x,y,z|x,y,z⟩ δ(x-x)·δ(y-y)·δ(z-z)PositionBra3Dcartesian.py#L242-L247为其对偶 bra。注意源码中_eval_hilbert_space只在三个算符类上定义三维态与算符间的对应关系X|x,y,z⟩ x|x,y,z⟩等由各算符的_apply_operator_PositionKet3D方法完成。位置-动量表象的数学核心对易子与表示海森堡对易关系对易关系由 测试文件 直接验证 from sympy.physics.quantum import Commutator, hbar from sympy.physics.quantum.cartesian import X, Px Commutator(X, Px).doit() I*hbar这一结果由XOp._eval_commutator_PxOp返回I*hbarcartesian.py#L56-L57实现其中hbar来自 constants.py。坐标/动量表示中的微分算符形式在动量基中X 算符表示为测试见 test_cartesian.py#L42-L49represent(XOp(), basisPxOp) hbar*I*DiracDelta(px_1 - px_2)*DifferentialOperator(px_1)在位置基中Px 算符表示为测试见 test_cartesian.py#L72-L81represent(PxOp(), basisXOp) -hbar*I*DiracDelta(x_1 - x_2)*DifferentialOperator(x_1)这正对应量子力学教科书中的结论位置算符在动量表象为iℏ·∂/∂p动量算符在坐标表象为-iℏ·∂/∂x。其中DifferentialOperator定义于 operator.py#L497表示形如d/dx的微分算符可通过qapply(d*w)直接作用于Wavefunction。本征方程与内积的符号验证以下表达式均可在 SymPy 中直接求值并得到与物理教科书一致的结果测试见 test_cartesian.py#L25-L39 与 test_cartesian.py#L62-L69物理表达式SymPy 验证结果X|x⟩ x\|x⟩qapply(X*XKet(x)) x*XKet(x)Px|px⟩ px\|px⟩qapply(Px*PxKet(px)) px*PxKet(px)⟨x|x⟩Dagger(XKet(y))*XKet(x) DiracDelta(x - y)⟨px|px⟩Dagger(PxKet(py))*PxKet(px) DiracDelta(px - py)⟨px|x⟩PxBra(px)*XKet(x) exp(-I*x*px/hbar)/sqrt(2*pi*hbar)⟨x|px⟩XBra(x)*PxKet(px) exp(I*x*px/hbar)/sqrt(2*pi*hbar)⟨x,y,z|x,y,z⟩Dagger(PositionKet3D(x_1,y_1,z_1))*PositionKet3D(x,y,z) DiracDelta(x-x_1)*DiracDelta(y-y_1)*DiracDelta(z-z_1)represent亦可直接作用于 ket/bra 与算符乘积例如represent(XKet(x)) DiracDelta(x - x_1)represent(XOp()*XKet()) x*DiracDelta(x - x_2)测试见 test_cartesian.py#L34-L40。需注意represent对部分复合表达式的处理仍存在已知缺陷测试 test_cartesian.py#L52-L59 已将其标记为XFAIL并在注释中说明有待重构。算符与态的双向映射operatorset 机制cartesian模块的算符与本征态通过 operatorset.py 的全局映射字典相互关联state_mapping { PxKet: PxOp, XKet: XOp, PositionKet3D: frozenset((XOp, YOp, ZOp)), ... }见 operatorset.py#L37-L43。基于此operators_to_state与state_to_operators两个全局函数可完成类与实例的双向转换 from sympy.physics.quantum.cartesian import XOp, PxOp, XKet, PxKet from sympy.physics.quantum.operatorset import operators_to_state, state_to_operators operators_to_state(XOp) |x operators_to_state(PxOp) |px state_to_operators(XKet) X state_to_operators(PxKet) Pxdoctest 见 operatorset.py#L82-L204。三维位置态对应一个包含三个算符的 frozenset这解释了模块 TODO 中为 3D 类补充 operatorset 映射的注释cartesian.py#L1-L7。值得留意的是目前PxKet与XKet之间通过_operators_to_state/_state_to_operators实现的大小写标签转换_lowercase_labels、_uppercase_labels见 cartesian.py#L328-L342使operators_to_state(XOp())能正确生成|x。一个完整的实战示例综合以上要素可以在 SymPy 中完成一次位置-动量表象的完整符号演练from sympy import symbols, I, pi, DiracDelta, exp, sqrt, Dagger from sympy.physics.quantum import qapply, represent, Commutator, hbar, L2 from sympy.physics.quantum.cartesian import ( X, Px, XKet, XBra, PxKet, PxBra, PositionKet3D, Y, Z ) from sympy.physics.quantum.operatorset import operators_to_state, state_to_operators x, px symbols(x px) # 1. 希尔伯特空间与对易关系 print(X.hilbert_space) # L2(Interval(-oo, oo)) print(Commutator(X, Px).doit()) # I*hbar # 2. 本征方程 print(qapply(X*XKet(x))) # x*|x print(qapply(Px*PxKet(px))) # px*|px # 3. δ 归一化与平面波内积 print((Dagger(XKet(0))*XKet(x)).doit()) # DiracDelta(x) print((PxBra(px)*XKet(x)).doit()) # exp(-I*x*px/hbar)/sqrt(2*pi*hbar) # 4. 三维位置本征态 ket3d PositionKet3D(x, 0, 0) print(qapply(X*Y*Z*ket3d)) # 0因 yz0 坐标乘子为 0 # 5. 算符-态双向映射 print(operators_to_state(X)) # |x print(state_to_operators(XKet)) # X测试与验证体系模块的全部行为由 test_cartesian.py 覆盖共 4 个测试组test_xX 算符的希尔伯特空间、对易关系、本征方程、δ 内积、平面波内积、位置基/动量基表示test_pPx 算符的对应行为与动量基/位置基表示test_3dposY、Z 算符的希尔伯特空间三维本征态的本征方程含qapply(X*Y*Z*ket3d) x*y*z*ket3d、对偶关系与三维 δ 内积_text_x_broken标记为XFAIL的已知represent缺陷用例。运行方式为标准 pytestpytest sympy/physics/quantum/tests/test_cartesian.py这些测试同时可作为理解各方法语义的权威示例例如represent(XOp(), basisPxOp)与represent(XOp(), basisPxKet)返回相同结果说明 basis 参数既可传算符也可传态test_cartesian.py#L42-L46。总结与延伸sympy.physics.quantum.cartesian以约 340 行源码完整封装了一维及三维笛卡尔位置/动量算符与本征态的符号代数厄米算符基类保证可观测量的数学性质_apply_operator_*与_eval_innerproduct_*钩子实现本征方程与 δ/平面波内积_represent_*钩子给出微分算符形式的表象表示operatorset则提供算符与态的自由转换。配合qapply、represent、Dagger、Commutator等通用工具见 量子模块总览即可在 SymPy 中符号化验证量子力学基础问题。若需进一步深入可继续阅读一维简谐振子模块 sho1d.py与位置/动量态紧密关联的谐振子本征态、态与算符基类 state.py 与 operator.py以及 算符作用与表示工具 qapply.py 与 represent.py。【免费下载链接】sympyA computer algebra system written in pure Python项目地址: https://gitcode.com/GitHub_Trending/sy/sympy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考