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.

График отказа показывает две области трудности около точек (-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 имя аргумента и 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 ложь). Установите FailurePlot к true или 1 сгенерировать графическое представление областей, нуждающихся в дальнейшем улучшении когда MaxFunEvals достигнут. Никакой график не сгенерирован, если интегрирование успешно выполняется прежде, чем достигнуть MaxFunEvals. График отказа содержит (обычно) 4-сторонние области, которые сопоставлены с прямоугольниками внутренне. Кластеры небольших областей указывают на области трудности при интегрировании.

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

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

свернуть все

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

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

Ссылки

[1] Л.Ф. Шемпин, "Программа MATLAB для Квадратуры в 2D". Прикладная математика и Расчет. Издание 202, Выпуск 1, 2008, стр 266–274.

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

Представленный в R2009a