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
是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
是一个基于全局自适应区间细分结合外推法的积分器,它可以消除几种类型的被积函数奇异性的影响。积分是在每个子区间内使用 21 点高斯-科隆罗德求积法执行的。
- 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**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)