我正在使用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
答案 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