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)tohfun(x), иresultявляется численным приближением. См. epsrel ниже.- epsrelfloat, опционально
Относительная погрешность внутренних одномерных интегралов. По умолчанию 1.49e-8. Если
epsabs <= 0, epsrel должно быть больше чем 5e-29 и50 * (machine epsilon). См. epsabs выше.
- Возвращает:
- yfloat
Результирующий интеграл.
- abserrfloat
Оценка ошибки.
Смотрите также
quadодиночный интеграл
tplquadтройной интеграл
nquadN-мерные интегралы
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)