Python 为什么SymPy 1.1.1在计算此基本积分时返回错误?
我正在尝试使用Sympy1.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
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
整数。而floatn
又增加了一个复杂性。我需要在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)