quad2d

Численно оцените двойной интеграл — размещенный рядом метод

Синтаксис

q = quad2d(fun,a,b,c,d)
q = quad2d(fun,a,b,c,d,Name,Value)
[q,E] = 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)+xпотому что(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.

График отказа показывает две области трудности около точек (-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.

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

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.

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

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) должен принять 2D матрицы 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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