Как интегрировать выражения с sympy? - PullRequest
0 голосов
/ 22 февраля 2020

У меня проблема с интеграцией выражения:

Мне нужно интегрировать все термины независимо от переменной,

выражение: -x + 2 * (x - 1)

Ожидаемый результат: -x ** 2/2 + 2 * ((x - 1) ** 2) / 2

код, который я использую:

from sympy import *

x = symbols('x')

expr = - x + factor(2 * (x - 1))
int_1 = integrate(expr)
print(int_1)

сгенерированный результат: x ** 2/2 - 2 * x

Я python новичок ...

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

Если вы проверите свой результат, вы обнаружите, что он совпадает с исходным уравнением, поэтому ответ правильный:

>>> eq = -x + factor(2 * (x - 1))
>>> integrate(eq).diff()
x - 2
>>> eq.expand()
x - 2

Это означает, что полученный вами результат отличается от ожидаемого результата на постоянную и такие случаи считаются правильными с точки зрения неопределенной интеграции.

Похоже, вы уже узнали об автоматическом расширении (таким образом, использование factor для предотвращения распределения 2). Однако вы можете не осознавать, что после того, как вы передаете выражение подпрограмме, вам не нужно сохранять выражение в факторизованной форме. Похоже, вы ожидали, что x - 1 будет рассматриваться как x. Мы можем смоделировать это как

>>> integrate(-x)+integrate(2*y).subs(y,x-1)
-x**2/2 + (x - 1)**2

Использование y для представления x - 1 нормально в этом случае, так как результаты отличаются только на константу:

>>> (integrate(x-1) - integrate(y).subs(y ,x-1)).is_constant()
True

Это не будет, однако, быть верным для всех функций x.

0 голосов
/ 22 февраля 2020

Проблема в том, что вы не прошли никаких пределов интеграции (от и до), поэтому единственным возможным ответом была интегрированная формула.

Если, например, вы хотите интегрировать от 0 до inf, вы вместо этого нужно передать

from sympy import *

x = symbols('x')

expr = - x + factor(2 * (x - 1))
int_1 = integrate(expr, (x,0, float('inf')))
print(int_1)

заменить 0 и / или с плавающей запятой ('inf') на любые числа, которые вы хотите оценить.

...