Численно оцените интеграл, адаптивную Квадратуру Гаусса-Кронрода
q = quadgk (fun, a, b)
[q, errbnd] = quadgk (fun, a, b)
[q, errbnd] = quadgk (fun, a, b, param1, val1, param2, val2...)
q = quadgk(fun,a,b)
пытается аппроксимировать интеграл скалярной функции fun
от a
до b
с помощью старшей глобальной адаптивной квадратуры и ошибочных допусков по умолчанию. Функциональный y = fun(x)
должен принять аргумент вектора x
и возвратить векторный результат y
, где y
является подынтегральным выражением, оцененным в каждом элементе x
. fun
должен быть указателем на функцию. Пределами a
и b
может быть -Inf
или Inf
. Если оба конечны, они могут быть комплексными. Если по крайней мере один является комплексным, интеграл аппроксимирован по пути к прямой линии от a
до b
в комплексной плоскости.
Параметризация Функций объясняет, как предоставить дополнительные параметры функциональному fun
при необходимости.
[q,errbnd] = quadgk(fun,a,b)
возвращает аппроксимированную верхнюю границу на абсолютной погрешности, |Q - I|
, где I
обозначает точное значение интеграла.
[q,errbnd] = quadgk(fun,a,b,param1,val1,param2,val2,...)
выполняет интегрирование с заданными значениями дополнительных параметров. Доступные параметры
Параметр | Описание | |
---|---|---|
| Допуск абсолютной погрешности. Значением по умолчанию |
|
| Допуск относительной погрешности. Значением по умолчанию | |
| Вектор интегрирования waypoints. | Если Если |
| Максимальное количество интервалов позволено. Значением по умолчанию является | Параметр |
Запишите функциональный myfun
, который вычисляет подынтегральное выражение:
function y = myfun(x) y = exp(x).*log(x);
Затем передайте @myfun
, указатель на функцию к myfun
, к quadgk
, наряду с пределами интегрирования, 0
к 1
:
q = quadgk(@myfun,0,1) q = -1.3179
Также можно передать подынтегральное выражение quadgk
как указатель анонимной функции F
:
f = (@(x)exp(x).*log(x)); q = quadgk(f,0,1);
Интегрируйтесь на полубесконечном интервале с заданными допусками и возвратите аппроксимированную связанную ошибку:
f = @(x)x.^5.*exp(-x).*sin(x); [q,errbnd] = quadgk(f,0,inf,'RelTol',1e-8,'AbsTol',1e-12) q = -15.0000 errbnd = 9.4386e-009
Используйте Waypoints
, чтобы интегрироваться вокруг полюса с помощью кусочного линейного контура:
f = @(z)1./(2*z - 1); q = quadgk(f,-1-i,-1-i,'Waypoints',[1-i,1+i,-1+i]) q = 0.0000 + 3.1416i
quadgk
может выпустить одно из соблюдающих предупреждений:
'Minimum step size reached'
указывает, что подразделение интервала произвело подынтервал, длина которого находится на порядке ошибки округления в длине исходного интервала. Неинтегрируемая особенность возможна.
'Reached the limit on the maximum number of intervals in use'
указывает, что интегрирование было отключено прежде, чем удовлетворить требования допуска и что продолжение интегрирования потребует больше, чем подынтервалы MaxIntervalCount
. Интеграл не может существовать, или может быть трудно аппроксимировать численно. Увеличение MaxIntervalCount
обычно не помогает, если требования допуска не были почти удовлетворены, когда интегрирование было ранее отключено.
'Infinite or Not-a-Number function value encountered'
указывает на переполнение с плавающей точкой или деление на нуль во время оценки подынтегрального выражения во внутренней части интервала.
Если интервал бесконечен, , то для интеграла fun(x)
, чтобы существовать, fun(x)
должен затухнуть как бесконечность подходов x
, и quadgk
требует, чтобы он затух быстро. Специальные методы должны использоваться для колебательных функций на бесконечных интервалах, но quadgk
может использоваться, если fun(x)
затухает достаточно быстро.
Функция quadgk
может интегрировать функции, которые сингулярны в конечных конечных точках, если особенности не слишком сильны. Например, это может интегрировать функции, которые ведут себя в конечной точке c
как log|x-c|
или |x-c|p
для p >= -1/2
. Если функция сингулярна в точках в (a,b)
, запишите интеграл как сумму интегралов на подынтервалах с особыми точками как конечные точки, вычислите их с quadgk
и добавьте результаты.
quadgk
реализует адаптивную квадратуру на основе пары Гаусса - Кронрода (15-е и 7-е формулы порядка).
[1] L.F. Шемпин “Векторизовал Адаптивную Квадратуру в MATLAB®”, Журнал Вычислительной и Прикладной математики, 211, 2008, pp.131–140.