Гауссов интеграл ошибок матлаб

quadgk

Numerically evaluate integral — Gauss-Kronrod quadrature

Syntax

Description

example

q = quadgk(fun,a,b)
integrates the function handle fun from a to
b using high-order global adaptive quadrature and default error
tolerances.

example

[q,errbnd] = quadgk(fun,a,b)
additionally returns an approximate upper bound on the absolute error |q -
I|
, where I is the exact value of the integral.

example

[___] = quadgk(fun,a,b,Name,Value)
specifies additional options with one or more name-value pair arguments using either of the
previous output argument combinations. For example, specify 'Waypoints'
followed by a vector of real or complex numbers to indicate specific points for the
integrator to use.

Examples

collapse all

Integral with Singularity at Endpoint

Evaluate the integral

q=∫01ex  ln(x) dx.

This integral has a singularity at the point x=0 because ln(0) diverges to -∞.

Create an anonymous function for the integrand. The log function calculates ln(x).

Integrate f from 0 to 1.

Complex Contour Integration

Integrate a complex function around a pole by specifying a contour.

Evaluate the complex contour integral

q=∮dz2z-1.

The integrand has a simple pole at z=1/2, so use a rectangular contour that encloses that point. The contour starts and ends at x=1 on the real number line. Use the 'Waypoints' name-value pair to specify the piecewise segments in the contour.

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

Examine Absolute Error

Use quadgk to evaluate an oscillatory integrand that is difficult to evaluate.

Evaluate the integral

Q=∫0πsin(20000πx)dx.

The integrand oscillates very quickly, so it is difficult to evaluate. Use quadgk to evaluate the integral, and specify two outputs to examine how close the error tolerances are to being met.

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.

The warning message indicates how to adjust MaxIntervalCount to allow for another iteration in the solution process.

Solve the integral again, but specify MaxIntervalCount as 1e5. With many more intervals, quadgk is able to meet the absolute error tolerance for the problem (1e-10 for double precision).

[Q,errbnd] = quadgk(fun,0,pi,'MaxIntervalCount',1e5)

Input Arguments

collapse all

funIntegrand
function handle

Integrand, specified as a function handle that defines the function to be integrated
from a to b.

For scalar-valued problems, the function y = fun(x) must accept a
vector argument x and return a vector result y,
where y is the integrand evaluated at each element of
x. This requirement generally means that fun
must use array operators (.^, .*, …) instead of
matrix operators (^, *, …).

Parameterizing Functions explains how to
provide additional parameters to the function fun, if
necessary.

Example: q = quadgk(@(x) exp(1-x.^2),a,b) integrates an anonymous
function handle.

Example: q = quadgk(@myFun,a,b) integrates the function
myFun, which is saved as a file.

Data Types: function_handle

a, bIntegration limits (as separate arguments)
scalars

Integration limits, specified as separate arguments of real or complex scalars. The
limits a and b can be -Inf or
Inf. If both are finite, they can be complex. If at least one is
complex, the integral is approximated over a straight line path from
a to b in the complex plane.

Example: quadgk(fun,0,1) integrates fun from
0 to 1.

Data Types: single | double
Complex Number Support: Yes

Name-Value Arguments

Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN, where Name is
the argument name and Value is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.


Before R2021a, use commas to separate each name and value, and enclose

Name in quotes.

Example: q = quadgk(fun,a,b,'Waypoints',[0.1 1.1 2.1]) uses the
'Waypoints' option to specify a few points of interest where the
integrand should be evaluated.

AbsTolAbsolute error tolerance
1e-10 (double), 1e-5
(single)
(default) | nonnegative real number

Absolute error tolerance, specified as the comma-separated pair consisting of
'AbsTol' and a nonnegative real number.
quadgk uses the absolute error tolerance to limit an estimate
of the absolute error, |q – I|, where q is the
computed value of the integral and I is the (unknown) exact value.
quadgk might provide more decimal places of precision if you
decrease the absolute error tolerance.

quadgk attempts to satisfy

errbnd <= max(AbsTol,RelTol*abs(q))

