RecursionError:在集成,sympy 1.1.1

时间:2018-07-06 21:58:04

标签: python sympy

https://github.com/sympy/sympy/issues/14877输入的错误


这是一个已知问题吗?这是一个新错误吗?如果有新的,将报告。

是什么原因造成的?

>which python
/opt/anaconda/bin/python

>pip list | grep sympy
sympy                              1.1.1

>python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

from sympy import *
x=symbols('x');
integrate(exp(1-exp(x**2)*x+2*x**2)*(2*x**3+x)/(1-exp(x**2)*x)**2,x)

给予

.....
 File "/opt/anaconda/lib/python3.6/site-packages/sympy/core/mul.py", line 1067, in <genexpr>
    a.is_commutative for a in self.args)
RecursionError: maximum recursion depth exceeded
>>> 

顺便说一句,反导应该是

  -exp(1-exp(x^2)*x)/(-1+exp(x^2)*x)

1 个答案:

答案 0 :(得分:2)

SymPy无法集成许多功能是一个已知问题。可能尚未报告此特定功能,因此请务必将其添加到ever-growing list中。

SymPy尝试了几种集成方法。其中之一,称为“手动积分”,是高度递归的:尝试用零件替代或积分,然后对所得积分重复该过程。

在这种特定情况下,表达式具有许多看起来像替换候选的函数:x**2,分母,另一个指数函数的内容。而且SymPy进入了无限的替换链,这不会导致解决方案,而是导致堆栈溢出... integrate中没有实现可告诉SymPy进行关键替换u = 1 - x*exp(x**2)的模式。

有一个单独的名为RUBI的实验性集成商,可以与

一起使用
from sympy.integrals.rubi.rubi import rubi_integrate
rubi_integrate(exp(1-exp(x**2)*x+2*x**2)*(2*x**3+x)/(1-exp(x**2)*x)**2, x)

但是它依赖于我尚未安装的MatchPy,因此我无法确定它是否对您有帮助。