Python 为什么SymPy 1.1.1在计算此基本积分时返回错误?

Python 为什么SymPy 1.1.1在计算此基本积分时返回错误?,python,sympy,symbolic-math,calculus,Python,Sympy,Symbolic Math,Calculus,我正在尝试使用Sympy1.1.1集成x**(n-1)*sin(x**n)。你知道为什么会出错吗 TypeError:无法确定关系类型的真值 是生成的吗?这是一个已知的问题吗?这是虫子吗?还是我做错了什么 pip list | grep sympy sympy 1.1.1 继续 cat /etc/*release Manjaro Linux DISTRIB_ID=ManjaroLinux DISTRIB_RELEASE=17.1.10

我正在尝试使用Sympy1.1.1集成
x**(n-1)*sin(x**n)
。你知道为什么会出错吗

TypeError:无法确定关系类型的真值

是生成的吗?这是一个已知的问题吗?这是虫子吗?还是我做错了什么

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


声明
x
n
的类型:

>>> from sympy import *
>>> x = Symbol('x',real=True)
>>> n = Symbol('n',integer=True)
>>> integrate(x**(n-1) * sin(x**n),x)
-cos(x**n)/n

integrate
花了几分钟的时间返回反派生。但是,使用声明
x,n=symbols('xn')
也可以。我正在使用Symphy 1.0和Python 2.7.12,Symphy尝试了几种方法,大致顺序如下:Risch算法、Meijer G积分、“手动积分”(基于微积分类型规则)和一种缓慢的启发式Risch形式。Meijer G在这里抛出了一个错误,这是一个bug(
如果b<0
应该重写,考虑到
b<0
的真值可能未知)

作为一种解决方法,禁用Meijer G有助于:

x, n = symbols('x n')
integrate(x**(n-1)*sin(x**n), x, meijerg=False)
返回
分段((log(x)*sin(1),Eq(n,0)),(-cos(x**n)/n,True))
,这比Mathematica输出更正确,因为n=0的情况不同

在Symphy的当前开发版本中,此输出被重新排序以将通用情况放在第一位:
分段(-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)

您可能需要了解如何在
n
上设置约束。如果
n=0
,则
x**(-1)
项将引入一个
ln(x)
项,该项不包含正
n
整数。而float
n
又增加了一个复杂性。我需要在
n
中添加一个
positive=True
来得到这个结果。@hpaulj如果只使用
n=Symbol('n',integer=True)
,你会得到什么错误消息?OP报告的真值,由
def\uu nonzero\uuuuu(self):
发布。我怀疑1.1一直在改变假设(放松假设)。但我仍在努力寻找相关文档。
x, n = symbols('x n')
integrate(x**(n-1)*sin(x**n), x, meijerg=False)
integrate(x**(n-1)*sin(x**n), x, manual=True)