Sympy 文档说属性
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
预期的行为是返回 phi 乘以 2 内的表达式。但是,它返回一个错误:
---------------------------------------------------------------------------
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'
那么,从波函数对象的线性组合中提取结果表达式的正确方法是什么?
显然,这可以实现我想要的转换:
def search_wave_term(Expr):
new_expr = Expr
for arg in Expr.args:
if arg.func == Wavefunction:
new_expr = new_expr.subs(arg, arg.expr)
else:
new_term = search_wave_term(arg)
new_expr = new_expr.subs(arg, new_term)
return new_expr