quad2d

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

Описание

пример

q = quad2d(fun,a,b,c,d) аппроксимирует интеграл fun(x,y) по планарной области axb и c(x)yd(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)

-πx2π и 0yπ.

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

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

-pi^2
ans = -9.8696

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

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

по области 0x1 и 0y1-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] L.F. Shampine, «Программа MATLAB for Quadrature in 2D.» Прикладная математика и расчеты. Том 202, Выпуск 1, 2008, стр. 266-274.

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

.
Введенный в R2009a