This relation
is absolute error control when |q| is sufficiently small and
relative error control when |q| is larger. For pure absolute error
control, use 'AbsTol' > 0 and 'RelTol'= 0.
For pure relative error control use 'RelTol' > 0 and
'AbsTol' = 0. Except when using pure absolute error control, the
minimum relative tolerance is 'RelTol' >=
100*eps(class(q))
.

Example: quadgk(fun,a,b,'AbsTol',1e-12) sets the absolute error
tolerance to approximately 12 decimal places of accuracy.

Example: quadgk(fun,a,b,'AbsTol',tol,'RelTol',0) uses a purely
absolute error control, requiring that errbnd <=
tol
.

Data Types: single | double

RelTolRelative error tolerance
1e-6 (double), 1e-4
(single)
(default) | nonnegative real number

Relative error tolerance, specified as the comma-separated pair consisting of
'RelTol' and a nonnegative real number.
quadgk uses the relative error tolerance to limit an estimate
of the relative error, |q - I|/|I|, where q is
the computed value of the integral and I is the (unknown) exact
value. quadgk might provide more significant digits of precision
if you decrease the relative error tolerance.

quadgk attempts to satisfy

errbnd <= max(AbsTol,RelTol*abs(q))

This relation
is absolute error control when |q| is sufficiently small and
relative error control when |q| is larger. For pure absolute error
control, use 'AbsTol' > 0 and 'RelTol'= 0.
For pure relative error control use 'RelTol' > 0 and
'AbsTol' = 0. Except when using pure absolute error control, the
minimum relative tolerance is 'RelTol' >=
100*eps(class(q))
.

Example: quadgk(fun,a,b,'RelTol',1e-9) sets the relative error
tolerance to approximately 9 significant digits.

Example: quadgk(fun,a,b,'AbsTol',0,'RelTol',tol) uses a purely
relative error tolerance, requiring that errbnd <=
|I|*tol
.

Data Types: single | double

WaypointsIntegration waypoints
vector

Integration waypoints, specified as the comma-separated pair consisting of
'Waypoints' and a vector of real or complex numbers. Use
waypoints to indicate points in the integration interval that you would like the
integrator to use in the initial mesh:

  • Add more evaluation points near interesting features of the function, such
    as a local extrema.

  • Integrate efficiently across discontinuities of the integrand by specifying
    the locations of the discontinuities.

  • Perform complex contour integrations by specifying complex numbers as
    waypoints. If xmin, xmax, or any entry of
    the waypoints vector is complex, then the integration is performed over a
    sequence of straight line paths in the complex plane. In this case, all of the
    integration limits and waypoints must be finite.

Do not use waypoints to specify singularities. Instead, split the interval and add
the results of separate integrations with the singularities at the endpoints.

Example:
'Waypoints',[1+1i,1-1i] specifies two complex waypoints along the
interval of integration.

Data Types: single | double
Complex Number Support: Yes

MaxIntervalCountMaximum number of intervals allowed
650 (default) | scalar

Maximum number of intervals allowed, specified as a scalar. This option limits the
number of intervals that quadgk uses at any one time after the
first iteration. A warning is issued if quadgk returns early
because of this limit. Routinely increasing this value is not recommended, but it may
be appropriate when errbnd is small enough that the desired
accuracy has nearly been achieved.

Example: quadgk(fun,a,b,'MaxIntervalCount',700)

Output Arguments

collapse all

q — Value of integral
scalar

Value of integral, returned as a scalar.

errbnd — Approximate upper bound on absolute error
scalar

Approximate upper bound on absolute error, returned as a scalar. The approximate
upper bound on absolute error in the integration is errbnd = |q – I|,
where q is the computed value of the integral and
I is the (unknown) exact value. quadgk
attempts to satisfy

errbnd <= max(AbsTol,RelTol*abs(q))

Specify this
output argument to see how well the integration meets the AbsTol
and RelTol error tolerances. In cases where
errbnd is close to the desired value, you might be able to reach
the desired value by increasing the value of
MaxIntervalCount.

