dblquad#
- scipy.integrate.dblquad(func, a, b, gfun, hfun, args=(), epsabs=1.49e-08, epsrel=1.49e-08)[source]#
計算二重積分。
傳回
func(y, x)
從x = a..b
以及y = gfun(x)..hfun(x)
的二重(定)積分。- 參數:
- func可呼叫物件
一個 Python 函數或方法,至少需要兩個變數:y 必須是第一個參數,而 x 是第二個參數。
- a, b浮點數
x 積分的上下限:a < b
- gfun可呼叫物件或浮點數
y 的下邊界曲線,它是一個接受單一浮點數參數 (x) 並傳回浮點數結果的函數,或是一個表示常數邊界曲線的浮點數。
- hfun可呼叫物件或浮點數
y 的上邊界曲線(與 gfun 相同的要求)。
- args序列,選用
要傳遞給 func 的額外參數。
- epsabs浮點數,選用
傳遞給內部一維正交積分的絕對容忍度。預設值為 1.49e-8。
dblquad
嘗試獲得abs(i-result) <= max(epsabs, epsrel*abs(i))
的精確度,其中i
= 從gfun(x)
到hfun(x)
的func(y, x)
的內部積分,而result
是數值近似值。請參閱下方的 epsrel。- epsrel浮點數,選用
內部一維積分的相對容忍度。預設值為 1.49e-8。如果
epsabs <= 0
,則 epsrel 必須大於 5e-29 和50 * (machine epsilon)
。請參閱上方的 epsabs。
- 傳回值:
- y浮點數
結果積分值。
- abserr浮點數
誤差估計值。
另請參閱
quad
單重積分
tplquad
三重積分
nquad
N 維積分
fixed_quad
固定階高斯正交
simpson
取樣資料的積分器
romb
取樣資料的積分器
scipy.special
用於正交多項式的係數和根
說明
為了獲得有效的結果,積分必須收斂;不保證發散積分的行為。
QUADPACK 層級常式詳情
quad
呼叫 FORTRAN 程式庫 QUADPACK 中的常式。本節提供每個常式被呼叫的條件以及每個常式的簡短描述。對於每個積分層級,有限限值使用qagse
,如果任一(或兩個!)限值是無限的,則使用qagie
。以下提供來自 [1] 的每個常式的簡短描述。- qagse
是一個基於全域自適應區間細分的積分器,結合外插法,將消除多種類型被積函數奇異點的影響。
- qagie
處理無限區間上的積分。無限範圍被映射到有限區間,然後應用與
QAGS
中相同的策略。
參考文獻
[1]Piessens, Robert; de Doncker-Kapenga, Elise; Überhuber, Christoph W.; Kahaner, David (1983). QUADPACK: A subroutine package for automatic integration. Springer-Verlag. ISBN 978-3-540-12553-2.
範例
計算在
x
範圍從 0 到 2,以及y
範圍從 0 到 1 的方框上,x * y**2
的二重積分。也就是 \(\int^{x=2}_{x=0} \int^{y=1}_{y=0} x y^2 \,dy \,dx\)。>>> import numpy as np >>> from scipy import integrate >>> f = lambda y, x: x*y**2 >>> integrate.dblquad(f, 0, 2, 0, 1) (0.6666666666666667, 7.401486830834377e-15)
計算 \(\int^{x=\pi/4}_{x=0} \int^{y=\cos(x)}_{y=\sin(x)} 1 \,dy \,dx\)。
>>> f = lambda y, x: 1 >>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos) (0.41421356237309503, 1.1083280054755938e-14)
計算 \(\int^{x=1}_{x=0} \int^{y=2-x}_{y=x} a x y \,dy \,dx\),其中 \(a=1, 3\)。
>>> f = lambda y, x, a: a*x*y >>> integrate.dblquad(f, 0, 1, lambda x: x, lambda x: 2-x, args=(1,)) (0.33333333333333337, 5.551115123125783e-15) >>> integrate.dblquad(f, 0, 1, lambda x: x, lambda x: 2-x, args=(3,)) (0.9999999999999999, 1.6653345369377348e-14)
計算二維高斯積分,它是高斯函數 \(f(x,y) = e^{-(x^{2} + y^{2})}\) 在 \((-\infty,+\infty)\) 上的積分。也就是計算積分 \(\iint^{+\infty}_{-\infty} e^{-(x^{2} + y^{2})} \,dy\,dx\)。
>>> f = lambda x, y: np.exp(-(x ** 2 + y ** 2)) >>> integrate.dblquad(f, -np.inf, np.inf, -np.inf, np.inf) (3.141592653589777, 2.5173086737433208e-08)