exponenta event banner

quadgk

Численно оценить интеграл - квадратура Гаусса - Кронрода

Описание

пример

q = quadgk(fun,a,b) интегрирует дескриптор функции fun от a кому b использование глобальных адаптивных квадратурных допусков высокого порядка и допусков ошибок по умолчанию.

пример

[q,errbnd] = quadgk(fun,a,b) дополнительно возвращает приблизительную верхнюю границу для абсолютной ошибки |q - I|, где I - точное значение интеграла.

пример

[___] = quadgk(fun,a,b,Name,Value) задает дополнительные параметры с одним или несколькими аргументами пары имя-значение, используя одну из предыдущих комбинаций выходных аргументов. Например, укажите 'Waypoints' за которым следует вектор вещественных или комплексных чисел для указания конкретных точек для использования интегратором.

Примеры

свернуть все

Вычислить интеграл

q=∫01ex ln (x) dx.

Этот интеграл имеет сингулярность в точке x = 0, потому что ln (0) расходится до - ∞.

Создайте анонимную функцию для интеграла. log функция вычисляет ln (x).

f = @(x) exp(x).*log(x);

Объединяться f от 0 до 1.

q = quadgk(f,0,1)
q = -1.3179

Интегрируйте сложную функцию вокруг полюса, задав контур.

Вычислить комплексный контурный интеграл

q=∮dz2z-1.

Интеграл имеет простой полюс при z = 1/2, поэтому используйте прямоугольный контур, который охватывает эту точку. Контур начинается и заканчивается в x = 1 на вещественной числовой линии. Используйте 'Waypoints' пара имя-значение для задания кусочных сегментов в контуре.

f = @(z) 1./(2.*z-1);
contour_segments = [1+1i 0+1i 0-1i 1-1i];
q = quadgk(f,1,1,'Waypoints',contour_segments)
q = -0.0000 + 3.1416i

Использовать quadgk для оценки колебательного интеграла, который трудно оценить.

Вычислить интеграл

Q = 0πsin (20000πx) дуплекс.

Интегранд колеблется очень быстро, поэтому его трудно оценить. Использовать quadgk для оценки интеграла и указания двух выходных данных для проверки того, насколько близки к выполнению допуски ошибок.

fun = @(x) sin(2e4*pi*x);
[Q,errbnd] = quadgk(fun,0,pi)
Warning: Reached the limit on the maximum number of intervals in use. Approximate bound on error is  5.7e-01. The integral may not exist, or it may be difficult to approximate numerically. Increase MaxIntervalCount to 1272 to enable QUADGK to continue for another iteration.
Q = -0.0082
errbnd = 0.5723

Предупреждающее сообщение указывает на способ корректировки MaxIntervalCount позволяет выполнить другую итерацию в процессе решения.

Снова решите интеграл, но укажите MaxIntervalCount как 1e5. С большим количеством интервалов, quadgk может удовлетворять абсолютному допуску ошибки для проблемы (1e-10 для двойной точности).

[Q,errbnd] = quadgk(fun,0,pi,'MaxIntervalCount',1e5)
Q = 1.6656e-06
errbnd = 2.6323e-12

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

свернуть все

Integrand, заданный как дескриптор функции, определяющий функцию, которая должна быть интегрирована из a кому b.

Для скалярных задач функция y = fun(x) должен принимать аргумент вектора x и вернуть результат вектора y, где y - интеграл, оцениваемый в каждом элементе x. Это требование обычно означает, что fun должны использовать операторы массива (.^, .*,...) вместо матричных операторов (^, *, …).

Параметризация функций объясняет, как предоставить дополнительные параметры функции fun, при необходимости.

Пример: q = quadgk(@(x) exp(1-x.^2),a,b) интегрирует анонимный дескриптор функции.

Пример: q = quadgk(@myFun,a,b) интегрирует функцию myFun, который сохраняется как файл.

Типы данных: function_handle

Пределы интеграции, указанные как отдельные аргументы вещественных или сложных скаляров. Пределы a и b может быть -Inf или Inf. Если оба являются конечными, они могут быть сложными. Если хотя бы один является комплексным, интеграл аппроксимируется по прямолинейной траектории от a кому b в комплексной плоскости.

Пример: quadgk(fun,0,1) объединяется fun от 0 кому 1.

Типы данных: single | double
Поддержка комплексного номера: Да

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: q = quadgk(fun,a,b,'Waypoints',[0.1 1.1 2.1]) использует 'Waypoints' возможность указать несколько интересующих точек, где должен оцениваться интеграл.

Абсолютный допуск ошибки, указанный как разделенная запятыми пара, состоящая из 'AbsTol' и неотрицательное вещественное число. quadgk использует допуск абсолютной ошибки для ограничения оценки абсолютной ошибки, |q – I|, где q - вычисленное значение интеграла и I является (неизвестным) точным значением. quadgk может предоставить больше десятичных знаков точности, если уменьшить абсолютный допуск ошибки.

quadgk попытки удовлетворить

errbnd <= max(AbsTol,RelTol*abs(q))
Это отношение является абсолютным контролем ошибок, когда |q| достаточно малое и относительное управление ошибками, когда |q| больше. Для абсолютного контроля ошибок используйте 'AbsTol' > 0 и 'RelTol'= 0. Для чистого контроля относительных ошибок 'RelTol' > 0 и 'AbsTol' = 0. За исключением случаев использования абсолютного контроля ошибок, минимальный относительный допуск равен 'RelTol' >= 100*eps(class(q)).

