如何在SymPy中提取Wavefunction对象组合的表达式?
问题
SymPy的Wavefunction文档提到expr属性可提取Wavefunction对象的表达式,但处理波函数的线性组合时该属性无效。
运行以下代码:
import sympy as sp from sympy.physics.quantum.state import Wavefunction R = sp.Function('R') Z = sp.Function('Z') x,y = sp.symbols('x y', real=True) ϕ = Wavefunction(R(x)*Z(y), x, y) (ϕ + ϕ).expr
预期返回2*R(x)*Z(y),但实际触发错误:
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Cell In[316], line 7 3 x,y = sp.symbols('x y', real=True) 5 ϕ = Wavefunction(R(x)*Z(y), x, y) ----> 7 (ϕ + ϕ).expr AttributeError: 'Mul' object has no attribute 'expr'
请问提取Wavefunction对象线性组合的结果表达式的正确方法是什么?
解答
问题核心是:对Wavefunction对象做线性运算(加法、数乘等)后,返回的不再是Wavefunction实例,而是SymPy的普通符号对象(比如这里的Mul),因此没有expr属性。
正确提取方式分两种情况:
- 直接使用运算结果本身,因为线性组合的输出已经是SymPy表达式:
result = ϕ + ϕ print(result) # 输出 2*R(x)*Z(y)
- 如果需要保持
Wavefunction类型,可手动将运算结果重新包装为Wavefunction对象:
combined_expr = ϕ + ϕ combined_wf = Wavefunction(combined_expr, x, y) print(combined_wf.expr) # 输出 2*R(x)*Z(y)
SymPy量子模块中,Wavefunction的算术运算会自动解包为底层符号表达式,而非维持Wavefunction实例,因此无需通过expr属性,直接调用运算结果就能获取目标表达式。
内容的提问来源于stack exchange,提问作者Ícaro Lorran
相关产品推荐
相关产品推荐

