tplquad#
- scipy.integrate.tplquad(func, a, b, gfun, hfun, qfun, rfun, args=(), epsabs=1.49e-08, epsrel=1.49e-08)[原始碼]#
計算三重(定積分)積分。
傳回
func(z, y, x)
從x = a..b
、y = gfun(x)..hfun(x)
和z = qfun(x,y)..rfun(x,y)
的三重積分。- 參數:
- funcfunction
至少三個變數的 Python 函數或方法,順序為 (z, y, x)。
- a, bfloat
x 的積分極限:a < b
- gfunfunction 或 float
y 中的下邊界曲線,它是一個接受單個浮點參數 (x) 並傳回浮點結果的函數,或是一個表示常數邊界曲線的 float。
- hfunfunction 或 float
y 中的上邊界曲線(與 gfun 相同的要求)。
- qfunfunction 或 float
z 中的下邊界曲面。它必須是一個接受兩個浮點數,順序為 (x, y) 並傳回一個 float 或一個表示常數邊界曲面的 float 的函數。
- rfunfunction 或 float
z 中的上邊界曲面。(與 qfun 相同的要求。)
- argstuple,選用
要傳遞給 func 的額外參數。
- epsabsfloat,選用
直接傳遞到最內層一維正交積分的絕對容忍度。預設值為 1.49e-8。
- epsrelfloat,選用
最內層一維積分的相對容忍度。預設值為 1.49e-8。
- 傳回值:
- yfloat
結果積分值。
- abserrfloat
誤差的估計值。
另請參閱
quad
使用 QUADPACK 的自適應正交積分
fixed_quad
固定階高斯正交積分
dblquad
二重積分
nquad
N 維積分
romb
取樣資料的積分器
simpson
取樣資料的積分器
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 * y * z
的三重積分,在x
範圍從 1 到 2,y
範圍從 2 到 3,z
範圍從 0 到 1。也就是說,\(\int^{x=2}_{x=1} \int^{y=3}_{y=2} \int^{z=1}_{z=0} x y z \,dz \,dy \,dx\)。>>> import numpy as np >>> from scipy import integrate >>> f = lambda z, y, x: x*y*z >>> integrate.tplquad(f, 1, 2, 2, 3, 0, 1) (1.8749999999999998, 3.3246447942574074e-14)
計算 \(\int^{x=1}_{x=0} \int^{y=1-2x}_{y=0} \int^{z=1-x-2y}_{z=0} x y z \,dz \,dy \,dx\)。注意:qfun/rfun 接受順序為 (x, y) 的參數,即使
f
接受順序為 (z, y, x) 的參數。>>> f = lambda z, y, x: x*y*z >>> integrate.tplquad(f, 0, 1, 0, lambda x: 1-2*x, 0, lambda x, y: 1-x-2*y) (0.05416666666666668, 2.1774196738157757e-14)
計算 \(\int^{x=1}_{x=0} \int^{y=1}_{y=0} \int^{z=1}_{z=0} a x y z \,dz \,dy \,dx\),其中 \(a=1, 3\)。
>>> f = lambda z, y, x, a: a*x*y*z >>> integrate.tplquad(f, 0, 1, 0, 1, 0, 1, args=(1,)) (0.125, 5.527033708952211e-15) >>> integrate.tplquad(f, 0, 1, 0, 1, 0, 1, args=(3,)) (0.375, 1.6581101126856635e-14)
計算三維高斯積分,它是高斯函數 \(f(x,y,z) = e^{-(x^{2} + y^{2} + z^{2})}\) 在 \((-\infty,+\infty)\) 上的積分。也就是說,計算積分 \(\iiint^{+\infty}_{-\infty} e^{-(x^{2} + y^{2} + z^{2})} \,dz \,dy\,dx\)。
>>> f = lambda x, y, z: np.exp(-(x ** 2 + y ** 2 + z ** 2)) >>> integrate.tplquad(f, -np.inf, np.inf, -np.inf, np.inf, -np.inf, np.inf) (5.568327996830833, 4.4619078828029765e-08)