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