SymPy中非交换函数积分报错,咨询原因及修复方案
问题
尝试编写代码计算非交换函数H(t)*tau_1对tau_1的积分时,返回错误:
Could not turn tau_1*H(t) into a fraction in tau_1.
使用的代码如下:
import sympy as sp H = sp.Function('H',commutative=False) tau_1= sp.symbols('tau_1', constant=True) sp.Integral(H(t)*tau_1,tau_1).doit()
期望结果是H(t)/2*(tau_1)**2(H(t)因独立于tau_1被提出积分),请问为何代码无法正常运行,该如何修复?
原因与修复方案
原因
SymPy对非交换函数的积分支持有限,当被积表达式是非交换乘法顺序时,积分器无法自动识别H(t)是与积分变量tau_1无关的项,进而无法完成积分运算。另外原代码未定义变量t,属于潜在语法问题。
修复方法
手动将与积分变量无关的非交换项H(t)提出积分符号外,再对剩余含积分变量的部分单独积分,同时补充定义缺失的变量t:
正确代码
import sympy as sp # 定义非交换函数、积分变量及缺失的t变量 H = sp.Function('H', commutative=False) tau_1 = sp.symbols('tau_1', constant=True) t = sp.symbols('t') # 先对tau_1积分,再与非交换项H(t)做乘法 integral_result = H(t) * sp.integrate(tau_1, tau_1) print(integral_result)
输出结果
H(t)*tau_1**2/2
内容的提问来源于stack exchange,提问作者Idieh
相关产品推荐
相关产品推荐

