5.4Python數據處理篇之Sympy系列(四)---微積分


目錄

前言

今天講的是,有關sympy的微積分部分的知識。

對應官網的知識:Calculus

官網教程

https://docs.sympy.org/latest/tutorial/calculus.html

(一)求導數-diff()

1.一階求導-diff()

(1)說明:

語法是:diff(expr,x)

(2)源代碼:

from sympy import *


# 初始化
x = symbols('x')

# 表達式
expr1 = cos(x)

expr2 = exp(x**2)


# 求導
r1 = diff(expr1, x)
r2 = diff(expr2, x)


print("r1:", r1)
print("r2:", r2)

(3)輸出:

\(\cos(x)\) --> \(-\sin(x)\)

\(e^{x^2}\) --> \(2xe^{x^2}\)

01.png

2.多階求導-diff()

(1)說明:

多階求導同樣的使用diff(),其有兩種形式

  1. 帶參數中,添加幾個x,就是對x的幾次求導。diff(expr, x, x,x……)
  2. 用數字來控制所求的階數:diff(expr, x, n)

(2)源代碼:

from sympy import *


# 初始化
x = symbols('x')

# 表達式
expr1 = x**4


# 第一種形式多階求導
r1 = diff(expr1, x)
r2 = diff(expr1, x, x)
r3 = diff(expr1, x, x, x)

print("="*30)
print(r1)
print(r2)
print(r3)

# 第二種形式多階求導
r4 = diff(expr1, x, 1)
r5 = diff(expr1, x, 2)
r6 = diff(expr1, x, 3)

print("="*30)
print(r4)
print(r5)
print(r6)

(3)輸出:

\(x^4\) --> \(24x\)

02.png

3.求偏導數-diff()

(1)說明:

diff()也可以單獨對一個變量求導,這便是偏導數。

(2)源代碼:

from sympy import *


# 初始化
x, y, z = symbols('x y z')

# 表達式
expr1 = exp(x*y*z)

# 求導
r1 = diff(expr1, x, y, y, z, z, z, z)
r2 = diff(expr1, x, 1, y, 2, z, 4)

print("r1:", r1)
print("r2:", r2)

print(latex(r1))
print(latex(r2))

(3)輸出:

\(e^{xyz}\) --> \(x^{3} y^{2} \left(x^{3} y^{3} z^{3} + 14 x^{2} y^{2} z^{2} + 52 x y z + 48\right) e^{x y z}\)

03.png

(二)求積分-integrate()

(1)說明:

求積分有三種形式,並且都用的是integrate()方法

  1. 求不定積分:integrate(expr, var)
  2. 求定積分:integrate(expr, (var, min, max))
  3. 求多重積分:integrate(expr, (var1, min, max),(var2,min,max))

(2)源代碼:

from sympy import *


# 初始化
x, y = symbols('x y')

# 表達式
expr1 = cos(x)
expr2 = exp(-x)
expr3 = exp(-x**2-y**2)

# 求不定積分
r1 = integrate(expr1, x)

# 求定積分
r2 = integrate(expr2, (x, 0, oo))

# 求多重積分
r3 = integrate(expr3, (x, -oo, oo), (y, -oo, oo))

print("r1:", r1)
print("r2:", r2)
print("r3:", r3)

(3)輸出:

\(\cos{\left (x \right )}\)-->\(\sin{\left (x \right )}\)

\(\int_{0}^\infty{e^{- x}dx}​\)-->\(1​\)

\(\int_{-\infty}^\infty \int_{-\infty}^\infty e^{- x^{2} - y^{2}}dxdy\)-->\(\pi\)

04.png

(三)求極限-limit()

(1)說明:

求極限使用limit(),其有下兩種使用方法:

  1. 趨進某個點的極限:limit(expr, var, doit)
  2. 從側邊趨進某個值的極限:limit(expr, var,doit, "+") (左側趨進同理)

注:sympy里,不可以使用無窮的趨進。

(2)源代碼:

from sympy import *


# 初始化
x = symbols('x')

# 表達式
expr1 = sin(x)/x
expr2 = 1/x

# 求趨於某個值的極限
r1 = limit(expr1, x, 0)

# 正向趨進
r2 = limit(expr2, x, 0, '+')

# 負向趨進
r3 = limit(expr2, x, 0, '-')

print(r1)
print(r2)
print(r3)

(3)輸出:

\(\lim_{x \to 0}\sin(x)/x\)-->\(1\)

\(\lim_{x \to 0^+}​\)-->\(\infty​\)

\(\lim_{x \to 0^-}\)-->\(-\infty​\)

05.png

(四)級數展開-series()

1.說明:

級數展開請使用:series(expr, x0, xn),使用.removeO()去除尾數。

2.源代碼:

from sympy import *


# 初始化
x = symbols('x')

# 表達式
expr1 = exp(sin(x))

# 級數展開
r1 = expr1.series(x, 0, 6)

# 去除尾數
r2 = expr1.series(x, 0, 6).removeO()

print(r1)
print(r2)

3.輸出:

\(e^{\sin(x)}​\)-->\(1 + x + \frac{x^{2}}{2} - \frac{x^{4}}{8} - \frac{x^{5}}{15} + O\left(x^{6}\right)​\)

\(e^{\sin(x)}\)-->\(- \frac{x^{5}}{15} - \frac{x^{4}}{8} + \frac{x^{2}}{2} + x + 1​\)

06.png

作者:Mark

日期:2019/03/17 周日


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM