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