SymPy學習之Calculus

>> from sympy import *
>>> x, y, z = symbols('x y z')
>>> init_printing(use_unicode=True)
Derivatives
#導數
>>> diff(cos(x), x)
-sin(x)
>>> diff(exp(x**2), x)
     ⎛ 2⎞
     ⎝x ⎠
2⋅x⋅ℯ
#多次求導
>>> diff(x**4, x, x, x)
24⋅x
>>> diff(x**4, x, 3)
24⋅x
#對多個變量求導
>>> expr = exp(x*y*z)
>>> diff(expr, x, y, y, z, z, z, z)
 3 2 ⎛ 3 3 3 2 2 2 ⎞ x⋅y⋅z
x ⋅y ⋅⎝x ⋅y ⋅z + 14⋅x ⋅y ⋅z + 52⋅x⋅y⋅z + 48⎠⋅ℯ
>>> diff(expr, x, y, 2, z, 4)
 3 2 ⎛ 3 3 3 2 2 2 ⎞ x⋅y⋅z
x ⋅y ⋅⎝x ⋅y ⋅z + 14⋅x ⋅y ⋅z + 52⋅x⋅y⋅z + 48⎠⋅ℯ
>>> diff(expr, x, y, y, z, 4)
 3 2 ⎛ 3 3 3 2 2 2 ⎞ x⋅y⋅z
x ⋅y ⋅⎝x ⋅y ⋅z + 14⋅x ⋅y ⋅z + 52⋅x⋅y⋅z + 48⎠⋅ℯ
#以方法的形式調用
>>> expr.diff(x, y, y, z, 4)
 3 2 ⎛ 3 3 3 2 2 2 ⎞ x⋅y⋅z
x ⋅y ⋅⎝x ⋅y ⋅z + 14⋅x ⋅y ⋅z + 52⋅x⋅y⋅z + 48⎠⋅ℯ
#未計算的導數
>>> deriv = Derivative(expr, x, y, y, z, 4)
>>> deriv
  7
 d        / x*y*z\
----------\e     /
  4  2
dz dy dx
#對未計算的導數進行求導
>>> deriv.doit()
 3  2 / 3  3  3      2  2  2               \  x*y*z
x *y *\x *y *z + 14*x *y *z + 52*x*y*z + 48/*e
Integrals
#不定積分
>>> integrate(cos(x), x)
sin(x)
#定積分
>>> integrate(exp(-x), (x, 0, oo))
1
#雙重積分
>>> integrate(exp(-x**2 - y**2), (x, -oo, oo), (y, -oo, oo))
π
#創建未積分的表達式並對其積分
>>> expr = Integral(log(x)**2, x)
>>> expr
⌠
⎮    2
⎮ log (x) dx
⌡
>>> expr.doit()
        2
x⋅log (x) - 2⋅x⋅log(x) + 2⋅x
Limits
#極限
>>> limit(sin(x)/x, x, 0)
1
#limit和subs的區別
>>> expr = x**2/exp(x)
>>> expr.subs(x, oo)
nan
>>> limit(expr, x, oo)
0
#創建未求極限表達式並計算
>>> expr = Limit((cos(x) - 1)/x, x, 0)
>>> expr
           cos(x) - 1
 lim   ──────────
x─→0⁺         x
>>> expr.doit()
0
#左側極限 & 右側極限
>>> limit(1/x, x, 0, '+')
∞
>>> limit(1/x, x, 0, '-')
-∞
Series Expansion
#級數展開
>>> expr = exp(sin(x))
>>> expr.series(x, 0, 4)
         2
        x     / 4\
1 + x + -- + O\x /
        2
#大O記號
>>> x + x**3 + x**6 + O(x**4)
 3       / 4\
x + x + O\x /
>>> x*O(1)
O(x)
#移除大O記號
>>> expr.series(x, 0, 4).removeO()
 2
x
── + x + 1
2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章