Tips

  • quadgk and integral use essentially the same
    integration method. You should generally use integral rather than quadgk. However, you can use
    quadgk to:

    • Monitor solution accuracy with the errbnd output
      argument.

    • Specify a large value for MaxIntervalCount when
      integral warns about reaching the maximum number of
      intervals.

  • quadgk can integrate functions that are singular at finite
    endpoints if the singularities are not too strong. For example, it can integrate functions
    that behave at an endpoint c like log|x-c| or
    |x-c|p for p >=
    -1/2
    . If the function is singular at points inside the integration limits
    [a b], then write the integral as a sum of integrals over
    subintervals with the singular points as endpoints, compute them with
    quadgk, and add the results.

  • If the interval is infinite, [a,∞), then for the integral of fun(x) to exist,
    fun(x) must decay as x approaches infinity, and
    quadgk requires it to decay rapidly.

References

[1] Shampine, L.F. «Vectorized Adaptive Quadrature in MATLAB®Journal of Computational and Applied Mathematics. Vol.
211, 2008, pp.131–140.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2007b

Системы
MatLabSciLab обладают большими возможностями
программирования и визуализации
результатов научных исследований при
решении задач вычислительной математики.
Численные методы в этих системах
предлагаются уже в виде готового
инструментария — набора функций, их
реализующих. Задачей данной работы
является ознакомление с наиболее часто
встречающимися на практике численными
методами, которые используются при
решении нелинейных уравнений, при
аппроксимации и интегрировании функций.
Приближѐнное вычисление определѐнных
интегралов. С вычислением определѐнных
интегралов самого общего вида:

приходится
сталкиваться при решении многих задач
математики, физики, химии и т.д. Как
правило, на практике получить первообразную
аналитически и затем воспользоваться
формулой Ньютона-Лейбница удаѐтся
крайне редко. В этих случаях интеграл
вычисляется приближѐнно с помощью
одного из методов численного интегрирования.
В методе трапеций используется линейная
интерполяция, т.е. подынтегральная
функция заменяется кусочно-линейной,
а еѐ график представляется в виде
ломаной, соединяющей отдельные точки
yi
= f(xi),
где xi
– координаты узлов сетки, введѐнной
на интервале интегрирования. При этом,
очевидно, на каждом из интервалов от
xi
до xi+1
искомые площади вычисляются как площади
обычных трапеций, после чего суммируются.
В итоге формула трапеций при постоянном
шаге сетки h
= xi+1
— xi
= (b
— a)/n
(n
– число интервалов разбиения сетки)
принимает вид:

Эта
схема интегрирования чрезвычайно проста
для реализации и имеет 2-ой порядок
точности относительно шага сетки. Тем
не менее, для экономии времени пользователя
в MatLab
еѐ реализовали в виде функции trapz(x,
y),
а в SciLab
– inttrap(x,
y).
Здесь x
и y
– массивы одного и того же размера 1хn,
содержащие, соответственно, координаты
узлов выбранной сетки и значения функции
в этих узлах. Не многим сложнее
оказывается формула Симпсона 4-го
порядка точности, получаемая при кусочной
интерполяции подынтегрального выражения
с помощью парабол:

В
MatLab формула Симпсона реализуется
функцией quad(fun, a, b [,tol]), где fun –
подынтегральная функция, a, b – концы
интервала интегрирования, tol – требуемая
точность (необязательный параметр).
Подынтегральная функция может быть
предварительно определена в m-файле,
тогда еѐ имя следует указать с дескриптором
@, или еѐ можно указать непосредственно
при вызове quad в виде текстовой строки,
заключѐнной в одинарные кавычки.
Например, вызов quad(@myfun, 0, 1, 1e-3) вычислит
интеграл от myfun(x) на интервале [0, 1] с
точностью 0.001. Файл функции myfun может
быть примерно следующим: function m = myfun(x)

m
= x.*x;

return

Аналогично,
производится интегрирование при
непосредственном задании функции,
например: quad(‘x.*x’,
0, 1, 1e-3).
Примечание: не забывайте, что операции
умножения, деления и возведения в степень
необходимо указывать в форме с «.», т.к.
они производятся над массивами.

Интегрирование
методом трапеций.

Приведенные
ниже функции выполняют численное
интегрирование хорошо известным методом
трапеций и методом трапеций с накоплением.


trapz(Y)
возвращает определенный интеграл,
используя интегрирование методом
трапеций с единичным шагом между
отсчетами. Если Y
– вектор, то trapz(Y)
возвращает интеграл элементов вектора
Y,
если Y
– матрица, то trapz(Y)
возвращает векторстроку, содержащую
интегралы каждого столбца этой матрицы.


