scipy.integrate.

dblquad#

scipy.integrate.dblquad(функция, a, b, gfun, hfun, args=(), epsabs=1.49e-08, epsrel=1.49e-08)[источник]#

Вычислить двойной интеграл.

Возвращает двойной (определенный) интеграл от func(y, x) из x = a..b и y = gfun(x)..hfun(x).

Параметры:
функцияcallable

Функция или метод Python с как минимум двумя переменными: y должен быть первым аргументом, а x — вторым.

a, bfloat

Пределы интегрирования по x: a < b

gfuncallable или float

Нижняя граничная кривая по y, которая является функцией, принимающей один аргумент с плавающей точкой (x) и возвращающей результат с плавающей точкой или число с плавающей точкой, указывающее на постоянную граничную кривую.

hfuncallable или float

Верхняя граничная кривая по y (те же требования, что и gfun).

argssequence, optional

Дополнительные аргументы для передачи в функция.

epsabsfloat, опционально

Абсолютная погрешность, передаваемая непосредственно во внутреннее одномерное квадратурное интегрирование. По умолчанию 1.49e-8. dblquad пытается достичь точности abs(i-result) <= max(epsabs, epsrel*abs(i)) где i = внутренний интеграл от func(y, x) из gfun(x) to hfun(x), и result является численным приближением. См. epsrel ниже.

epsrelfloat, опционально

Относительная погрешность внутренних одномерных интегралов. По умолчанию 1.49e-8. Если epsabs <= 0, epsrel должно быть больше чем 5e-29 и 50 * (machine epsilon). См. epsabs выше.

Возвращает:
yfloat

Результирующий интеграл.

abserrfloat

Оценка ошибки.

Смотрите также

quad

одиночный интеграл

tplquad

тройной интеграл

nquad

N-мерные интегралы

fixed_quad

гауссова квадратура фиксированного порядка

simpson

интегратор для дискретных данных

romb

интегратор для дискретных данных

scipy.special

для коэффициентов и корней ортогональных полиномов

Примечания

Для корректных результатов интеграл должен сходиться; поведение для расходящихся интегралов не гарантируется.

Подробности о процедурах уровня QUADPACK

quad вызывает процедуры из библиотеки FORTRAN QUADPACK. Этот раздел предоставляет подробности об условиях вызова каждой процедуры и краткое описание каждой процедуры. Для каждого уровня интегрирования, qagse используется для конечных пределов или qagie используется, если любой из пределов (или оба!) бесконечны. Ниже приведено краткое описание из [1] для каждой подпрограммы.

qagse

является интегратором, основанным на глобально адаптивном разбиении интервала в сочетании с экстраполяцией, что устраняет эффекты особенностей подынтегральной функции нескольких типов. Интегрирование выполняется с использованием 21-точечной квадратуры Гаусса-Кронрода в каждом подынтервале.

qagie

обрабатывает интегрирование по бесконечным интервалам. Бесконечный диапазон отображается на конечный интервал, а затем применяется та же стратегия, что и в QAGS применяется.

Ссылки

[1]

Пиесенс, Роберт; де Донкер-Капенга, Элиза; Уберхубер, Кристоф В.; Каханер, Дэвид (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)