Python sympy无法成功处理类似“ f = 3.36 /(2.564549826 * s + 1)/ s + 5 /(2.2654984123 * s + 1)/ s”这样的表达式的拉普拉斯逆变换

时间:2019-05-20 07:33:35

标签: python-3.x sympy

我正在使用sympy对各种复杂表达式进行逆lapalce变换,它们通常以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 :(得分:0)

最好避免在sympy中使用Floats,但实际上在这里使用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