作者:王一哲 日期:2018/11/29
SymPy 是 Python 的符號運算套件,可以幫助我們計算函數的微分、積分,而且套件裡已經內建了常用的常數和函數,例如圓周率、尤拉常數、正弦函數。如果已經在電腦上安裝好 Python,接下來只要在文字介面中執行下的指令即可安裝 SymPy
如果是 Windows 的用戶,可以使用 Windows PowerShell(系統管理員) 替這部電腦所有的使用者安裝,如果是 Linux 的用戶,在執行指令時可能需要在最前面加上 sudo 暫時取得管理者權限。如果只想要試用看看,可以到 SymPy 的官方網站按右上角的 Online Shell 使用線上版的 SymPy Live。
如果想要引入 SymPy 函式庫,需要在程式碼的最上方加上
其中第一行是為了引入 SymPy 的除法型式,第二行才是引入 SymPy,兩行的順序不能顛倒,以下的例子會省略這兩行。
SymPy 的數字格式有 3 種:整數(Integer)、浮點數(Float)、有理數(Rational),其中有理數是以分數的型式顯示,例如
輸出的結果為
我們也可以把數字代入內建的函數中,輸出時會保留數學上的表達方式,如果要把數值計算出來,則要加上 evalf(),例如
程式碼為
輸出的結果為
我們也可以自訂函數,例如
程式碼為
我們用到以下的函式
輸出的結果為
我們也可以用 SymPy 解聯立方程式,使用的函式為 solve,語法為
以下列的二元一次聯立方程式為例
程式碼為
輸出為
如果要用 SymPy 計算微分,所用的函式為 diff,語法為
兩種寫法的效果相同,但我比較傾向使用第二種寫法,能夠一看就知道是對誰微分。以多項式函數的微分為例:
輸出為
如果以簡諧運動的位置 、速度 、加速度 為例:
程式碼的寫法如下
輸出為
如果要用 SymPy 計算積分,所用的函式為 integrate,語法為
以下以一些常見的函數為例:
程式碼為
輸出為
在倒數第2行的程式碼中,我們使用了 simplify(),用來化簡數學式子,但是在 Python Shell 中看不出效果,如果在 SymPy Live 中會將 -log(2) + log(3) 合併為 log(3 / 2)。還有一點,在SymPy 當中 。
接下來我們試著處理更複雜的函數,例如前一篇文章〈利用殼層定理推導電量均勻分布的球殼產生的電場〉當中的積分式
使用的程式碼如下
我們在積分指令最後加上 manual = True,可以將計算結果盡量顯示為人類手算積分的表達方式。另外在 E_in 這行最後加上 simplify() 將計算結果化簡,否則答案不會是0,會變成
這是最近幾天為了做符號運算找到的使用方法,只運用到 SymPy 一點點的功能而已,有興趣的同學可以再上網搜尋更多的教學及範例。
Python