Пример: quadgk(fun,a,b,'AbsTol',1e-12) устанавливает абсолютный допуск погрешности, равный приблизительно 12 десятичным разрядам.

Пример: quadgk(fun,a,b,'AbsTol',tol,'RelTol',0) использует чисто абсолютный контроль ошибок, требующий, чтобы errbnd <= tol.

Типы данных: single | double

Относительный допуск ошибки, указанный как разделенная запятыми пара, состоящая из 'RelTol' и неотрицательное вещественное число. quadgk использует допуск относительной ошибки для ограничения оценки относительной ошибки, |q - I|/|I|, где q - вычисленное значение интеграла и I является (неизвестным) точным значением. quadgk может предоставить более значимые цифры точности, если уменьшить относительный допуск ошибки.

quadgk попытки удовлетворить

errbnd <= max(AbsTol,RelTol*abs(q))
Это отношение является абсолютным контролем ошибок, когда |q| достаточно малое и относительное управление ошибками, когда |q| больше. Для абсолютного контроля ошибок используйте 'AbsTol' > 0 и 'RelTol'= 0. Для чистого контроля относительных ошибок 'RelTol' > 0 и 'AbsTol' = 0. За исключением случаев использования абсолютного контроля ошибок, минимальный относительный допуск равен 'RelTol' >= 100*eps(class(q)).

Пример: quadgk(fun,a,b,'RelTol',1e-9) устанавливает относительный допуск ошибки приблизительно на 9 значащих цифр.

Пример: quadgk(fun,a,b,'AbsTol',0,'RelTol',tol) использует чисто относительный допуск ошибки, требующий, чтобы errbnd <= |I|*tol.

Типы данных: single | double

ППМ интеграции, указанные как разделенная запятыми пара, состоящая из 'Waypoints' и вектор вещественных или комплексных чисел. Используйте ППМ для указания точек в интервале интегрирования, которые интегратор должен использовать в начальной сетке:

  • Добавьте больше точек оценки рядом с интересными функциями функции, такими как локальная экстремальность.

  • Эффективная интеграция между разрывами интегральной системы путем указания местоположения разбиений.

  • Выполните сложную контурную интеграцию, указав комплексные числа в качестве ППМ. Если xmin, xmaxили любая запись вектора ППМ является комплексной, то интегрирование выполняется по последовательности прямолинейных траекторий в комплексной плоскости. В этом случае все пределы интеграции и ППМ должны быть конечными.

Не используйте ППМ для указания сингулярностей. Вместо этого разделите интервал и добавьте результаты отдельных интеграций с сингулярностями в конечных точках.

Пример: 'Waypoints',[1+1i,1-1i] задает две сложные ППМ по интервалу интегрирования.

Типы данных: single | double
Поддержка комплексного номера: Да

Максимальное допустимое количество интервалов, указанное как скаляр. Эта опция ограничивает число интервалов, quadgk использует в любое время после первой итерации. Предупреждение выдается, если quadgk возвращается раньше из-за этого предела. Регулярно увеличивать это значение не рекомендуется, но это может быть уместно, когда errbnd достаточно мало, чтобы была почти достигнута желаемая точность.

Пример: quadgk(fun,a,b,'MaxIntervalCount',700)

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

свернуть все

Значение интеграла, возвращаемое как скаляр.

Приблизительная верхняя граница при абсолютной ошибке, возвращаемая как скаляр. Приблизительная верхняя граница абсолютной ошибки в интегрировании равна errbnd = |q – I|, где q - вычисленное значение интеграла и I является (неизвестным) точным значением. quadgk попытки удовлетворить

errbnd <= max(AbsTol,RelTol*abs(q))
Укажите этот выходной аргумент, чтобы увидеть, насколько хорошо интеграция соответствует AbsTol и RelTol допуски ошибок. В случаях, когда errbnd близок к нужному значению, вы можете достичь нужного значения, увеличив значение MaxIntervalCount.

Совет

  • quadgk и integral использовать по существу один и тот же метод интегрирования. Как правило, следует использовать integral вместо quadgk. Тем не менее, вы можете использовать quadgk кому:

    • Контроль точности решения с помощью errbnd выходной аргумент.

    • Укажите большое значение для MaxIntervalCount когда integral предупреждает о достижении максимального количества интервалов.

  • quadgk может интегрировать функции, которые являются сингулярными в конечных конечных точках, если сингулярности не слишком сильны. Например, он может интегрировать функции, которые ведут себя в конечной точке c как log|x-c| или |x-c|p для p >= -1/2. Если функция является сингулярной в точках внутри пределов интегрирования [a b], затем записать интеграл как сумму интегралов по субинтервалам с сингулярными точками в качестве конечных точек, вычислить их с помощью quadgkи добавьте результаты.

  • Если интервал бесконечен, [a,∞), то для интеграла fun(x) для существования, fun(x) должен распадаться как x приближается к бесконечности, и quadgk требует его быстрого распада.

Ссылки

[1] Шампин, Л.Ф. «Векторизированная адаптивная квадратура в MATLAB ®». Журнал вычислительной и прикладной математики. Том 211, 2008, ст.131-140.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2007b