如何在Sympy中提取Wavefuncion对象组合的表达式

问题描述 投票:0回答:1

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'

那么,从波函数对象的线性组合中提取结果表达式的正确方法是什么?

sympy
1个回答
0
投票

显然,这可以实现我想要的转换:

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
© www.soinside.com 2019 - 2024. All rights reserved.