我正在使用sympy
来评估依赖于多个状态函数的相当复杂的特征值问题。我希望能够使用占位符函数,我可以生成积分并在以后评估积分对输入函数的依赖性。
import sympy as s
x, L = s.symbols('x L')
Q = s.Function('Q')(x)
# do some sort of integration
e = s.integrate(Q, (x, -L, L))
print(e)
# Integral(Q(x), (x, -L, L))
# evaluate a simple linear function
print(e.subs(Q, x))
# Integral(Q(x), (x, -L, L))
# Expected: Integral(x, (x, -L, L))
# Or: 0 (evaluation)
# intermediate work around
interm = Q
e = s.integrate(interm.subs(Q, x), (x, -L, L))
print(e)
# 0 (expected)
如您所见,积分的评估不允许函数替换。当然,我可以在x
Q
的{{1}}整合之前的任何时候执行替换,但稍后执行替换会很方便。有没有解决的办法?或者,有没有理由通过设计sympy
来避免这种情况?
答案 0 :(得分:2)
subs
上Integral
的行为已在SymPy的开发版本中更改(请参阅https://github.com/sympy/sympy/wiki/release-notes-for-0.7.4#unification-of-sum-product-and-integral-classes)。我们计划在未来几周内发布。您的示例适用于开发版本:
>>> # This is in the development version
>>> print(e.subs(Q, x))
Integral(x, (x, -L, L))
作为解决方法,您可以使用replace
代替subs
:
>>> # This is in 0.7.3
>>> print(e.replace(Q, x))
Integral(x, (x, -L, L))