sympy庫的使用(五)階乘,微分,積分,極限等


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

本文主要記錄一些特殊的函數,比如階乘啊,二項分布等等

首先定於變量

x, y, z = symbols('x y z')
k, m, n = symbols('k m n')

 

 一、階乘factorial

n! = 1*2*3*...(n-1)*n

factorial(n)

 解階乘

expr = factorial(n)
expr.subs(n,10)  

 

 

二、二項式binomial

注意n>k,且都為正整數

binomial(n, k)

 

 解二項式

expr = binomial(n, k)
expr.subs([(n,4),(k,2)])

 

 

三、微積分

1.求導diff函數

from sympy import *
x, y, z = symbols('x y z')
init_printing(use_unicode=True)

diff(cos(x), x)
diff(exp(x**2), x)

 

 diff求一階導,二階導,三階導,有2中表達方式,一種是在后面一直寫x,x,x,一種是直接在后面寫對應的數字,寫2就是二階導

#方法一
diff(x**4, x, x, x)
#方法二
diff(x**4, x, 3)

 

 diff也可以解多元的偏導,但是要記住每次解導數的時候都是在前面一次的結果上再求導數

expr = 2*x*y**2*z**4
diff(expr, x, y,  z)
diff(expr, x, y, 2, z, 4)
diff(expr, x, y, y, z, 4)

 

還可以寫成expr.diff()

expr.diff(x, y, y, z, 4)

2.求偏導

deriv = Derivative(expr, x, y, y, z, 4)
deriv

 

 寫成偏導的形式,再求解

deriv.doit()

 

 diff還可以對不是表達式中的變量進行求導,比如下面的n並不是表達式中的變量,但是我們也可以對此求偏導

m, n, a, b = symbols('m n a b')
expr = (a*x + b)**m
expr
expr.diff((x, n))

 

四、積分

要計算積分,請使用integrate函數。有兩種積分,定積分和不定積分,不定積分和定積分怎么區別?

請注意,SymPy不包含積分常數。如果需要,可以自己加一個,也可以將問題改寫為微分方程並用於dsolve求解,這確實會增加常數

1.不定積分

即反導數或基元,只需在表達式后傳遞變量

import pycard as pc
from sympy import *
import sympy
from sympy import init_printing
init_printing(use_unicode=True)

x, y, z = symbols('x y z')
integrate(cos(x), x)

 

 2.定積分

要計算定積分,請傳遞參數例如,要計算(integration_variable, lower_limit, upper_limit)

integrate(exp(-x), (x, 0, oo)) #1

可以傳遞多個限制元組以執行多個積分。例如,要計算

integrate(exp(-x**2 - y**2), (x, -oo, oo), (y, -oo, oo))  #π

如果integrate無法計算積分,則返回未評估的 Integral對象

integrate(x**x, x)

 

 創建未評估的積分 Integral如果要解積分,請調用doit

expr = Integral(log(x)**2, x)
expr

expr.doit()

 

 integrate使用了不斷改進的強大算法來計算定積分和不定積分,包括啟發式模式匹配類型算法,Risch算法的部分實現以及使用Meijer G函數的算法,該算法 可用於根據特殊函數計算積分,特別是定積分

integ = Integral((x**4 + x**2*exp(x) - x**2 - 2*x*exp(x) - 2*x -
    exp(x))*exp(x)/((x - 1)**2*(x + 1)**2*(exp(x) + 1)), x)
integ
integ.doit()

 

 

integ = Integral(sin(x**2), x)
integ

integ.doit()

integ = Integral(x**y*exp(-x), (x, 0, oo))
integ

integ.doit()

 

 

五、極限

SymPy可以使用該limit函數計算符號極限計算語法

 使用limit(f(x), x, x0)

下面這個例子是x越接近0,f(x)最接近1

limit(sin(x)/x, x, 0)  #1

limit有一個未評估的對應物Limit要對其進行評估,請使用doit。這句話說,可以先寫出表達式,然后再計算極限

expr = Limit((cos(x) - 1)/x, x, 0)
expr

expr.doit()

 

 要僅在一側評估極限,請將'+''-'作為第四個參數傳遞limit例如,要計算

limit(1/x, x, 0, '+')  #
limit(1/x, x, 0, '-')  #-∞

 


免責聲明!

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



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