exponenta event banner

quad2d

Численно вычислить двойной интегральный - мозаичный метод

Описание

пример

q = quad2d(fun,a,b,c,d) аппроксимирует интеграл fun(x,y) над плоской областью a≤x≤b и c (x) ≤y≤d (x). Границыc и d каждый может быть скаляром или дескриптором функции.

пример

q = quad2d(fun,a,b,c,d,Name,Value) указывает дополнительные параметры с одним или несколькими Name,Value аргументы пары. Например, можно указать 'AbsTol' и 'RelTol' для настройки пороговых значений ошибок, которым должен удовлетворять алгоритм.

[q,E] = quad2d(___) также возвращает приблизительную верхнюю границу абсолютной ошибки, E = | q - I |, где I - точное значение интеграла.

Примеры

свернуть все

Объединяться

ysin (x) + xcos (y)

свыше - π≤x≤2π и 0≤y≤π.

fun = @(x,y) y.*sin(x)+x.*cos(y);
Q = quad2d(fun,pi,2*pi,0,pi)
Q = -9.8696

Сравните результат с истинным значением интеграла, -.d2.

-pi^2
ans = -9.8696

Интеграция функции

[(x + y) 1/2 (1 + x + y) 2] -1

над регионом 0≤x≤1 и 0≤y≤1-x. Этот интеграл бесконечен в начале координат (0,0), которое лежит на границе области интегрирования.

fun = @(x,y) 1./(sqrt(x + y) .* (1 + x + y).^2 );
ymax = @(x) 1 - x;
Q = quad2d(fun,0,1,0,ymax)
Q = 0.2854

Истинное значение интеграла - δ/4-1/2.

pi/4 - 0.5
ans = 0.2854

quad2d начинается с отображения области интегрирования в прямоугольник. Следовательно, могут возникнуть проблемы с интеграцией по области, которая не имеет четырех сторон или имеет сторону, которая не может быть плавно отображена на прямую линию. Если интеграция не удалась, некоторые полезные тактики уходят Singular установить в значение по умолчанию, равное true, изменение между декартовой и полярной координатами, или разрыв области интегрирования на части и добавление результатов интегрирования на части.

Например:

fun = @(x,y)abs(x.^2 + y.^2 - 0.25);
c = @(x)-sqrt(1 - x.^2);
d = @(x)sqrt(1 - x.^2);
quad2d(fun,-1,1,c,d,'AbsTol',1e-8,...
    'FailurePlot',true,'Singular',false);
Warning: Reached the maximum number of function evaluations (2000). The result fails the global error test.

Figure contains an axes. The axes with title QUAD2D -- Areas Needing Refinement contains 2002 objects of type patch.

График отказа показывает две области сложности, вблизи точек (-1,0) и (1,0) и около окружности x2 + y2 = 0,25.

Изменение значения Singular кому true справится с геометрическими сингулярностями при (-1,0) и (1,0). Большие затененные области могут нуждаться в уточнении, но, вероятно, не являются областями трудностей.

Q = quad2d(fun,-1,1,c,d,'AbsTol',1e-8, ... 
     'FailurePlot',true,'Singular',true);
Warning: Reached the maximum number of function evaluations (2000). The result passes the global error test.

Figure contains an axes. The axes with title QUAD2D -- Areas Needing Refinement contains 2024 objects of type patch.

Отсюда можно воспользоваться преимуществами симметрии:

Q = 4*quad2d(fun,0,1,0,d,'Abstol',1e-8,...
     'Singular',true,'FailurePlot',true)
Q = 0.9817

Тем не менее, код все еще работает очень много около сингулярности. Возможно, он не сможет обеспечить более высокую точность:

Q = 4*quad2d(fun,0,1,0,d,'Abstol',1e-10,...
     'Singular',true,'FailurePlot',true);
Warning: Reached the maximum number of function evaluations (2000). The result passes the global error test.

Figure contains an axes. The axes with title QUAD2D -- Areas Needing Refinement contains 2011 objects of type patch.

При более высокой точности изменение координат может работать лучше.

polarfun = @(theta,r) fun(r.*cos(theta),r.*sin(theta)).*r;
Q = 4*quad2d(polarfun,0,pi/2,0,1,'AbsTol',1e-10);

Лучше всего поставить сингулярность на границе, разбив область интегрирования на две части:

