用 SymPy 的數學函數來做計算

SymPy 模組是 Python 程式裡一個功能很強大的數學計算模組,可以做符號運算得到公式解,也可以做數值運算得到數值解。從基本的數學計算,到求方程式的解,算微積分,都可以用 SymPy 內的函數來計算。

在使用 SymPy 時,必需在程式的開頭引入 sympy 模組:

from sympy import *

接下來,就可以使用 SymPy 的函數了。

SymPy 中常用的數學函數

分類 函數 描述 例子
基礎運算 simplify(expr) 簡化表達式 simplify(sin(x)**2 + cos(x)**2)1
expand(expr) 展開表達式 expand((x + 1)**2)x**2 + 2*x + 1
factor(expr) 因式分解表達式 factor(x**2 - 2*x - 8)(x - 4)*(x + 2)
代數 solveset(equation, var) 解方程式 solveset(x**2 - 4, x){-2, 2}
微積分 diff(expr, var) 對表達式進行微分 diff(sin(x), x)cos(x)
integrate(expr, var) 對表達式進行積分 integrate(exp(x), x)exp(x)
limit(expr, var, point) 計算表達式的極限 limit(sin(x)/x, x, 0)1
三角函數 sin(x), cos(x), tan(x) 三角函數 sin(pi / 2)1
asin(x), acos(x), atan(x) 反三角函數 asin(1)π/2
指數對數 exp(x) 指數函數 exp(1)E
log(x, base) 對數函數,base默認為 e log(e)1

在 SymPy 裡,圓周率 π 在 SymPy 裡是以 pi 來表示。自然對數的底數 e 是以 E 來表示。

在這裡,我們先介紹如何用 SymPy 內的函數來做三角函數,指數,和對數的計算。

例如,要計算 sin(30°),要以弧度 sin(π/6) 來計算:

sin(pi / 6)

\(\displaystyle \frac{1}{2}\)

我們看到 SymPy 內建是以分數來呈現計算的結果。

如果要以數值解來呈現,可以在要後面加上 .n(),就會以小數呈現數值解:

sin(pi / 6).n()

\(\displaystyle 0.5\)

這裡看到,它算出正確的值 0.5。而不是像在前一篇文章用 math 模組中算出的近似值 0.49999999999999994。

對數的用法,若沒有指定底數 (base),就會以自然對數的底數 e 來計算:

log(100).n()

\(\displaystyle 4.60517018598809\)

若要計算以 10 為底數的對數,可以輸入:

log(100, 10).n()

\(\displaystyle 2.0\)

指數可以用 Pow( ) 這個函數,例如要計算 2 的 3 次方:

Pow(2, 3)

\(\displaystyle 8\)

SymPy 的主要功能之一是可以做數學的符號運算,例如解方程式 \(x^2 + 3x - 2 = 0\)

# 先設未知數 x
x = Symbol("x")

# 計算方程式的解
solveset(x**2 + 3*x - 2, x)

\(\displaystyle \left\{- \frac{3}{2} + \frac{\sqrt{17}}{2}, - \frac{\sqrt{17}}{2} - \frac{3}{2}\right\}\)

如果要用數值解呈現上面的計算結果,可以用以下表示:

solveset(x**2 + 3*x - 2, x).n()

\(\displaystyle \left\{-3.56155281280883, 0.56155281280883\right\}\)

SymPy 的符號運算功能很豐富,也可以用來計算代數,微積分,和數學其它領域。對於用電腦做數學符號計算有興趣的讀者,可以更深入地學習 SymPy。

這個網誌中的熱門文章

在 Colab 筆記本裡呈現更美觀的數學式

醫學領域 ChatGPT 的 10 個提問範例

用 Colab AI 生成程式碼解數學方程式