scipy.integrate.

tplquad#

scipy.integrate.tplquad(функция, 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).

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

Функция или метод Python с как минимум тремя переменными в порядке (z, y, x).

a, bfloat

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

gfunфункция или число с плавающей точкой

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

hfunфункция или число с плавающей точкой

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

qfunфункция или число с плавающей точкой

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

rfunфункция или число с плавающей точкой

Верхняя граничная поверхность в z. (Те же требования, что и qfun.)

argsкортеж, необязательный

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

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

Абсолютная погрешность, передаваемая непосредственно во внутреннее 1-D квадратурное интегрирование. По умолчанию 1.49e-8.

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

Относительный допуск для внутренних одномерных интегралов. По умолчанию 1.49e-8.

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

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

abserrfloat

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

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

quad

Адаптивное интегрирование с использованием QUADPACK

fixed_quad

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

dblquad

Двойные интегралы

nquad

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

romb

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

simpson

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

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 * 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)