2015-10-02 5 views
0

Это выражение возвращает ноль, но не должно.
P = x^6-14x^4 + 49x^2-36
интегрировать (1/P, (x, 1/3, 1/2))
Я также использовал выражение для выражения без каких-либо результатов. Я делаю что-то неправильно или это ошибка?Неверный результат интеграции sympy

+0

Возможно, вы опустите x = символ ('x') – user1929959

+0

нет, вот полный код http://pastebin.com/3fakWGBA – Rob

+0

Получаю результат, численно эквивалентный математическому произведению. Знаете ли вы, что 1/3 и 1/2 оцениваются до нуля в Python 2.7? Вы должны создать фракцию S.One/3 или Rational (1, 3). То есть убедитесь, что перед символом разделения у вас есть объект SymPy. –

ответ

0

Это работает:

from sympy import * 

x = symbols('x') 
P = x**6-14*x**4+49*x**2-36 
I = integrate(1/expand(P), (x, S.One/3, S.One/2)) 

Я получаю результат:

In [5]: I 
Out[5]: -3*log(3)/80 - log(7)/48 - log(2)/48 - log(8)/240 + log(10)/240 + log(4)/48 + 3*log(5)/80 

In [6]: I.n() 
Out[6]: -0.00601350282195297 

В альтернативной, вы можете запустить команду isympy -i, это будет работать запрос SymPy, который преобразует все Python целые числа к целям SymPy до того, как вход будет оцениваться синтаксическим анализатором SymPy.

Целочисленное деление Python отличается между Python 2 и Python 3, первым возвращает и целое число, второе возвращает число с плавающей запятой. Обе версии отличаются от целочисленного деления SymPy, которое возвращает фракции. Чтобы использовать разделение SymPy, вам нужно убедиться, что по крайней мере один из дивидендов и делителей - это объекты SymPy.

+0

Ваш ответ правильный, я получил тот же результат в онлайн-компиляторе. Угадайте, что мой 2,7-питон действительно является источником проблем. Спасибо! – Rob

+0

Нет, Python 2.7 не проблема, просто он не был разработан вначале как система компьютерной алгебры или числовой язык. –