Интеграция в SymPy вызывает ошибку «без атрибута _eval_power» - PullRequest
0 голосов
/ 12 ноября 2018

Почему цельный_0 ^ 1 log (x) / (x ^ 2 - 1) dx не работает в SymPy?

AttributeError: у объекта «Не» нет атрибута «_eval_power»

http://www.ms.u -tokyo.ac.jp / kyoumu / a20170524.pdf # страница = 4

(OK) Wolfram | Alpha Примеры:

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

интеграл_0 ^ 1 log (x) / (x ^ 2 - 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 голосов
/ 12 ноября 2018

Запись 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).

0 голосов
/ 12 ноября 2018

В питоне символ власти не ^, а **.

Используйте это:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...