Q1 = 4*quad2d(polarfun,0,pi/2,0,0.5,'AbsTol',5e-11);
Q2 = 4*quad2d(polarfun,0,pi/2,0.5,1,'AbsTol',5e-11);
Q = Q1 + Q2;

Входные аргументы

свернуть все

Интегрируемая функция, заданная как дескриптор функции. Функция Z = fun(X,Y) должен принимать матрицы 2-D X и Y одинакового размера и возвращают матрицу Z соответствующих значений. Поэтому функция должна быть векторизирована (то есть необходимо использовать элементарные операторы, такие как .^ вместо матричных операторов, таких как ^). Входы и выходы функции должны быть либо одинарными, либо двойными.

Пример: @(x,y) x.^2 - y.^2

Типы данных: function_handle

x пределов интегрирования, указанных как скаляры.

Типы данных: single | double
Поддержка комплексного номера: Да

y пределов интегрирования, заданных как скаляры или дескрипторы функций. Каждый предел может быть указан как скаляр или дескриптор функции. Если пределы указаны как дескрипторы функции, то они являются функциями x предела интегрирования ymin = @x c(x) и ymax = @(x) d(x). Функция обрабатывает ymin и ymax должны принимать матрицы и возвращать матрицы одинакового размера с соответствующими значениями. Входы и выходы функций должны быть либо одинарными, либо двойными.

Типы данных: single | double | function_handle
Поддержка комплексного номера: Да

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: quad2d(@(x,y) x.*y.^2, 0, 1, 0, 2, 'AbsTol',1e-3) указывает абсолютный допуск для интеграции как 1e-3.

Абсолютный допуск ошибки, указанный как разделенная запятыми пара, состоящая из 'AbsTol' и скаляр.

quad2d попытки удовлетворить ERRBND <= max(AbsTol,RelTol*|Q|). Это абсолютный контроль ошибок, когда |Q| достаточно малое и относительное управление ошибками, когда |Q| больше. Значение допуска по умолчанию используется, если допуск не указан. Значение по умолчанию AbsTol 1e-5. Значение по умолчанию RelTol является 100*eps(class(Q)). Это также минимальное значение RelTol. Меньше RelTol значения автоматически увеличиваются до значения по умолчанию.

Относительный допуск ошибки, указанный как разделенная запятыми пара, состоящая из 'RelTol' и скаляр.

quad2d попытки удовлетворить ERRBND <= max(AbsTol,RelTol*|Q|). Это абсолютный контроль ошибок, когда |Q| достаточно малое и относительное управление ошибками, когда |Q| больше. Значение допуска по умолчанию используется, если допуск не указан. Значение по умолчанию AbsTol 1e-5. Значение по умолчанию RelTol является 100*eps(class(Q)). Это также минимальное значение RelTol. Меньше RelTol значения автоматически увеличиваются до значения по умолчанию.

Максимальное количество оценок fun, указанная как пара, разделенная запятыми, состоящая из 'MaxFunEvals' и скаляр. Используйте этот параметр, чтобы ограничить количество раз quad2d вычисляет функцию fun.

Переключение для создания графика отказа, заданного как пара, разделенная запятыми, состоящая из 'FailurePlot' и числовой или логический 1 (true) или 0 (false). Набор FailurePlot кому true или 1 для создания графического представления областей, нуждающихся в дальнейшем уточнении, когда MaxFunEvals достигнут. График не создается, если интеграция завершается успешно до достижения MaxFunEvals. График отказов содержит (как правило) 4-сторонние области, которые отображаются в прямоугольники внутри. Кластеры небольших регионов указывают на трудности в интеграции.

Переключение для преобразования граничных сингулярностей, указанных как разделенная запятыми пара, состоящая из 'Singular' и числовой или логический 1 (true) или 0 (false). По умолчанию quad2d использует преобразования для ослабления граничных сингулярностей для повышения производительности. Набор 'Singular' кому false или 0 чтобы отключить эти преобразования, которые могут обеспечить преимущества производительности при некоторых гладких проблемах.

Выходные аргументы

свернуть все

Вычисляемый интеграл, возвращаемый как скаляр.

Ограничение ошибки, возвращенное как скаляр. Граница ошибки обеспечивает верхнюю границу ошибки между вычисленным интегралом q и точным значением интеграла I, так что E = | q - I |.

Ссылки

[1] Л. Ф. Шампин, «Программа MATLAB для квадратуры в 2D.» Прикладная математика и вычисления. Том 202, выпуск 1, 2008, стр. 266-274.

Расширенные возможности

.
Представлен в R2009a