SymPy 是一個可以進行數學代數運算的 Python 模組,他的發展目標是一個完整的電腦代數系統,而此模組完全都是使用 Python 寫成的,所以不需要依賴其他的函式庫。
在 Ubuntu 或 Debian Linux 中若要安裝 SymPy,可以直接使用 apt 安裝:
sudo apt-get install python-sympy
裝完之後,接著就可以執行 Python 了:
python
進入 Python 的互動式模式(interactive mode)之後,就會看到三個大於符號(>>>),這就是 Python 的主要命令提示字元(primary prompt)。
如果是只要使用 SymPy 的功能,可以使用 isympy 這個指令,這是專門為了 SymPy 而設計的互動式介面,其實跟 Python 的互動式環境一樣,但是 isympy 會在一開始設定一些基本的變數與環境,讓使用起來更方便。
藍色的 In 就是輸入指令的地方,輸出則是紅色的 Out,後面中括弧中的數字是自動編上去的行號。
如果不想那麼麻煩安裝 SymPy,也可以直接使用 SymPy Live,直接在網頁上運行 SymPy,其實更方便,開啓網頁後,左下方就可以直接輸入 Python 指令了。
而 SymPy Live 的環境就跟上面的 isympy 差不多,一開始就會把一些基本的變數與環境設定好。這種線上版本的排版比一般終端機還要漂亮,我們在這裡執行相同的指令,與上面的 isympy 比較一下。
因為 SymPy Live 是用 MathJax 來顯示數學式子的,所以看起來很漂亮,幾乎跟 LaTeX 的排版差不多。若是沒什麼特別需求,用這個就很棒了,省去安裝的麻煩。
接著就可以輸入 Python 指令了,在使用之前要先載入 sympy 這個 Python 模組,輸入:
>>> from sympy import *
輸入完這行指令之後,記得按下 Enter 鍵,正常的話應該沒有什麼訊息出現。這個指令是將 sympy 中所有的東西都載入進來,如果一開始執行了這行指令,之後所有的 import 步驟都可以省略,而如果不想一次載入所有的東西也可以,那就按照下面的 import 作法,需要使用時才載入。
接著就可以來使用 SymPy 了,首先來介紹一些基本的使用方式。在 SymPy 中的數值分為三種類型,分別為浮點數(Float)、有理數(Rational)與整數(Integer)。有理數是由兩個整數相除所得到的數值,例如 Rational(1, 2) 則代表 1/2:
>>> from sympy import Rational >>> a = Rational(1, 2) >>> a 1/2 >>> a*2 1 >>> Rational(2)**50/Rational(10)**50 1/88817841970012523233890533447265625
在使用浮點數與整數運算時(尤其是除法)要注意所使用的數值是 SymPy 數值或是原生的 Python 數值,若是使用一般原生的 Python 數值,相除的結果會是浮點數,若在 isympy 中則會使用 __future__ 中的 division 進行除法運算。
>>> 1/2
0.5
若是在舊版的 Python 2 中,division 沒有被 import,則結果會被 truncated:
>>> 1/2
0
這兩種狀況都是使用 Python 原生的數值,不是 SymPy 數值,在大部分的狀況下,在使用 SymPy 時都會使用 SymPy 數值,所以其實可以使用這樣的方式簡化程式碼:
>>> R = Rational >>> R(1, 2) 1/2 >>> R(1)/2 1/2
最後一個指令中 R(1) 會得到一個 Rational 數值,再除以原生的 Python 數值 2,得到的結果也是一個 Rational 數值。
在數學上有一些常數,例如圓周率(pi)與尤拉常數(e),在 SymPy 中也有支援,在運算時他會以符號的方式進行運算,也就是說 1 + pi 不會計算成浮點數 4.14,而會保持 1 + pi 這個形式,若是要算出實際的浮點數,可以使用 evalf() 這個函數。
>>> from sympy import pi, E >>> pi**2 pi**2 >>> pi.evalf() 3.14159265358979 >>> (pi + E).evalf() 5.85987448204884
數學上的無限大(infinity)在 SymPy 中也有,表示方式為兩個 o
(看起來就像是無限大的寫法)。
>>> from sympy import oo >>> oo oo >>> oo + 1 oo