scipy.integrate.

dblquad#

scipy.integrate.dblquad(func, a, b, gfun, hfun, args=(), epsabs=1.49e-08, epsrel=1.49e-08)[源代码]#

计算二重积分。

返回 func(y, x)x = a..by = 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 = func(y, x)gfun(x)hfun(x) 的内部积分,并且 result 是数值近似。 请参见下面的 epsrel

epsrel浮点数,可选

内部一维积分的相对容差。默认值为 1.49e-8。 如果 epsabs <= 0, 则 epsrel 必须大于 5e-29 和 50 * (机器 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: 用于自动积分的子例程包。 Springer-Verlag。ISBN 978-3-540-12553-2。

示例

计算 x * y**2 在 x 从 0 到 2 和 y 从 0 到 1 的框上的二重积分。即 \(\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)