微積分(Calculus)
SymPy 也可以用於微積分的計算,這裡介紹在微積分中常用的運算。
SymPy 提供了ㄧ個 limit(function, variable, point) 函數可以計算函數的極限值。下面的這個指令可以計算 sin(x) 函數在 x 趨近於零的極限值。
>>> from sympy import limit, Symbol, sin, oo >>> x = Symbol('x') >>> limit(sin(x)/x, x, 0) 1
亦可計算無限大的極限值:
>>> limit(x, x, oo) oo >>> limit(1/x, x, oo) 0 >>> limit(x**x, x, 0) 1
再舉一個更複雜的例子:
>>> limit((1+1/x)**x, x, oo) E >>> limit((x**3-1)/(x**2-1), x, 1) 3/2 >>> limit(E**x/(1-x**3), x, 0) 1
這裡的 E 就是數學上的尤拉常數。
diff(func, var) 這個函數可以計算微分(differentiation):
>>> from sympy import diff, Symbol, sin, tan >>> x = Symbol('x') >>> diff(sin(x), x) cos(x) >>> diff(sin(2*x), x) 2*cos(2*x) >>> diff(tan(x), x) 2 tan (x) + 1
我們可以用下面的指令確認這個答案是正確的:
>>> from sympy import limit >>> from sympy.abc import delta >>> limit((tan(x + delta) - tan(x))/delta, delta, 0) 2 tan (x) + 1
更高階的微分可以使用 diff(func, var, n):
>>> diff(sin(2*x), x, 1) 2*cos(2*x) >>> diff(sin(2*x), x, 2) -4*sin(2*x) >>> diff(sin(2*x), x, 3) -8*cos(2*x)
SymPy 的 Symbol 可以用 .series(var, point, order) 轉成泰勒展開式(Taylor series):
>>> from sympy import Symbol, cos >>> x = Symbol('x') >>> cos(x).series(x, 0, 10) 2 4 6 8 x x x x / 10 1 - -- + -- - --- + ----- + Ox / 2 24 720 40320 >>> (1/cos(x)).series(x, 0, 10) 2 4 6 8 x 5*x 61*x 277*x / 10 1 + -- + ---- + ----- + ------ + Ox / 2 24 720 8064
另外一個例子:
>>> from sympy import Integral, pprint >>> y = Symbol("y") >>> e = 1/(x + y) >>> s = e.series(x, 0, 5) >>> print(s) 1/y - x/y**2 + x**2/y**3 - x**3/y**4 + x**4/y**5 + O(x**5) >>> pprint(s) 2 3 4 1 x x x x / 5 - - -- + -- - -- + -- + Ox / y 2 3 4 5 y y y y
summation(f, (i, a, b)) 這個函數可以計算 f 函數從 a 到 b 的加總,也就是下面這個
summation 函數如果沒辦法計算出總和,就會顯示原本的加總公式。下面是一些範例:
>>> from sympy import summation, oo, symbols, log >>> i, n, m = symbols('i n m', integer=True) >>> summation(2*i - 1, (i, 1, n)) 2 n >>> summation(1/2**i, (i, 0, oo)) 2 >>> summation(1/log(n)**n, (n, 2, oo)) oo ___ ` -n / log (n) /__, n = 2 >>> summation(i, (i, 0, n), (n, 0, m)) 3 2 m m m -- + -- + - 6 2 3 >>> from sympy.abc import x >>> from sympy import factorial >>> summation(x**n/factorial(n), (n, 0, oo)) x e
在積分方面,SymPy 支援定積分(definite integration)與不定積分(indefinite integration),而積分的計算是使用 integrate() 函數。
>>> from sympy import integrate, erf, exp, sin, log, oo, pi, sinh, symbols >>> x, y = symbols('x,y') >>> integrate(6*x**5, x) 6 x >>> integrate(sin(x), x) -cos(x) >>> integrate(log(x), x) x*log(x) - x >>> integrate(2*x + sinh(x), x) 2 x + cosh(x)
更複雜的例子:
>>> integrate(exp(-x**2)*erf(x), x)
____ 2
/ pi *erf (x)
--------------
4
計算定積分:
>>> integrate(x**3, (x, -1, 1)) 0 >>> integrate(sin(x), (x, 0, pi/2)) 1 >>> integrate(cos(x), (x, -pi/2, pi/2)) 2
瑕積分(improper integral)也同樣支援:
>>> integrate(exp(-x), (x, 0, oo)) 1 >>> integrate(log(x), (x, 0, 1)) -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
G. T. Wang
Thank you very much!