Получение лучшего ответа от обратного преобразования Лапласа sympy

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

from sympy import *
s = symbols("s")
t = symbols("t")
h = 1/(s**3 + s**2/5 + s)
inverse_laplace_transform(h,s,t)

Результат следующий:

(-(I*exp(-t/10)*sin(3*sqrt(11)*t/10) - exp(-t/10)*cos(3*sqrt(11)*t/10))*gamma(-3*sqrt(11)*I/5)*gamma(-1/10 - 3*sqrt(11)*I/10)/(gamma(9/10 - 3*sqrt(11)*I/10)*gamma(1 - 3*sqrt(11)*I/5)) + (I*exp(-t/10)*sin(3*sqrt(11)*t/10) + exp(-t/10)*cos(3*sqrt(11)*t/10))*gamma(3*sqrt(11)*I/5)*gamma(-1/10 + 3*sqrt(11)*I/10)/(gamma(9/10 + 3*sqrt(11)*I/10)*gamma(1 + 3*sqrt(11)*I/5)) + gamma(1/10 - 3*sqrt(11)*I/10)*gamma(1/10 + 3*sqrt(11)*I/10)/(gamma(11/10 - 3*sqrt(11)*I/10)*gamma(11/10 + 3*sqrt(11)*I/10)))*Heaviside(t)

Однако ответ должен быть проще, Wolframalpha доказывает это.

Есть ли способ упростить этот результат?


person tul1    schedule 10.09.2015    source источник
comment
Учитывая, что sympy не так развит, как WolframAlpha, неудивительно, что его ответ не так прост.   -  person thecircus    schedule 11.09.2015


Ответы (1)


Я немного попробовал это, и я мог найти более простое решение, используя что-то вроде:

from sympy import *
s = symbols("s")
t = symbols("t", positive=True)
h = 1/(s**3 + s**2/5 + s)
inverse_laplace_transform(h,s,t).evalf().simplify()

Обратите внимание, что я определяю t как положительную переменную, иначе функция sympy возвращает большой член, за которым следует функция Хевиасайда. Результат по-прежнему содержит множество гамма-функций, которые я не смог свести к выражению, возвращаемому Wolfram. С помощью evalf() некоторые из них преобразуются в числовые значения, а затем после упрощения вы получаете выражение, похожее на выражение в Wolfram, но с плавающими числами.

К сожалению, эта часть Sympy не совсем зрелая. Я также пробовал с Maxima, и результат очень близок к тому, что в Wolfram. Так что кажется, что Вольфрам не делает там ничего особенного.

person jfosoriot    schedule 10.09.2015