RecursionError: максимальная глубина рекурсии превышена при интегрировании, sympy 1.1.1

Ошибка появилась на 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 ответ

Известно, что SymPy не может интегрировать многие функции. Вероятно, об этой конкретной функции еще не сообщалось, поэтому обязательно добавьте ее в постоянно растущий список.

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, который я не установил, поэтому я не могу сказать, поможет ли это здесь.

Другие вопросы по тегам