trapz(X,Y)
возвращает интеграл от функции Y
по переменной X,
используя метод трапеций (пределы
интегрирования в этом случае задаются
начальным и конечным элементами вектора
X).


trapz(…,dim)
возвращает интеграл по строкам или по
столбцам для входной матрицы, в зависимости
от значения переменной dim.

Примеры:

>>
y=[1,2,3,4]

y
= 1 2 3 4

>>
trapz(y)

ans
= 7.5000

>>
X=0:pi/70:pi/2; Y=cos(X); Z = trapz(Y)

Z
= 22.2780


cumtrapz(Y)
возвращает численное значение
определенного интеграла для функции,
заданной ординатами в векторе или
матрице Y
с шагом интегрирования, равным единице
(интегрирование методом трапеций с
накоплением). В случае когда шаг отличен
от единицы, но постоянен, вычисленный
интеграл достаточно умножить на величину
шага. Для векторов эта функция возвращает
вектор, содержащий результат интегрирования
с накоплением элементов вектора Y.
Для матриц – возвращает матрицу того
же размера, что и Y,
содержащую результаты интегрирования
с накоплением для каждого столбца
матрицы Y.
cumtrapz(X,Y)
выполняет интегрирование с накоплением
от Y
по переменной X,
используя метод трапеций. X
и Y
должны быть векторами одной и той же
длины, или X
должен быть векторомстолбцом, а Y
– матрицей. cumtrapz(…,
dim)
выполняет интегрирование с накоплением
элементов по размерности, точно
определенной скаляром dim.
Длина вектора X
должна быть равна size(Y,dim).

Интегрирование
методом квадратур

Метод
трапеций обеспечивает невысокую точность
при заданном числе шагов или дает слишком
большое число шагов при вычислениях с
заданной погрешностью. Приведенные
ниже функции осуществляют интегрирование
и двойное интегрирование, используя
более точную квадратурную формулу
Симпсона или метод Гаусса–Лобатто.
Квадратура – численный метод нахождения
площади под графиком функции f(x),
то есть вычисление определенного
интеграла вида. В приведенных ниже
формулах подынтегральное выражение
fun
обычно задается или в прямых апострофах,
или в форме handleфункции.
Функции quad
и quadl
используют два различных алгоритма
квадратуры для вычисления определенного
интеграла. Функция quad
выполняет интегрирование по методу
низкого порядка, используя рекурсивное
правило Симпсона. Но она может быть
более эффективной при негладких
подынтегральных функциях или при низкой
требуемой точности вычислений. Алгоритм
quad
в MATLAB
6 изменен по сравнению с предшествовавшими
версиями, точность по умолчанию по
сравнению с версиями 5.3x
повышена в 1000 раз (с 10–3 до 10–6). Новая
функция quad1
(квадратура Лобатто) использует адаптивное
правило квадратуры Гаусса–Лобатто
очень высокого порядка. Устаревшая
функция quad8
выполняла интегрирование, используя
квадратурные формулы Ньютона–Котеса
8-го порядка. Достижимая точность
интегрирования гладких функций в MATLAB
6 поэтому также значительно выше, чем в
предшествующих версиях. quad(fun,a,b)
возвращает численное значение
определенного интеграла от заданной
функции @fun
на отрезке [a
b].
Используется значительно усовершенствованный
в MATLAB
6 адаптивный метод Симпсона. quad(fun,a,b,tol)
возвращает численное значение
определенного интеграла с заданной
относительной погрешностью tol.
По умолчанию tol=1.e–6.
Можно также использовать вектор,
состоящий из двух элементов tol
=[rel_tol
abs_tol],
чтобы точно определить комбинацию
относительной и абсолютной погрешностей.
quad(fun,a,b,tol,trace)
возвращает численное значение
определенного интеграла и при значении
trace,
не равном нулю, строит график, показывающий
ход вычисления интеграла.
quad(fun,a,b,tol,trace,P1,P2,…)
возвращает численное значение
определенного интеграла по подынтегральной
функции fun,
использует дополнительные аргументы
P1,
P2,
…, которые напрямую передаются в
подынтегральную функцию: G=fun(X,P1,P2,…).

