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)
實用工具

2 留言

  1. Allen

    There is a typo in the first command of linux, which is

    sudo apt-get instlal python-sympy

    The following should be the right one

    sudo apt-get install python-sympy

Comments are Closed