我正在尝试使用 SymPy 1.1.1 集成 x**(n-1)*sin(x**n)
。知道为什么会出现错误
TypeError: cannot determine truth value of Relational
生成了?这是一个已知的问题?这是一个错误吗?还是我做错了什么?
pip list | grep sympy
sympy 1.1.1
运行于
cat /etc/*release
Manjaro Linux
DISTRIB_ID=ManjaroLinux
DISTRIB_RELEASE=17.1.10
DISTRIB_CODENAME=Hakoila
DISTRIB_DESCRIPTION="Manjaro Linux"
Manjaro Linux
使用Anaconda最新的Python
$python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0] on linux
>>> from sympy import *
>>> x, n=symbols('x n')
>>> integrate(x**(n-1)*sin(x**n),x)
给出
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/anaconda/lib/python3.6/site-packages/sympy/integrals/integrals.py", line 1295, in integrate
risch=risch, manual=manual)
File "/opt/anaconda/lib/python3.6/site-packages/sympy/integrals/integrals.py", line 486, in doit
conds=conds)
File "/opt/anaconda/lib/python3.6/site-packages/sympy/integrals/integrals.py", line 908, in _eval_integral
h = meijerint_indefinite(g, x)
File "/opt/anaconda/lib/python3.6/site-packages/sympy/integrals/meijerint.py", line 1612, in meijerint_indefinite
res = _meijerint_indefinite_1(f.subs(x, x + a), x)
File "/opt/anaconda/lib/python3.6/site-packages/sympy/integrals/meijerint.py", line 1675, in _meijerint_indefinite_1
if b < 0 or f.subs(x, 0).has(nan, zoo):
File "/opt/anaconda/lib/python3.6/site-packages/sympy/core/relational.py", line 195, in __nonzero__
raise TypeError("cannot determine truth value of Relational")
TypeError: cannot determine truth value of Relational
使用 Mathematica 计算反导数,
ClearAll[x,n]
Integrate[x^(n-1) Sin[x^n],x]
最佳答案
SymPy 尝试了几种方法,大致按以下顺序:Risch 算法、Meijer G 积分、“手动积分”(基于微积分类型规则)和 Risch 的缓慢启发式形式。 Meijer G 在这里抛出一个错误,这是一个错误(if b < 0
应该重写,考虑到 b < 0
的真值可能未知)。
作为解决方法,禁用 Meijer G 有助于:
x, n = symbols('x n')
integrate(x**(n-1)*sin(x**n), x, meijerg=False)
返回Piecewise((log(x)*sin(1), Eq(n, 0)), (-cos(x**n)/n, True))
这比 Mathematica 的输出更正确,因为 n=0 的情况是不同的。
在 SymPy 的当前开发版本中,此输出被重新排序以将通用情况放在第一位:Piecewise((-cos(x**n)/n, Ne(n, 0)), (log(x)*sin(1), True))
。
还可以使用选项manual=True
告诉 SymPy 直接进入“手动”算法,得到相同的结果。
integrate(x**(n-1)*sin(x**n), x, manual=True)
关于python - 为什么 SymPy 1.1.1 在计算这个基本积分时返回错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50903574/