2015-09-10 39 views
2

試圖計算下面的行我得到了一個真正複雜的結果。從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證明了這一點。

有什麼辦法可以簡化這個結果嗎?

+0

鑑於sympy不像WolframAlpha那樣發達,所以它的答案並不簡單。 – thecircus

回答

2

我嘗試了一下這一個和我能找到一個簡單的解決方案的方法是使用類似:

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函數返回一個大項接着是Heaviaside功能。結果仍然包含許多伽馬函數,我無法減少到Wolfram返回的表達式。使用evalf()將其中的一些轉換爲它們的數值,然後在簡化後得到類似於Wolfram中的表達式,但具有浮點數的表達式。

不幸的是Sympy的這部分還不是很成熟。我也用Maxima嘗試過,結果與Wolfram中的非常接近。所以看起來Wolfram在那裏沒有做任何特別的事情。