Nasser
Nasser

Reputation: 13131

RecursionError: maximum recursion depth exceeded on integrate, sympy 1.1.1

Bug entered at https://github.com/sympy/sympy/issues/14877


Is this a known issue? Is this a new bug? Will report if new.

What could cause it?

>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)

gives

.....
 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
>>> 

btw, the anti derivative should be

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

Upvotes: 1

Views: 653

Answers (1)

user6655984
user6655984

Reputation:

It is a known issue that SymPy fails to integrate many functions. This particular function probably wasn't reported yet, so by all means, add it to the ever-growing list.

SymPy tries several integration approaches. One of them, called "manual integration", is highly recursive: a substitution or integration by parts is attempted, and then the process is repeated for the resulting integral.

In this specific case, the expression has a lot of functions that look like candidates for substitution: x**2, the denominator, the content of another exponential function. And SymPy goes into an infinite chain of substitution that leads not to a solution but to a stack overflow... There is no pattern implemented in integrate that would tell SymPy to make the crucial substitution u = 1 - x*exp(x**2).

There is a separate, experimental, integrator called RUBI which could be used with

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)

but it relies on MatchPy which I don't have installed, so I can't tell if it would help here.

Upvotes: 3

Related Questions