Вычисления
двойных и тройных интегралов

Для
вычисления двойных интегралов служит
следующая функция:


dblquad(fun,inmin,inmax,outmin,outmax)
вычисляет и возвращает значение двойного
интеграла для подынтегральной функции
fun(inner,outer),
по умолчанию используя квадратурную
функцию quad.
inner
– внутренняя переменная, изменяющаяся
от inmin
до inmax,
а outer
– внешняя переменная, изменяющаяся от
outmin
до outmax.
Первый аргумент @fun
– строка, описывающая подынтегральную
функцию. Эта функция должна быть функцией
двух переменных вида fout=fun
(inner,outer).
Функция должна брать вектор inner
и скаляр outer
и возвращать вектор fout,
который является функцией, вычисленной
в outer
и в каждом значении inner.


dblquad(fun,inmin,inmax,outmin,outmax,tol,trace)
передает в функцию dblquad
параметры tol
и trace.
Смотрите справку по функции quad
для получения информации о параметрах
tol
и trace.


dblquad(fun,inmin,inmax,outmin,outmax,tol,trace,order)
передает параметры tol
и trace
для функции quad
или quadl
в зависимости от значения строки order.
Допустимые значения для параметра order
– @quad
, @quadl
или имя любого определенного пользователем
квадратурного метода с таким же вызовом
и такими же возвращаемыми параметрами,
как у функций quad
и quadl.
(Например, при проверке старых программ
можно использовать @quad8
для большей совместимости с прежними
версиями MATLAB).
По умолчанию (без параметра order)
вызывается @quad,
поскольку подынтегральные функции
могут быть не гладкими.

Пример:
пусть mфайл
integ1.m
описывает функцию 2*y*sin(x)+x/2*cos(y),
тогда вычислить двойной интеграл от
этой функции можно следующим образом:

>>
result = dblquad(@integ1,pi,2*pi,0,2*pi)

result
= -78.9574

В
систему MATLAB
6.5 была введена новая функция для
вычисления тройных интегралов. Она
имеет четыре формы записи:

triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax)

triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)

triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol,method)

triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol,method,p1,p2,…)

Параметры
этой функции уже были определены выше
(добавлены только пределы для новой
переменной z).
Пример:

>>
Q
= triplequad(‘x+y*z’,0,pi,0,1,-1,1,0.001)

Q
= 9.8696

К
сожалению, проверка данной функции на
ряде тройных интегралов показала, что
она не всегда обеспечивает вычисления.
Возможны ситуации, когда данная функция
выводит ряд сообщений об ошибках даже
для берущихся интегралов.

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

Синтаксис

Описание

пример

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 от 0 до 1.

Комплексное контурное интегрирование

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

Оцените комплексный криволинейный интеграл

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)

Исследуйте абсолютную погрешность

Используйте 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.

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

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

[Q,errbnd] = quadgk(fun,0,pi,'MaxIntervalCount',1e5)

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

свернуть все

funПодынтегральное выражение
указатель на функцию

Подынтегральное выражение в виде указателя на функцию, который задает функцию, которая будет интегрирована от 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

aBПределы интегрирования (в качестве отдельных аргументов)
скаляры

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

Пример: quadgk(fun,0,1) интегрирует fun от 0 к 1.

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

Аргументы name-value

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

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

AbsTolДопуск абсолютной погрешности
1e-10 (дважды), 1e-5 (одно) (значение по умолчанию) | неотрицательное вещественное число

Допуск абсолютной погрешности в виде разделенной запятой пары, состоящей из '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Допуск относительной погрешности
1e-6 (дважды), 1e-4 (одно) (значение по умолчанию) | неотрицательное вещественное число

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

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

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

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

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

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

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

MaxIntervalCountМаксимальное количество интервалов позволено
650 (значение по умолчанию) | скаляр

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

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

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

свернуть все

q — Значение интеграла
скаляр

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

errbnd — Аппроксимированная верхняя граница на абсолютной погрешности
скаляр

Аппроксимированная верхняя граница на абсолютной погрешности, возвращенной как скаляр. Аппроксимированной верхней границей на абсолютной погрешности в интегрировании является 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

