为什么积分_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'
答案 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
。)