gpt4 book ai didi

python - 为什么 SymPy 1.1.1 在计算这个基本积分时会返回错误?

转载 作者:太空宇宙 更新时间:2023-11-04 00:16:10 24 4
gpt4 key购买 nike

我正在尝试使用 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]

Mathematica graphics

最佳答案

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com