程式設計師用SymPy

唐力偉發表於2020-10-25

程式設計師用SymPy

為什麼要用SymPy?

數學公式化簡、推理、因式分解。作為程式設計師還可以挖掘一下它啟發式推理的潛力。

怎樣安裝?

sympy只有一個依賴項就是mpmath,安裝命令如下,建議在python3環境下安裝。

pip3 install mpmath
pip3 install sympy

如果會用docker的話就更簡單了,只需要執行下面一條命令,然後根據日誌提示的token訪問本機的8888埠,IDE和執行環境就都好了。當然了下面這種方式如果您一點開發經驗都沒有,還是需要折騰一段時間的,要理解docker、python、jupyter等等。

docker run --name NB_Demo -d -p 8888:8888 jupyter/demo

怎樣使用?

一、列印數學公式

  • 列印為點陣圖方式
from sympy import *
x= symbols('x')
init_printing(use_unicode=True)
integrate(exp(x)*sin(x) + exp(x)*cos(x), x)

e x s i n ( x ) e^{x} sin(x) exsin(x)

  • 列印為ASCII碼
pprint(Integral(sqrt(1/x), x), use_unicode=False)
  /          
 |           
 |     ___   
 |    / 1    
 |   /  -  dx
 | \/   x    
 |           
/         
  • 列印為LaTeX
print(latex(Integral(sqrt(1/x), x)))
\int \sqrt{\frac{1}{x}}\, dx

二、因式合併與展開

  • 因式展開
from sympy import *
x, y, z = symbols('x y z')
init_printing(use_unicode=True)
expand((x+1)**2)

x 2 + 2 x + 1 x^{2} + 2 x + 1 x2+2x+1

  • 因式合併
factor(x**2*z + 4*x*y*z + 4*y**2*z)

z ( x + 2 y ) 2 z (x + 2 y)^{2} z(x+2y)2

  • 三角函式、矩陣都可以
# 展開三角函式
expand((cos(x) + sin(x))**2)

s i n 2 ( x ) + 2 s i n ( x ) c o s ( x ) + c o s 2 ( x ) sin^{2}{(x)} + 2sin{(x)} cos{(x)} + cos^{2}{(x)} sin2(x)+2sin(x)cos(x)+cos2(x)

# 因式合併三角函式
factor(cos(x)**2 + 2*cos(x)*sin(x) + sin(x)**2)

( s i n ( x ) + c o s ( x ) ) 2 ({sin(x)} +cos{(x)})^{2} (sin(x)+cos(x))2

三、求解

solveset(Eq(x**2, 1), x)

x 2 = 1 ( x = 1 , x = − 1 ) x^{2}=1 (x=1, x=-1) x2=1(x=1,x=1)

四、矩陣運算

由於顯示不出來效果這裡略過

總結

非常感興趣SymPy符號推理的部分,看官方文件說用的啟發式演算法。有機會深究一下其實現機理。

相關文章