Численно оцените двойной интеграл — размещенный рядом метод
задает дополнительные опции с одним или несколькими 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)
должен принять 2D матрицы 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
(значение по умолчанию) | скалярМаксимальное количество оценок fun
, заданный как разделенная запятой пара, состоящая из 'MaxFunEvals'
и скаляр. Используйте эту опцию, чтобы ограничить число раз quad2d
оценивает функциональный fun
.
'FailurePlot'
— Переключитесь, чтобы сгенерировать график отказаfalse
или 0
(значение по умолчанию) | true
или 1
Переключитесь, чтобы сгенерировать график отказа, заданный как разделенная запятой пара, состоящая из 'FailurePlot'
и числовой или логический 1
TRUE
) или 0
ложь
). Установите FailurePlot
к true
или 1
сгенерировать графическое представление областей, нуждающихся в дальнейшем улучшении когда MaxFunEvals
достигнут. Никакой график не сгенерирован, если интегрирование успешно выполняется прежде, чем достигнуть MaxFunEvals
. График отказа содержит (обычно) 4-сторонние области, которые сопоставлены с прямоугольниками внутренне. Кластеры небольших областей указывают на области трудности при интегрировании.
'Singular'
— Переключитесь, чтобы преобразовать граничную сингулярностьtrue
или 1
(значение по умолчанию) | false
или 0
Переключитесь, чтобы преобразовать граничную сингулярность, заданную как разделенная запятой пара, состоящая из 'Singular'
и числовой или логический 1
TRUE
) или 0
ложь
). По умолчанию, quad2d
использует преобразования, чтобы ослабить граничную сингулярность для лучшей производительности. Установите 'Singular'
к false
или 0
выключить эти преобразования, которые могут обеспечить выигрыш в производительности на некоторых сглаженных проблемах.
q
— Расчетный интегралРасчетный интеграл, возвращенный как скаляр.
E
— Ошибка связанаСвязанная ошибка, возвратилась как скаляр. Связанная ошибка обеспечивает верхнюю границу при ошибке между расчетным интегральным q и точным значением интегрального I, таким образом что E = | q - I |.
[1] Л.Ф. Шемпин, "Программа MATLAB для Квадратуры в 2D". Прикладная математика и Расчет. Издание 202, Выпуск 1, 2008, стр 266–274.
Указания и ограничения по применению:
Сгенерированный код выдает предупреждение, если размер массивов внутренней памяти не является достаточно большим. Если предупреждение происходит как обходное решение, можно попытаться разделить область интегрирования в части и суммировать интегралы по каждой части.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.