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)
的三重积分。- 参数:
- func函数
一个至少包含三个变量的 Python 函数或方法,顺序为 (z, y, x)。
- a, b浮点数
x 的积分限:a < b
- gfun函数或浮点数
y 的下边界曲线,它是一个以单个浮点数参数 (x) 为输入并返回浮点数结果的函数,或者一个表示恒定边界曲线的浮点数。
- hfun函数或浮点数
y 的上边界曲线(与 gfun 相同的要求)。
- qfun函数或浮点数
z 的下边界曲面。它必须是一个以两个浮点数 (x, y) 为输入并返回一个浮点数或一个表示恒定边界曲面的浮点数的函数。
- rfun函数或浮点数
z 的上边界曲面。(与 qfun 相同的要求。)
- args元组,可选
传递给 func 的额外参数。
- epsabs浮点数,可选
直接传递给最内层一维求积积分的绝对容差。默认值为 1.49e-8。
- epsrel浮点数,可选
最内层一维积分的相对容差。默认值为 1.49e-8。
- 返回:
- y浮点数
结果积分。
- abserr浮点数
误差估计。
另请参见
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)