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) отличается к -.

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

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

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

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

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

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

Типы данных: 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, pp.131-140.

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

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

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