23.3 Функции нескольких переменных
Octave включает несколько функций для вычисления интеграла функций нескольких переменных. Этот процесс обычно выполняется путем создания функции, которая интегрирует f по x, а затем интегрирует эту функцию по y. Этот процесс можно выполнить вручную, используя следующий пример, который интегрирует функцию:
f(x, y) = sin(pi*x*y) * sqrt(x*y)
для x и y между 0 и 1.
Используя quadgk в примере ниже, можно выполнить двойное интегрирование. (Обратите внимание, что любая из функций 1-мерного квадратурного метода может быть использована таким образом, за исключением 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". Отдельный метод интегрирования в 2D реализован в функции quad2d. Эта функция выполняет "tiled" интегрирование, разбивая область интегрирования на прямоугольные области и выполняя отдельные интегрирования по этим областям. Области дополнительно разбиваются в областях, требующих уточнения, для достижения желаемой точности численного результата. Для некоторых функций этот метод может быть быстрее, чем 2D итерация, используемая в других функциях выше.
- : 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 предоставляются в качестве общих функций для интегрирования в 2D и 3D. Они автоматически выбирают между методами интегрирования по частям и плитками и, в отличие от 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/v7.2.0/Functions-of-Multiple-Variables.html