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=01exln(x)dx.

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

Создайте анонимную функцию для integrand. The 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)dx.

Интегранд колеблется очень быстро, поэтому оценить его сложно. Использование 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

Входные параметры

свернуть все

Интегранд, заданный как указатель на функцию, который задает функцию, которая будет интегрирована с 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' и вектор вещественных или комплексных чисел. Используйте путевые точки, чтобы указать точки в интервале интегрирования, которые вы хотели бы, чтобы интегратор использовал в начальном mesh:

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

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

  • Выполните комплексные интегрирования контуров путем определения комплексных чисел в качестве путевых точек. Если 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] Шемпин, L.F. "Векторизованная адаптивная квадратура в MATLAB®." Журнал вычислительной и прикладной математики. Том 211, 2008, стр. 131-140.

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

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2007b