Python機器學習(五十七)SciPy 積分


Scipy中的integrate模塊提供了很多數值積分方法,例如,一重積分、二重積分、三重積分、多重積分、高斯積分等等。

下面介紹幾種常用的積分函數。

一重積分

SciPy積分模塊中,quad函數是一個重要函數,用於求一重積分。例如,在給定的a到b范圍內,對函數f(x)求一重積分。

 

quad的一般形式是scipy.integrate.quad(f, a, b),其中f是求積分的函數名稱,ab分別是下限和上限。

示例

讓我們看一個高斯函數的例子,求0到5范圍內的積分。

首先需要定義函數→f(x)=e^{-x2}f(x)=ex2,這可以使用lambda表達式來完成,然后使用quad方法對其求一重積分。

import scipy.integrate
from numpy import exp
f = lambda x:exp(-x**2)
i = scipy.integrate.quad(f, 0, 5)
print(i)

輸出

(0.8862269254513955, 2.3183115159980698e-14)

quad函數返回兩個值,第一個值是積分的值,第二個值是對積分值的絕對誤差估計。

示例

如果積分的函數f帶系數參數,即:

 

 那么a和b可以通過args傳入quad函數:

from scipy.integrate import quad

def f(x, a, b):
    return a * (x ** 2) + b

ret = quad(f, 0, 1, args=(3, 1))
print (ret)

輸出

(2.0, 2.220446049250313e-14)

重積分

要計算二重積分、三重積分、多重積分,可使用dblquad、tplquad和nquad函數。

二重積分

dblquad的一般形式是scipy.integrate.dblquad(func, a, b, gfun, hfun),其中,func是待積分函數的名稱,ab是x變量的上下限,gfunhfun為定義y變量上下限的函數名稱。

示例

求二重積分:

 

 我們使用lambda表達式定義函數fgh。注意,在很多情況下gh可能是常數,但是即使gh是常數,也必須被定義為函數。

import scipy.integrate
from numpy import exp
from math import sqrt
f = lambda x, y : 19*x*y
g = lambda x : 0
h = lambda y : sqrt(1-4*y**2)
i = scipy.integrate.dblquad(f, 0, 0.5, g, h)
print (i)

輸出

(0.59375, 2.029716563995638e-14)

除了上面介紹的方法外,Scipy的integrate模塊中還有許多其他積分方法,例如nquad,用於求多重積分。不過,大部分場景quad和dblquad就夠用了。

 


免責聲明!

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



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