Python (+ SymPy): Как получить тот же результат, что и в Mathematica? - PullRequest
0 голосов
/ 10 ноября 2018

Я рассчитал следующее, используя Mathematica и Python .

enter image description here

Mathematica со следующим кодом

f[x_] = a*b/(a - b)^2*Exp[-r*x] (Exp[-b*x] - Exp[-a*x]) (a*Exp[-b*x] - b*Exp[-a*x])
Assuming[{a > 0, b > 0, r > 0}, Integrate[f[x], {x, 0, \[Infinity]}]]

дает довольно хороший результат:

enter image description here

Но следующий код Python (с SymPy)

from sympy import *
init_printing()
x = symbols('x')
a, b, r = symbols('a b r', positive=True)
fun = a*b/((a-b)**2) * exp(-r*x) * (exp(-b*x) - exp(-a*x)) * (a*exp(-b*x) - b*exp(-a*x))
simplify(integrate(fun, (x, 0, oo)))

генерирует довольно грязный результат:

enter image description here

Чего мне не хватает в коде Python для получения того же результата в Mathematica? Или это вообще возможно?

1 Ответ

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

Функция cancel может использоваться для отмены дробей:

from sympy import *
init_printing()
x = symbols('x')
a, b, r = symbols('a b r', positive=True)
fun = a*b/((a-b)**2) * exp(-r*x) * (exp(-b*x) - exp(-a*x)) * (a*exp(-b*x) - b*exp(-a*x))
factor(cancel(integrate(fun, (x, 0, oo)))

дает

      a⋅b⋅(2⋅a + 2⋅b + r)
───────────────────────────────
(2⋅a + r)⋅(2⋅b + r)⋅(a + b + r)
...