23.3 Функции нескольких переменных
Octave включает несколько функций для вычисления интеграла функций нескольких переменных. Этот процесс обычно выполняется путем создания функции, которая интегрирует f по отношению к x, а затем интегрирует эту функцию по отношению к y. Этот процесс можно выполнить вручную, используя следующий пример, который интегрирует функцию:
f(x, y) = sin(pi*x*y) * sqrt(x*y)
для x и y от 0 до 1.
Используя quadgk в примере ниже, можно выполнить двойное интегрирование. (Обратите внимание, что любая из функций 1-мерного квадратурного метода может быть использована таким образом, за исключением quad, поскольку она написана на Фортране и не может вызываться рекурсивно.)
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 для интегралов по двум переменным. 3-мерный аналог этого процесса реализован в 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 реализован отдельный метод интегрирования в 2D. Эта функция выполняет интегрирование "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 для одинарной точности).
RelTol-
Определяет относительную погрешность для квадратуры. Значение по умолчанию — 1e-6 (1e-4 для одинарной точности).
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входных данных, на месте независимо от типа пределов интегрирования.Ссылка: L.F. Shampine, MATLAB программа для квадратур в 2D, Applied Mathematics and Computation, стр. 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 для одинарной точности).
RelTol-
Определите относительную погрешность для квадратуры. Значение по умолчанию — 1e-6 (1e-4 для одинарной точности).
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входных данных, независимо от типа пределов интегрирования.Ссылка: L.F. Shampine, 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 для одинарной точности).
RelTol-
Определите относительную погрешность для квадратуры. Значение по умолчанию — 1e-6 (1e-4 для одинарной точности).
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входных данных, независимо от типа пределов интегрирования.Ссылка: L.F. Shampine, 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/v6.4.0/Functions-of-Multiple-Variables.html