python - 在 SymPy 中明智地使用常量

标签 python sympy integrate

我在 SymPy Live 上尝试了以下内容

b,c,t = symbols('b c t')
g = 1/(1+exp(c*(b-t)))
integrate(g,t)

结果是 Integral(1/(exp(c*(b - t)) + 1), t) 我理解为“无法处理这个”。

但是,当我尝试

g = 1/(1+exp(0.1*(b-t)))
integrate(g,t)

我得到:

1.0*t + 10.0*log(exp(-0.1*b) + exp(-0.1*t))

而且我可以轻松地将 0.110 替换为 c1/c。我做错了什么让 SymPy 在 c 上阻塞但处理 0.1?

已编辑

我刚注意到

g = 1/(1+exp(c*b-c*t)))

可以通过集成处理。

最佳答案

SymPy 0.7.2 中的积分算法是 Risch 算法的启发式版本,对输入表达式的形式非常敏感。在 SymPy 的下一个版本中(如果你现在想要的话,或者是 git master),已经开始研究完整的 Risch 算法,它没有这个问题。

In [3]: b,c,t = symbols('b c t')

In [4]: g = 1/(1+exp(c*(b-t)))

In [5]: integrate(g,t)
Out[5]:
       ⎛ c⋅(b - t)    ⎞
    log⎝ℯ          + 1⎠
t + ───────────────────
             c

In [9]: g = 1/(1+exp(c*b-c*t))

In [11]: integrate(g, t)
Out[11]:
       ⎛ b⋅c - c⋅t    ⎞
    log⎝ℯ          + 1⎠
t + ───────────────────
             c

你有时还是会看到这个问题,因为并不是所有的积分都由到目前为止已经实现的 Risch 算法的部分处理,所以它会退回到启发式版本。

(准确地说,还有另一种算法,使用 Meijer G 函数,但不适用于这个被积函数。它也有点启发式,因此可能取决于输入的形式)

关于python - 在 SymPy 中明智地使用常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499678/

相关文章:

python - 导入错误 at/23 "No module named Python"

python - OpenCV 多色阈值处理

python - 在列表和字典的字典中查找字符串

react-native - 将 Zoho Sign 集成到 React Native

python - 是否可以从 Django Cms 生成静态 html?

python - 如何使用lambdaify来评估我的函数?

python - Sympy:在关系上使用逻辑运算符

python-3.x - 使用 SymPy 将符号表达式转换为 Python 函数

ios - 如何在 iOS 项目中集成 MuPDF 1.3

python - Python QuTiP 中的集成未成功