scipy.integrate.

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..by = gfun(x)..hfun(x),以及 z = qfun(x,y)..rfun(x,y) 上的三重积分。

参数:
函数函数

一个Python函数或方法,至少包含三个变量,顺序为 (z, y, x)。

a, b浮动

x 的积分限制:a < b

gfun函数或浮点数

y 中的下边界曲线是一个函数,该函数接受一个浮点数参数 (x) 并返回一个浮点数结果或一个表示常数边界曲线的浮点数。

hfun函数或浮点数

y 轴的上边界曲线(与 gfun 有相同的要求)。

qfun函数或浮点数

z 方向的下边界表面。它必须是一个函数,该函数接受两个浮点数 (x, y) 并返回一个浮点数或一个表示常数边界表面的浮点数。

rfun函数或浮点数

z 方向的上边界表面。(与 qfun 有相同的要求。)

参数tuple, 可选

传递给 func 的额外参数。

epsabsfloat, 可选

直接传递给最内层一维积分求积的绝对容差。默认值为 1.49e-8。

epsrelfloat, 可选

最内层一维积分的相对容差。默认值为 1.49e-8。

返回:
y浮动

结果积分。

abserr浮动

一个误差的估计。

参见

quad

使用 QUADPACK 的自适应积分

fixed_quad

固定顺序的高斯求积

dblquad

双重积分

nquad

N维积分

romb

采样数据的积分器

simpson

采样数据的积分器

scipy.special

对于正交多项式的系数和根

注释

为了得到有效的结果,积分必须收敛;对于发散积分的处理行为不保证。

QUADPACK 级别例程的详细信息

quad 调用来自FORTRAN库QUADPACK的例程。本节提供每个例程被调用的条件的详细信息,以及每个例程的简短描述。对于每个积分级别,如果积分限是有限的,则使用``qagse``;如果任一积分限(或两者)是无限的,则使用``qagie``。以下是来自[R5e501d4ee1f2-1]_的每个例程的简短描述。

qagse

是一种基于全局自适应区间细分与外推的积分器,它将消除多种类型的被积函数奇异性的影响。

qagie

处理无限区间上的积分。无限范围被映射到一个有限区间,然后应用与 QAGS 相同的策略。

参考文献

[1]

Piessens, Robert; de Doncker-Kapenga, Elise; Überhuber, Christoph W.; Kahaner, David (1983). QUADPACK: 一个用于自动积分的子程序包。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)