當一個函數不能被分析積分,或者很難分析積分時,通常會轉向數值積分方法。 SciPy有許多用於執行數值積分的程式。 它們中的大多數都在同一個scipy.integrate
庫中。 下表列出了一些常用函數。
編號 | 示例 | 描述 |
---|---|---|
1 | quad |
單積分 |
2 | dblquad |
二重積分 |
3 | tplquad |
三重積分 |
4 | nquad |
n倍多重積分 |
5 | fixed_quad |
高斯積分,階數n |
6 | quadrature |
高斯正交到容差 |
7 | romberg |
Romberg積分 |
8 | trapz |
梯形規則 |
9 | cumtrapz |
梯形法則累計計算積分 |
10 | simps |
辛普森的規則 |
11 | romb |
Romberg積分 |
12 | polyint |
分析多項式積分(NumPy) |
13 | poly1d |
輔助函數polyint(NumPy) |
單積分
Quad函數是SciPy積分函數的主力。 數值積分有時稱為正交積分,因此稱為名稱。 它通常是在a
到b
給定的固定範圍內執行函數f(x)
的單個積分的默認選擇。
quad
的一般形式是scipy.integrate.quad(f,a,b)
,其中'f'
是要積分的函數的名稱。 而'a'
和'b'
分別是下限和上限。 下麵來看看一個高斯函數的例子,它的積分範圍是0
和1
。
首先需要定義這個函數:
這可以使用lambda
運算式完成,然後在該函數上調用四方法。
import scipy.integrate
from numpy import exp
f= lambda x:exp(-x**2)
i = scipy.integrate.quad(f, 0, 1)
print (i)
執行上面示例代碼,得到以下結果 -
(0.7468241328124271, 8.291413475940725e-15)
四元函數返回兩個值,其中第一個數字是積分值,第二個數值是積分值絕對誤差的估計值。
注 - 由於
quad
需要函數作為第一個參數,因此不能直接將exp
作為參數傳遞。 Quad函數接受正和負無窮作為限制。 Quad函數可以積分單個變數的標準預定義NumPy函數,如exp
,sin
和cos
。
多重積分
雙重和三重積分的機制已被包含到函數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
是常數,它們可能在很多情況下必須定義為函數,正如在這裏為下限所做的那樣。
import scipy.integrate
from numpy import exp
from math import sqrt
f = lambda x, y : 16*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.5, 1.7092350012594845e-14)
除上述例程外,scipy.integrate
還有許多其他積分的程式,其中包括執行n
次多重積分的nquad以及實現各種集成演算法的其他例程。 但是,quad
和dblquad
將滿足對數值積分的大部分需求。