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)
繼續閱讀:
SymPy -- 使用 Python 幫你導煩人的數學公式(一)
SymPy -- 使用 Python 幫你導煩人的數學公式(二)
SymPy -- 使用 Python 幫你導煩人的數學公式(三)
SymPy -- 使用 Python 幫你導煩人的數學公式(四)
SymPy -- 使用 Python 幫你導煩人的數學公式(五)
沒有留言:
張貼留言