Численно вычислите двойной интеграл - мозаичный метод
задает дополнительные опции с одним или несколькими q
= quad2d(fun
,a,b
,c,d
,Name,Value
)Name,Value
аргументы в виде пар. Для примера можно задать 'AbsTol'
и 'RelTol'
чтобы настроить пороги ошибок, которые должен удовлетворять алгоритм.
Объединяться
и .
fun = @(x,y) y.*sin(x)+x.*cos(y); Q = quad2d(fun,pi,2*pi,0,pi)
Q = -9.8696
Сравните результат с истинным значением интеграла, .
-pi^2
ans = -9.8696
Интегрирование функции
по области и . Этот интегранд бесконечен в источник (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
Истинное значение интеграла является .
pi/4 - 0.5
ans = 0.2854
quad2d
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)
и около круга .
Изменение значения 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;
fun
- Функция для интеграцииФункция для интеграции, заданная как указатель на функцию. Функция Z = fun(X,Y)
должен принимать 2-D матрицы X
и Y
того же размера и возвращает матрицу Z
соответствующих значений. Поэтому функция должна быть векторизована (то есть вы должны использовать элементарные операторы, такие как .^
вместо матричных операторов, таких как ^
). Входы и выходы функции должны быть одинарной или двойной точностью.
Пример: @(x,y) x.^2 - y.^2
Типы данных: function_handle
a,b
- x пределы интегрированияx пределы интегрирования, заданные как скаляры.
Типы данных: single
| double
Поддержка комплексного числа: Да
c,d
- y пределы интегрирования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'
- Абсолютный допуск ошибок1e-5
(по умолчанию) | скаляромАбсолютный допуск ошибки, заданный как разделенная разделенными запятой парами, состоящая из 'AbsTol'
и скаляром.
quad2d
пытается удовлетворить ERRBND <= max(AbsTol,RelTol*|Q|)
. Это абсолютное управление ошибками при |Q|
является достаточно маленьким и относительная погрешность управлением, когда |Q|
больше. Значение допуска по умолчанию используется, если допуск не задан. Значение по умолчанию AbsTol
равен 1e-5. Значение по умолчанию RelTol
является 100*eps(class(Q))
. Это также минимальное значение RelTol
. Меньшие RelTol
значения автоматически увеличиваются до значения по умолчанию.
'RelTol'
- Относительный допуск ошибок100*eps(class(q))
(по умолчанию) | скаляромОтносительная погрешность, заданный как разделенная разделенными запятой парами, состоящая из 'RelTol'
и скаляром.
quad2d
пытается удовлетворить ERRBND <= max(AbsTol,RelTol*|Q|)
. Это абсолютное управление ошибками при |Q|
является достаточно маленьким и относительная погрешность управлением, когда |Q|
больше. Значение допуска по умолчанию используется, если допуск не задан. Значение по умолчанию AbsTol
равен 1e-5. Значение по умолчанию RelTol
является 100*eps(class(Q))
. Это также минимальное значение RelTol
. Меньшие RelTol
значения автоматически увеличиваются до значения по умолчанию.
'MaxFunEvals'
- Максимальное количество оценок fun
2000
(по умолчанию) | скаляромМаксимальное количество оценок fun
, заданная как разделенная разделенными запятой парами, состоящая из 'MaxFunEvals'
и скаляром. Используйте эту опцию, чтобы ограничить количество раз quad2d
оценивает функцию fun
.
'FailurePlot'
- Переключение для генерации графика отказаfalse
или 0
(по умолчанию) | true
или 1
Переключитесь, чтобы сгенерировать график отказа, заданный как разделенная разделенными запятой парами, состоящая из 'FailurePlot'
и числовое или логическое 1
(true
) или 0
(false
). Задайте FailurePlot
на true
или 1
чтобы сгенерировать графическое представление областей, нуждающихся в дальнейшем уточнении при MaxFunEvals
достигается. График не генерируется, если интегрирование преуспевает до достижения MaxFunEvals
. График отказа содержит (обычно) 4-сторонние области, которые сопоставлены с прямоугольниками внутри. Кластеры небольших регионов указывают области сложности в интегрировании.
'Singular'
- Переключение для преобразования граничных особенностейtrue
или 1
(по умолчанию) | false
или 0
Переключитесь, чтобы преобразовать граничные особенности, заданные как разделенная разделенными запятой парами, состоящая из 'Singular'
и числовое или логическое 1
(true
) или 0
(false
). По умолчанию, quad2d
использует преобразования для ослабления граничных особенностей для улучшения эффективности. Задайте 'Singular'
на false
или 0
чтобы выключить эти преобразования, что может обеспечить преимущество эффективности при некоторых плавных задачах.
q
- Вычисленный интегралВычисленный интеграл, возвращенный как скаляр.
E
- Граница между ошибкамиОшибка, возвращенная как скаляр. Связанная ошибка обеспечивает верхнюю границу на ошибке между расчетным интегралом q и точным значением интеграла I таким образом что E = | q - I |.
[1] L.F. Shampine, «Программа MATLAB for Quadrature in 2D.» Прикладная математика и расчеты. Том 202, Выпуск 1, 2008, стр. 266-274.
Указания и ограничения по применению:
Сгенерированный код выдает предупреждение, если размер внутренних массивов хранения недостаточно велик. Если происходит предупреждение, в качестве обходного пути можно попытаться разделить область интегрирования на части и суммировать интегралы по каждой части.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.