【控制系統1-1】利用SymPy作拉氏轉換代數運算

Len Hou
4 min readMay 24, 2019

--

本文是為了紀錄如何使用Python函式庫SymPy作基本輸入函數的拉氏轉換

Photo by Erol Ahmed on Unsplash

在大學裡學習工程數學或者控制系統時,常常會使用到拉氏轉換,特別是用拉氏轉換解微分方程式或者是用來描述一個線性系統。在控制領域方面,更是常用的一個數學工具。

之前,我都是使用MATLAB來作symbolic運算,教科書也是用MATLAB來作為範例或習題,但是自從離開學校後,就沒有MATLAB可以使用了,後來也接觸到Linux作業系統,自然地開始尋找有沒有替代MATLAB的方案,作為我未來研究的工具,而就拐了個彎找到了Python下的SymPy函式庫。

SymPy函式庫不僅可以作拉氏轉換的代數運算,其實一般微積分等的代數運算也都可以使用。簡單來說,就是可以用代數的形式而不是數值,來協助我們求出解答。本文僅說明基本輸入函數拉氏轉換的作法和結果,有興趣的朋友可以參考SymPy的網站https://docs.sympy.org/0.7.2/tutorial.html,網站內對於函式庫的功能有更詳細的學習資源。

安裝SymPy

好了,已經有安裝Python的朋友,可以馬上來安裝SymPy。

接下來,輸入以下指令,就可以安裝好SymPy了。

$ sudo apt-get install python-sympy

如果沒有安裝Python,使用Ubuntu作業系統的朋友,可以在終端機輸入下列指令來安裝Python:

$ sudo apt-get update
$ sudo apt-get install python

如果安裝好了Python,在終端機輸入python,應該就可以進入直譯器模式,要離開python的話,直接按下Ctrl+D就可以回到終端機,再以上面的指令接續安裝SymPy即可。

基本輸入函數:

如果要使用SymPy作拉氏轉換,就必須要從SymPy的sympy.integrals模組匯入laplace_transform方法:

>>> from sympy.integrals import laplace_transform

接下來,從SymPy匯入基本代數函數:

>>> from sympy import exp, sin, cos, DiracDelta, Heaviside

其中,exp代表以常數e為底數的自然對數,sin表示正弦函數,cos表示餘弦函數,DiracDelta代表單位脈衝函數,最後,Heaviside代表單位步階函數。

除此之外,我們還要從sympy.abc模組匯入函數的代數:

>>> from sympy.abc import t, s, a, w

如果上面的工作都準備好了,我們就可以簡單的利用laplace_transform方法來計算所有基本輸入函數的拉氏轉換囉~

例如要計算sin(wt)的拉氏轉換,則可輸入下列程式碼:

>>> laplace_transform(sin(w*t), t, s)

輸出的結果就會是:

(w/(s**2 + w**2), 0, Eq(2*Abs(arg(w)), 0))

利用laplace_transform方法輸出的結果是tuple結構,會一併顯示收斂區間,如果不須要知道收斂區間,那其實只要改為輸入下列程式碼,就可以僅顯示函數的拉氏轉換了。

>>> laplace_transform(sin(w*t), t, s)[0]

控制系統常用基本輸入函數的時域函數和s域函數整理如下表,並依照下列SymPy指令輸入,則可以得到對應的輸出結果。

--

--

Len Hou

I am a PhD student in Taiwan studying control system, offshore wind energy and mechatronics. Here is the place for sharing my learning notes.