In order to calculate integral with Gauss formula and Error value, I wrote this program in matlab:

%calculate integral with Gauss 3-point 
clc 
syms x ;
f=input('f(x)  : ');
a=input('a = : ');
b=input('b = : ');
x=.5*((b-a)*(-1*(3/5)^0.5)+(a+b));
w0f0=(5/9)*eval(f);
x=.5*((b-a)*0+(a+b));
w1f1=(8/9)*eval(f);
x=.5*((b-a)*((.6)^.5)+(a+b));
w2f2=(5/9)*eval(f);
antegral=w0f0+w1f1+w2f2;
antegral=0.5*(b-a)*antegral;
disp(antegral)

%cal Error value  = maximum of f^(6)/1570
syms x
m6=diff(f,6);
m6
m6=-1*m6;
[x,fval]=fminbnd(fun,x0,xn);
En=fval/15750;
disp (En);

this code get F(x) from command line and calculate integral.

I have 2 problem:

  1. If you enter f(x)=sin(x) ,a=0 , b=pi in command line for calculating, might see like 2.97708877614822e-009. I want to be as just number format

  2. calculating E(n) for some f(x) such as (1+x)^3 that a=0 , b=2 have an error that it must be calculated 0 but calculate 2.97708877614822e-009

0 / 0 / 0

Регистрация: 06.07.2014

Сообщений: 6

1

06.07.2014, 17:53. Показов 6510. Ответов 5


Студворк — интернет-сервис помощи студентам

на matlabe
По формуле Гаусса при n = 3 вычислить интеграл

Изображения

 



0



bossuy

9 / 9 / 0

Регистрация: 04.07.2014

Сообщений: 37

06.07.2014, 19:18

2

Айбат, как-то так…

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
clear all
clc
f = inline('sqrt(1+x.^2)');
n = 3; %3 точки
x_start=0; % начало интегрирования 
x_end=1; % конец интегрирования
x = linspace(x_start,x_end, n); % массив значений х
h = x(2)-x(1); % шаг интегрирования
 
% точное значение
tochnoe_znachenie = quad('sqrt(1+x.^2)',x_start,x_end);
 
% метод Гаусса. 
% не айс... -_- формула с википедии
znachenie_gaussa = 0;
for i=1:n-1
    a = x(i); b = x(i+1);
    znachenie_gaussa = znachenie_gaussa + (b-a)/2 *( f((a+b)/2-(b-a)/(2*sqrt(3))) + f((a+b)/2+(b-a)/(2*sqrt(3))) );
end
tochnoe_znachenie
znachenie_gaussa
pogreshnost = abs(znachenie_gaussa-tochnoe_znachenie)

По формуле Гаусса при n = 3 вычислить интеграл



3



0 / 0 / 0

Регистрация: 06.07.2014

Сообщений: 6

10.07.2014, 07:54

 [ТС]

3

спасибо, все верно! только я не могу найти откуда ты взял формулу из википедии, не могу её там найти



0



2434 / 1834 / 404

Регистрация: 15.12.2013

Сообщений: 8,201

10.07.2014, 08:00

4



0



5221 / 3552 / 372

Регистрация: 02.04.2012

Сообщений: 6,458

Записей в блоге: 17

10.07.2014, 11:33

5

Айбат, ну вот же, в самом центре самая большая формула

По формуле Гаусса при n = 3 вычислить интеграл

она полностью совпадает с формулой из строки 18
только в википедии формула для пары(двух) точек, а в программе для n точек они разбиваются на пары, считается интеграл для каждой пары по этой формуле и эти интегралы суммируются



1



0 / 0 / 0

Регистрация: 06.07.2014

Сообщений: 6

10.07.2014, 13:23

 [ТС]

6

Спасибо)) засчитали))
а можешь еще помочь? мне там надо комментарий к каждой строчки сделать, первые 13 строчек есть, а остальных нету, не поможешь?

Добавлено через 36 минут
Написать комментарии к коду вот ссылка



0



Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Гас управление ошибка при установлении защищенного соединения
  • Газон ошибка р060с
  • Гас управление личный кабинет ошибка
  • Газон ошибка p060c

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии