Scipy中的integrate
模塊提供了很多數值積分方法,例如,一重積分、二重積分、三重積分、多重積分、高斯積分等等。
下面介紹幾種常用的積分函數。
一重積分
SciPy積分模塊中,quad函數是一個重要函數,用於求一重積分。例如,在給定的a到b范圍內,對函數f(x)求一重積分。
quad的一般形式是scipy.integrate.quad(f, a, b)
,其中f
是求積分的函數名稱,a
和b
分別是下限和上限。
示例
讓我們看一個高斯函數的例子,求0到5范圍內的積分。
首先需要定義函數→f(x)=e^{-x2}→f(x)=e−x2,這可以使用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
是待積分函數的名稱,a
、b
是x變量的上下限,gfun
、hfun
為定義y變量上下限的函數名稱。
示例
求二重積分:
我們使用lambda表達式定義函數f
、g
和h
。注意,在很多情況下g
和h
可能是常數,但是即使g
和h
是常數,也必須被定義為函數。
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就夠用了。