使用sympy替换占位符函数

时间:2013-11-21 04:41:54

标签: python sympy symbolic-math

我正在使用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来避免这种情况?

1 个答案:

答案 0 :(得分:2)

subsIntegral的行为已在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))