本文是為了紀錄如何使用Python函式庫SymPy作部分分式的運算
什麼是部分分式?
部分分式(partial fraction)通常是用來計算反拉氏轉換時會用到計算技巧,例如假設有一個s域函數F(s)如下:
經過「部份分式」運算之後會變成,
以利於作後續的反拉氏轉換。
所以部份分式的主要課題就是如何把A和B計算出來。
在說明如何計算之前,我們先來看看怎麼樣的函數可以作部份分式。
同樣假設有一個F(s)函數
其中,N(s)和D(s)代表s域的多項式(註:分子的英文是numerator,所以開頭以N代表;而分母的英文是denominator,開頭就以D代表)。
如果N(s)的次數小於D(s)的次數,稱F(s)為嚴格真分有理函數。能夠作部份分式的函數必須為嚴格真分有理函數。
但總是會遇到函數不是上述的情況,如果是N(s)的次數大於或等於D(s)的話,通常可以用長除法解決。
例如下面函數:
其中,N(s)次數為3(因為第一項s3為3次方)、D(s)次數為2(因為第一項s2為2次方),F(s)就不是嚴格真分有理函數。
用手計算的方法
我們回來看看上面的例子:
1. 解聯立方程式:
上式通分後:
然後,因為
所以解聯立方程式得到:A=-1、B=2
2. 代入根算法:
大概一般人都不會用上面慢的算法,會是用代入根的方式來求解:
求A的時候,s帶入-2:
求B的時候,s帶入-3:
用SymPy計算的方法
看過了如何用手計算的方法後,比上面的例子複雜的情況很多(例如重根、共軛複根等),利用代入根算法並搭配解聯立方程式求解,已經可以解出大部分教科書的習題。
運用Python的SymPy函式庫,除了解習題時作驗算以外,比習題更加複雜的情況,都可以使用電腦幫忙求解。
還沒安裝Python或者SymPy的朋友,可以看一下此篇文章,先做好準備。
安裝好的朋友,可直接打開終端機,輸入python後開始進行:
先匯入sympy模組:
>>> from sympy import *
再來定義代數s:
>>> from sympy.abc import s
輸入上面的簡單例子:
>>> f = (s+1)/((s+2)*(s+3))
在SymPy內,部分分式的方法叫做apart(),利用該方法即可求解:
>>> apart(f)
得出答案為:
>>> 2/(s + 3) — 1/(s + 2)
單根的情況看完了,我們來試試重根和共軛複根的情況:
>>> f = (s+5)/((s+2)**2*(s**2+4*s+5))
f看起來有點複雜,也可以用下列指令讓函數看起來比較舒服一點:
>>> init_printing(use_unicode=True)
確認輸入沒錯之後,求部分分式:
>>> apart(f)-(s + 5)/(s**2 + 4*s + 5) + 1/(s + 2) + 3/(s + 2)**2
這邊先簡單的說明到此為止,如果意猶未盡,可以看一下SymPy官方教學文件(https://docs.sympy.org/latest/tutorial/simplification.html),除了說明部分分式以外,還有因式分解、三角函數簡化等等的強大功能,很值得參考研究哦。