分類: 實用工具

SymPy:使用 Python 幫你導煩人的數學公式

符號(Symbol)與代數運算

SymPy 與其他的 CAS(Computer Algebra System)不同,在 SymPy 中所有的變數都要經過宣告才能使用:

>>> from sympy import Symbol
>>> x = Symbol('x')
>>> y = Symbol('y')

第二行是將 Python 變數 x 指定為 SymPy Symbol。

在 sympy.abc 中有預先定義一些 Symbol(包涵一些以希臘字母命名的 Symbol)。

>>> from sympy.abc import x, theta

若要建立多個 Symbol 可以使用 symbols 與 var 兩個函數,兩個函數作用相同,都可以接受 range notation,但 var 會自動將建立的 Symbol 加入命名空間(namespace)。

>>> from sympy import symbols, var
>>> a, b, c = symbols('a,b,c')
>>> d, e, f = symbols('d:f')
>>> var('g:h')
(g, h)
>>> var('g:2')
(g0, g1)

建立了 Symbol 之後,就可以使用它們進行代數運算了。

>>> x + y + x - y
2*x

>>> (x + y)**2
(x + y)**2

>>> ((x + y)**2).expand()
x**2 + 2*x*y + y**2

Symbol 亦可被替換為其他的 Symbol 或是數值。

>>> ((x + y)**2).subs(x, 1)
(y + 1)**2

>>> ((x + y)**2).subs(x, y)
4*y**2

>>> ((x + y)**2).subs(x, 1 - y)
1

apart(expr, x) 函數可以處理 partial fraction decomposition。

>>> from sympy import apart
>>> from sympy.abc import x, y, z
>>> 1/( (x + 2)*(x + 1) )
       1
---------------
(x + 1)*(x + 2)

>>> apart(1/( (x + 2)*(x + 1) ), x)
    1       1
- ----- + -----
  x + 2   x + 1

>>> (x + 1)/(x - 1)
x + 1
-----
x - 1

>>> apart((x + 1)/(x - 1), x)
      2
1 + -----
    x - 1

而 together(expr, x) 則與 apart 相反,將所有的項結合在一起。

>>> from sympy import together
>>> together(1/x + 1/y + 1/z)
x*y + x*z + y*z
---------------
     x*y*z

>>> together(apart((x + 1)/(x - 1), x), x)
x + 1
-----
x - 1

>>> together(apart(1/( (x + 2)*(x + 1) ), x), x)
       1
---------------
(x + 1)*(x + 2)

Page: 1 2 3 4 5

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang
標籤: 數學

Recent Posts

[DIY] 自製凡士林火種

這裡介紹如何利用簡單的凡士林與...

3 年 ago

[DIY] 自製火影木葉、砂忍者村標誌雕刻木牌

本篇記錄我用路邊撿來的樟木與龍...

3 年 ago

收集龍眼木修剪枝幹用於木頭工藝

最近打算帶著阿玄做一些木工作品...

3 年 ago

[DIY] 樟木手工自製迷你手裏劍(忍者武器)

本篇記錄阿玄第一次使用木工工具...

3 年 ago

[DIY] 龍眼木手工自製木槌

本篇記錄我用自己砍的龍眼木還有...

3 年 ago

[DIY] 樟木手工自製苦無(忍者武器)

本篇記錄我自己用樟木的枝幹,以...

3 年 ago