在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)
答案 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,因此我无法确定它是否对您有帮助。