SymPy 是 Python 裡用來計算數學符號運算的函式庫。這裡我們使用 SymPy 內的三角函數來計算。
首先在 IPython console 內匯入 SymPy 內需要的函數和資料:
In [1]: from sympy import *
匯入後,在 Spyder 右上方的視窗,點選 Variable explorer,就會看到目前使用的變數。其中 pi 代表圓周率,E 代表自然底數。在 SymPy 裡,可以用 N(expr)
來計算式子或變數的數值解。我們可以輸出 pi 和 E 的值:
In [2]: N(pi) Out[2]: 3.14159265358979 In [3]: N(E) Out[3]: 2.71828182845905
在匯入 sympy 之後,我們就可以使用 SymPy 裡常用的數學函數。其中三角函數是以 sin(x), cos(x), tan(x) 來表示。注意三角函數的運算,變數 x 是以弧度 (radian),而不是角度 (degree)。1 弧度的定義是圓弧長度等於半徑時的圓心角。弧度是實數,通常沒有單位,有時也會用 rad 來表示。一個圓的角度 360° (degree) 相當於弧度 2π (radian)。半個圓 180° 相當於 π。30° 就是 π/6。依此類推。
在 IPython console 內輸入一些例子:
In [2]: sin(pi / 6) Out[2]: 1/2 In [3]: sin(pi / 3) Out[3]: sqrt(3)/2 In [4]: sin(pi / 4) Out[4]: sqrt(2)/2 In [5]: sin(0) Out[5]: 0 In [6]: sin(1.75) Out[6]: 0.983985946873937 In [7]: sin(pi / 7) Out[7]: sin(pi/7)
我們看到在 SymPy 裡,系統會先嘗試用確定的值或公式解表示。若不能,則以數值答案來表示。在第 7 例中,系統直接回傳輸入的式子。此時,我們如果要計算出數值答案,可以用 N(expr)
來求出近似的數值解。也可以用 (expr).evalf()
來表示,求出近似的數值解。例如:
In [18]: N(sin(pi / 7)) Out[18]: 0.433883739117558 In [19]: sin(pi / 7).evalf() Out[19]: 0.433883739117558 In [20]: N(sin(pi / 6)) Out[20]: 0.500000000000000 In [21]: N(sin(pi / 3)) Out[21]: 0.866025403784439 In [22]: N(sin(pi / 2)) Out[22]: 1.00000000000000 In [23]: N(sin(0)) Out[23]: 0
以下試算 cos(x) 的例子:
In [7]: cos(pi / 6) Out[7]: sqrt(3)/2 In [8]: cos(pi / 3) Out[8]: 1/2 In [9]: cos(pi / 4) Out[9]: sqrt(2)/2 In [10]: cos(pi / 2) Out[10]: 0 In [11]: cos(0.68) Out[11]: 0.777572718750928 In [12]: N(cos(pi / 6)) Out[12]: 0.866025403784439 In [13]: N(cos(pi / 3)) Out[13]: 0.500000000000000
tan(x) 函數也可計算,但注意在 x 等於 π/2 或 – π/2 是沒有定義的,tan(x) 分別會是正無限大和負無限大,此時計算結果會輸出 zoo。
In [12]: tan(pi / 6) Out[12]: sqrt(3)/3 In [13]: tan(pi / 3) Out[13]: sqrt(3) In [14]: tan(pi / 9) Out[14]: tan(pi/9) In [15]: tan(pi / 4) Out[15]: 1 In [29]: tan(pi / 2) Out[29]: zoo In [30]: tan(-pi / 2) Out[30]: zoo In [31]: N(tan(pi / 9)) Out[31]: 0.363970234266202
解三角函數的方程式
我們試著解三角函數的方程式。例如,求 的解。先匯入求一元方程式所需的函式庫後,也可用 solveset() 這個函數來計算。
In [5]: solveset(sin(x) + 0.7, x) Out[5]:
後記:之前我曾寫了一篇用 math
函式庫裡的三角函數計算的文章,當時數值計算的結果時常會出現近似值,令人心裡略感不安。這裡用 SymPy 的三角函數計算,就傳回較正確的值或數值解。看來用 SymPy 來計算,會比較安心。
關於 SymPy 的安裝:使用前必需確認系統裡有安裝 SymPy。在 Ubuntu 系統下,可以在終端機下輸入以下指令查看目前安裝的版本:$ sudo dpkg -l | grep sympy
在我的電腦裡,得到 sympy 1.5.1 的回應。
如果還沒安裝,可用以下指令安裝。$ sudo apt install python3-sympy
參考閱讀:
https://docs.sympy.org/latest/modules/functions/index.html