Python sympy не может успешно обработать обратное преобразование Лапласа для выражений типа «f = 3.36 / (2.564549826 * s + 1) / s + 5 / (2.2654984123 * s + 1) / s» - PullRequest
0 голосов
/ 20 мая 2019

Я выполняю обратное преобразование Лапальса для различных сложных выражений с sympy, и они обычно заканчиваются на ValueError: gamma function pole. Что можно сделать, чтобы избежать такой ошибки и успешно достичь результата?

Я пытался разложить выражение с помощью функции sympy.apart и даже округленных коэффициентов в выражении, но все они не могут гарантировать успех кода.

from sympy import *

s = symbols('s')
w = symbols('w', real =True)
t = symbols('t', positive = True)

f = 3.36/(2.564549826*s+1)/s +  5/(2.2654984123*s+1)/s

print(print(inverse_laplace_transform(f,s,t=100).evalf()))

Информация об ошибке ValueError: gamma function pole

1 Ответ

0 голосов
/ 23 мая 2019

Лучше избегать использования Floats в sympy, но на самом деле использование Rational здесь означает, что интегральные зависания (занимают много времени).Если вместо этого вы используете символы, вы можете быстро получить ответ:

from sympy import *

s = symbols('s')
w = symbols('w', real =True)
t = symbols('t', positive = True)

a, b, c = symbols('a, b, c', real=True)

f = a/(b*s+1)/s +  5/(c*s+1)/s

pprint(f)
pprint(inverse_laplace_transform(f,s,t=100))

Это дает

     a             5     
─────────── + ───────────
s⋅(b⋅s + 1)   s⋅(c⋅s + 1)
       -100           -100 
       ─────          ─────
         b              c  
a - a⋅ℯ      + 5 - 5⋅ℯ     

Вы можете заменить, чтобы получить нужный ответ:

In [22]: ilt = inverse_laplace_transform(f,s,t=100)                                                                               

In [23]: ilt.subs({a: 3.36, b:2.564549826, c:2.2654984123})                                                                       
Out[23]: 8.36000000000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...