23.3 Функции от нескольких переменных
Octave включает несколько функций для вычисления интеграла функций от нескольких переменных. Этот процесс обычно выполняется путём создания функции, интегрирующей f относительно x, а затем интегрирования этой функции относительно y. Этот процесс можно выполнить вручную, используя следующий пример, интегрирующий функцию:
f(x, y) = sin(pi*x*y) * sqrt(x*y)
для x и y в пределах от 0 до 1.
Используя quadgk в примере ниже, можно выполнить двойное интегрирование. (Обратите внимание, что любая из функций одномерной квадратуры может быть использована таким образом, за исключением quad, так как она написана на Fortran и не может вызываться рекурсивно.)
function q = g(y)
q = ones (size (y));
for i = 1:length (y)
f = @(x) sin (pi*x.*y(i)) .* sqrt (x.*y(i));
q(i) = quadgk (f, 0, 1);
endfor
endfunction
I = quadgk ("g", 0, 1)
⇒ 0.30022 Указанный выше алгоритм реализован в функции dblquad для интегралов по двум переменным. Трехмерный аналог этого процесса реализован в triplequad для интегралов по трём переменным. В качестве примера, результат выше можно воспроизвести, вызвав dblquad как показано ниже.
I = dblquad (@(x, y) sin (pi*x.*y) .* sqrt (x.*y), 0, 1, 0, 1)
⇒ 0.30022 - dblquad (f, xa, xb, ya, yb)
- dblquad (f, xa, xb, ya, yb, tol)
- dblquad (f, xa, xb, ya, yb, tol, quadf)
- dblquad (f, xa, xb, ya, yb, tol, quadf, …)
-
Численно вычислить двойной интеграл от f.
f — это функция-обработчик, встроенная функция или строка, содержащая имя функции для вычисления. Функция f должна иметь вид z = f(x,y), где x — вектор, а y — скаляр. Она должна возвращать вектор той же длины и ориентации, что и x.
xa, ya и xb, yb — нижние и верхние пределы интегрирования для x и y соответственно. Внутренний интегрирующий модуль определяет, принимаются ли бесконечные пределы.
Необязательный аргумент tol определяет абсолютную погрешность, используемую при интегрировании каждого подынтеграла. Значение по умолчанию — 1e-6.
Необязательный аргумент quadf задаёт функцию внутреннего интегрирующего модуля. Доступны любые значения, кроме
quad, а значение по умолчанию —quadcc.Дополнительные аргументы передаются непосредственно в f. Для использования значения по умолчанию для tol или quadf можно передать
':'или пустую матрицу ([]).См. также: integral2, integral3, triplequad, quad, quadv, quadl, quadgk, quadcc, trapz.
- triplequad (f, xa, xb, ya, yb, za, zb)
- triplequad (f, xa, xb, ya, yb, za, zb, tol)
- triplequad (f, xa, xb, ya, yb, za, zb, tol, quadf)
- triplequad (f, xa, xb, ya, yb, za, zb, tol, quadf, …)
-
Численно вычислить тройной интеграл от f.
f — это функция-обработчик, встроенная функция или строка, содержащая имя функции для вычисления. Функция f должна иметь вид w = f(x,y,z), где x или y — вектор, а остальные входные данные — скаляры. Она должна возвращать вектор той же длины и ориентации, что и x или y.
xa, ya, za и xb, yb, zb — нижние и верхние пределы интегрирования для x, y и z соответственно. Внутренний интегрирующий модуль определяет, принимаются ли бесконечные пределы.
Необязательный аргумент tol определяет абсолютную погрешность, используемую при интегрировании каждого подынтеграла. Значение по умолчанию — 1e-6.
Необязательный аргумент quadf задаёт функцию внутреннего интегрирующего модуля. Доступны любые значения, кроме
quad, а значение по умолчанию —quadcc.Дополнительные аргументы передаются непосредственно в f. Для использования значения по умолчанию для tol или quadf можно передать
':'или пустую матрицу ([]).См. также: integral3, integral2, dblquad, quad, quadv, quadl, quadgk, quadcc, trapz.
Приведённый выше рекурсивный алгоритм для квадратуры называется "iterated". Отдельная двумерная методика интегрирования реализована в функции quad2d. Эта функция выполняет "tiled" интегрирование, разбивая область интегрирования на прямоугольные области и выполняя отдельные интегрирования по этим областям. Области далее разбиваются на части, требующие уточнения, чтобы достичь желаемой точности вычислений. Для некоторых функций этот метод может быть быстрее, чем двумерная итерация, используемая в других функциях выше.
- q = quad2d (f, xa, xb, ya, yb)
- q = quad2d (f, xa, xb, ya, yb, prop, val, …)
- [q, err, iter] = quad2d (…)
-
Численно вычислить двумерный интеграл от f с помощью адаптивной квадратуры по двумерной области, определённой xa, xb, ya, yb используя интегрирование по тайлам. Кроме того, ya и yb могут быть скалярными функциями от x, что позволяет интегрировать по непрямоугольным областям.
f — это функция-обработчик, встроенная функция или строка, содержащая имя функции для вычисления. Функция f должна иметь вид z = f(x,y), где x — вектор, а y — скаляр. Она должна возвращать вектор той же длины и ориентации, что и x.
Дополнительные необязательные параметры могут быть указаны с использованием пар
"property", value. Допустимые свойства:AbsTol-
Определите абсолютную погрешность для квадратуры. Значение по умолчанию — 1e-10 (1e-5 для single).
RelTol-
Определите относительную погрешность для квадратуры. Значение по умолчанию — 1e-6 (1e-4 для single).
MaxFunEvals-
Максимальное число вызовов функции f с векторизованными аргументами. Значение по умолчанию — 5000.
Singular-
Включить/выключить преобразования для ослабления особенностей на краю области интегрирования. Значение по умолчанию — true.
Vectorized-
Опция для отключения векторизованного интегрирования, заставляющая Octave использовать только скалярные входные данные при вызове подынтегральной функции. Значение по умолчанию — false.
FailurePlotЕсли
quad2dне сходится к желаемой погрешности до достижения MaxFunEvals, создаётся график областей, которые всё ещё нуждаются в уточнении. Значение по умолчанию — false.
Используется адаптивная квадратура для минимизации оценки погрешности до тех пор, пока не будет выполнено следующее условие:
error <= max (AbsTol, RelTol*|q|)
Необязательный выходной параметр err — это приблизительная оценка погрешности интеграла
abs (q - I), где I — точное значение интеграла. Необязательный выходной параметр iter — количество векторизованных вызовов функции f, которые были использованы.Пример 1: интегрирование прямоугольной области в плоскости x-y
f = @(x,y) 2*ones (size (x)); q = quad2d (f, 0, 1, 0, 1) ⇒ q = 2
Результат — объём, который для этой подынтегральной функции с постоянным значением, представляет собой просто
Length * Width * Height.Пример 2: интегрирование треугольной области в плоскости x-y
f = @(x,y) 2*ones (size (x)); ymax = @(x) 1 - x; q = quad2d (f, 0, 1, 0, ymax) ⇒ q = 1
Результат — объём, который для этой подынтегральной функции с постоянным значением, представляет собой площадь треугольника умноженную на высоту, или
1/2 * Base * Width * Height.Примечания по программированию: Если в области интегрирования есть особенности, лучше разделить интеграл и расположить особенности на границе.
Известная несовместимость с MATLAB: Если толерантности не заданы, а пределы интегрирования являются вещественными типами
single, то функции интегрирования Octave автоматически уменьшают значения по умолчанию для абсолютной и относительной погрешностей, как указано выше. Если требуются более строгие толерантности, их нужно задать. MATLAB оставляет более строгие толерантности, соответствующиеdoubleвходным данным, независимо от типа пределов интегрирования.Ссылка: Л.Ф. Шампин, Программа MATLAB для квадратуры в 2D, Прикладная математика и вычисления, стр. 266–274, том 1, 2008.
См. также: integral2, dblquad, integral, quad, quadgk, quadv, quadl, quadcc, trapz, integral3, triplequad.
Наконец, функции integral2 и integral3 предоставляются как общие функции двумерного и трёхмерного интегрирования. Они будут автоматически выбирать между методами интегрирования по итерациям и тайлам и, в отличие от dblquad и triplequad, будут работать с непрямоугольными областями интегрирования.
- q = integral2 (f, xa, xb, ya, yb)
- q = integral2 (f, xa, xb, ya, yb, prop, val, …)
- [q, err] = integral2 (…)
-
Числовое вычисление двумерного интеграла от f с использованием адаптивной квадратуры по двумерной области, определенной xa, xb, ya, yb (скаляры могут быть конечными или бесконечными). Кроме того, ya и yb могут быть скалярными функциями от x, что позволяет интегрировать по непрямоугольным областям.
f — это дескриптор функции, встроенная функция или строка, содержащая имя функции для оценки. Функция f должна иметь вид z = f(x,y), где x — вектор, а y — скаляр. Она должна возвращать вектор той же длины и ориентации, что и x.
Дополнительные необязательные параметры можно указать, используя пары
"property", value. Допустимые свойства:AbsTol-
Определяет абсолютную погрешность для квадратуры. Значение по умолчанию — 1e-10 (1e-5 для single).
RelTol-
Определяет относительную погрешность для квадратуры. Значение по умолчанию — 1e-6 (1e-4 для single).
Method-
Указывает используемый двумерный метод интегрирования, допустимые варианты —
"auto"(по умолчанию),"tiled", или"iterated". При использовании"auto", Octave выберет метод"tiled", если ни один из пределов интегрирования не является бесконечным. VectorizedВключает или отключает векторизованное интегрирование. Значение
falseзаставляет Octave использовать только скалярные входные данные при вызове интегрируемой функции, что позволяет использовать интегрируемые функции f(x,y), которые не были векторизованы и принимают только x и y как скаляры. Значение по умолчанию —true.
Адаптивная квадратура используется для минимизации оценки погрешности до тех пор, пока не выполняется следующее условие:
error <= max (AbsTol, RelTol*|q|)
err — это приближенная оценка погрешности интеграла
abs (q - I), где I — точное значение интеграла.Пример 1: интегрирование прямоугольной области в плоскости x-y
f = @(x,y) 2*ones (size (x)); q = integral2 (f, 0, 1, 0, 1) ⇒ q = 2
Результат — объём, который для этой интегрируемой функции с постоянным значением просто
Length * Width * Height.Пример 2: интегрирование треугольной области в плоскости x-y
f = @(x,y) 2*ones (size (x)); ymax = @(x) 1 - x; q = integral2 (f, 0, 1, 0, ymax) ⇒ q = 1
Результат — объём, который для этой интегрируемой функции с постоянным значением является площадью треугольника умноженной на высоту или
1/2 * Base * Width * Height.Примечания по программированию: Если в области интегрирования есть особенности, лучше разбить интеграл и поместить особенности на границу.
Известная несовместимость с MATLAB: Если допуски не указаны, а какие-либо пределы интегрирования имеют тип
single, то функции интегрирования Octave автоматически уменьшают значения по умолчанию для абсолютной и относительной погрешности, как указано выше. Если требуются более строгие допуски, их необходимо указать. MATLAB оставляет более строгие допуски, подходящие дляdoubleвходных данных, независимо от типа пределов интегрирования.Ссылка: Л.Ф. Шампин, Программа MATLAB для квадратуры в 2D, Прикладная математика и вычисления, стр. 266–274, т. 1, 2008.
См. также: quad2d, dblquad, integral, quad, quadgk, quadv, quadl, quadcc, trapz, integral3, triplequad.
- q = integral3 (f, xa, xb, ya, yb, za, zb)
- q = integral3 (f, xa, xb, ya, yb, za, zb, prop, val, …)
-
Числовое вычисление трехмерного интеграла от f с использованием адаптивной квадратуры по трехмерной области, определенной xa, xb, ya, yb, za, zb (скаляры могут быть конечными или бесконечными). Кроме того, ya и yb могут быть скалярными функциями от x, а za и zb — скалярными функциями от x и y, что позволяет интегрировать по непрямоугольным областям.
f — это дескриптор функции, встроенная функция или строка, содержащая имя функции для оценки. Функция f должна иметь вид z = f(x,y), где x — вектор, а y — скаляр. Она должна возвращать вектор той же длины и ориентации, что и x.
Дополнительные необязательные параметры можно указать, используя пары
"property", value. Допустимые свойства:AbsTol-
Определяет абсолютную погрешность для квадратуры. Значение по умолчанию — 1e-10 (1e-5 для single).
RelTol-
Определяет относительную погрешность для квадратуры. Значение по умолчанию — 1e-6 (1e-4 для single).
Method-
Указывает используемый двумерный метод интегрирования, допустимые варианты —
"auto"(по умолчанию),"tiled", или"iterated". При использовании"auto", Octave выберет метод"tiled", если ни один из пределов интегрирования не является бесконечным. VectorizedВключает или отключает векторизованное интегрирование. Значение
falseзаставляет Octave использовать только скалярные входные данные при вызове интегрируемой функции, что позволяет использовать интегрируемые функции f(x,y), которые не были векторизованы и принимают только x и y как скаляры. Значение по умолчанию —true.
Адаптивная квадратура используется для минимизации оценки погрешности до тех пор, пока не выполняется следующее условие:
error <= max (AbsTol, RelTol*|q|)
err — это приближенная оценка погрешности интеграла
abs (q - I), где I — точное значение интеграла.Пример 1: интегрирование по прямоугольному объёму
f = @(x,y,z) ones (size (x)); q = integral3 (f, 0, 1, 0, 1, 0, 1) ⇒ q = 1.00000
Для этой интегрируемой функции с постоянным значением результат — объём, равный просто
Length * Width * Height.Пример 2: интегрирование по сферическому объёму
f = @(x,y) ones (size (x)); ymax = @(x) sqrt (1 - x.^2); zmax = @(x,y) sqrt (1 - x.^2 - y.^2); q = integral3 (f, 0, 1, 0, ymax, 0, zmax) ⇒ q = 0.52360
Для этой интегрируемой функции с постоянным значением результат — 1/8 часть единичной сферы или
1/8 * 4/3 * pi.Примечания по программированию: Если в области интегрирования есть особенности, лучше разбить интеграл и поместить особенности на границу.
Известная несовместимость с MATLAB: Если допуски не указаны, а какие-либо пределы интегрирования имеют тип
single, то функции интегрирования Octave автоматически уменьшают значения по умолчанию для абсолютной и относительной погрешности, как указано выше. Если требуются более строгие допуски, их необходимо указать. MATLAB оставляет более строгие допуски, подходящие дляdoubleвходных данных, независимо от типа пределов интегрирования.Ссылка: Л.Ф. Шампин, Программа MATLAB для квадратуры в 2D, Прикладная математика и вычисления, стр. 266–274, т. 1, 2008.
См. также: triplequad, integral, quad, quadgk, quadv, quadl, quadcc, trapz, integral2, quad2d, dblquad.
Вышеуказанные интеграции могут быть довольно медленными, и эта проблема экспоненциально возрастает с размерностью интеграла. Другое возможное решение для двумерного интегрирования — использование ортогональной коллокации, как описано в предыдущем разделе (см. Ортогональная коллокация). Интеграл функции f(x,y) для x и y от 0 до 1 может быть аппроксимирован с использованием n точек суммой по i=1:n и j=1:n от q(i)*q(j)*f(r(i),r(j)), где q и r возвращаются функцией colloc (n). Обобщение на более чем две переменные очевидно. Следующий код вычисляет изучаемый интеграл с использованием n=8 точек.
f = @(x,y) sin (pi*x*y') .* sqrt (x*y');
n = 8;
[t, ~, ~, q] = colloc (n);
I = q'*f(t,t)*q;
⇒ 0.30022 Следует отметить, что количество точек определяет качество приближения. Если интеграл необходимо выполнить между a и b, а не между 0 и 1, требуется изменение переменных.
© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/Functions-of-Multiple-Variables.html