符號(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)
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
G. T. Wang
Thank you very much!