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

如何在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属性。

正确提取方式分两种情况:

  1. 直接使用运算结果本身,因为线性组合的输出已经是SymPy表达式:
result = ϕ + ϕ
print(result)  # 输出 2*R(x)*Z(y)
  1. 如果需要保持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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:14:54