SymPy中的集成引发“无属性'_eval_power'”错误

时间:2018-11-12 12:01:35

标签: python sympy

为什么积分_0 ^ 1 log(x)/(x ^ 2-1-1)dx在SymPy中不起作用?

  

AttributeError:“ Not”对象没有属性“ _eval_power”

http://www.ms.u-tokyo.ac.jp/kyoumu/a20170524.pdf#page=4

(确定) Wolfram | Alpha示例:

https://www.wolframalpha.com/input/?i=∫%5B0,1%5D + log(x)%2F(x%5E2-1)+ dx

integral_0 ^ 1 log(x)/(x ^ 2-1-1)dx =π^ 2/8?

1.2337

(??) sympy

from sympy import *
# var("x")
x = symbols('x', positive=True)
f=log(x)/(x^2-1)
print(integrate(f,(x, 0, 1)))
print(float(integrate(f,(x, 0, 1))))
# AttributeError: 'Not' object has no attribute '_eval_power'

2 个答案:

答案 0 :(得分:1)

在python中,电源符号不是^,而是**

使用此:

from sympy import *
# var("x")
x = symbols('x', positive=True)
f=log(x)/(x**2-1)
print(integrate(f,(x, 0, 1)))

结果:

Integral(log(x)/((x - 1)*(x + 1)), (x, 0, 1))

答案 1 :(得分:1)

f = log(x)/(x**2-1)是因为在Python中,幂由**表示(而^是XOR)。这就是引发错误的原因。但是,SymPy仍然无法集成该功能:积分收益未评估。这些多对数类型的非基本积分给SymPy带来了很多麻烦。

如果您对浮点答案没问题,请使用数值积分:

print(Integral(f,(x, 0, 1)).evalf())

返回1.23370055013617 ...

值得尝试使用此类积分的是nsimplify,它找到的符号答案与数值积分的结果不符。

>>> nsimplify(Integral(f, (x, 0, 1)), [pi, E])
pi**2/8

列表[pi, E]包含两个最著名的数学常数,它们很可能以整数形式出现。 (另一个经常显示的常量是EulerGamma。)