Интеграл ошибок матлаб

Main Content

Syntax

Description

example

erfinv(X) computes
the inverse
error function of X. If X is
a vector or a matrix, erfinv(X) computes the inverse
error function of each element of X.

Examples

Inverse Error Function for Floating-Point and Symbolic Numbers

Depending on its arguments, erfinv can
return floating-point or exact symbolic results.

Compute the inverse error function for these numbers. Because
these numbers are not symbolic objects, you get floating-point results:

A = [erfinv(1/2), erfinv(0.33), erfinv(-1/3)]
A =
    0.4769    0.3013   -0.3046

Compute the inverse error function for the same numbers converted
to symbolic objects. For most symbolic (exact) numbers, erfinv returns
unresolved symbolic calls:

symA = [erfinv(sym(1)/2), erfinv(sym(0.33)), erfinv(sym(-1)/3)]
symA =
[ erfinv(1/2), erfinv(33/100), -erfinv(1/3)]

Use vpa to approximate symbolic results
with the required number of digits:

d = digits(10);
vpa(symA)
digits(d)
ans =
[ 0.4769362762, 0.3013321461, -0.3045701942]

Inverse Error Function for Variables and Expressions

For most symbolic variables and expressions, erfinv returns
unresolved symbolic calls.

Compute the inverse error function for x and sin(x)
+ x*exp(x)
. For most symbolic variables and expressions, erfinv returns
unresolved symbolic calls:

syms x
f = sin(x) + x*exp(x);
erfinv(x)
erfinv(f)
ans =
erfinv(x)
 
ans =
erfinv(sin(x) + x*exp(x))

Inverse Error Function for Vectors and Matrices

If the input argument is a vector or a matrix, erfinv returns
the inverse error function for each element of that vector or matrix.

Compute the inverse error function for elements of matrix M and
vector V:

M = sym([0 1 + i; 1/3 1]);
V = sym([-1; inf]);
erfinv(M)
erfinv(V)
ans =
[           0, NaN]
[ erfinv(1/3), Inf]

ans =
 -Inf
  NaN

Special Values of Inverse Complementary Error Function

erfinv returns special
values for particular parameters.

Compute the inverse error function for x =
–1
, x =
0
, and x =
1
. The inverse error function has special values
for these parameters:

[erfinv(-1), erfinv(0), erfinv(1)]

Handling Expressions That Contain Inverse Complementary Error Function

Many functions, such as diff and int,
can handle expressions containing erfinv.

Compute the first and second derivatives of the inverse error
function:

syms x
diff(erfinv(x), x)
diff(erfinv(x), x, 2)
ans =
(pi^(1/2)*exp(erfinv(x)^2))/2
 
ans =
(pi*exp(2*erfinv(x)^2)*erfinv(x))/2

Compute the integral of the inverse error function:

ans =
-exp(-erfinv(x)^2)/pi^(1/2)

Plot Inverse Error Function

Plot the inverse error function on the interval from -1 to 1.

syms x
fplot(erfinv(x),[-1,1])
grid on

Figure contains an axes object. The axes object contains an object of type functionline.

Input Arguments

collapse all

XInput
symbolic number | symbolic variable | symbolic expression | symbolic function | symbolic vector | symbolic matrix

Input, specified as a symbolic number, variable, expression,
or function, or as a vector or matrix of symbolic numbers, variables,
expressions, or functions.

More About

collapse all

Inverse Error Function

The inverse error function is defined as erf -1(x), such that erf(erf -1(x)) = erf -1(erf(x)) = x. Here

is the error function.

Tips

  • Calling erfinv for a number that
    is not a symbolic object invokes the MATLAB® erfinv function. This function accepts
    real arguments only. If you want to compute the inverse error function
    for a complex number, use sym to
    convert that number to a symbolic object, and then call erfinv for
    that symbolic object.

  • If x < –1 or x > 1, or if x is
    complex, then erfinv(x) returns NaN.

Algorithms

The toolbox can simplify expressions that contain error functions
and their inverses. For real values x, the toolbox
applies these simplification rules:

  • erfinv(erf(x)) = erfinv(1 - erfc(x)) = erfcinv(1
    - erf(x)) = erfcinv(erfc(x)) = x

  • erfinv(-erf(x)) = erfinv(erfc(x) - 1) = erfcinv(1
    + erf(x)) = erfcinv(2 - erfc(x)) = -x

For any value x, the toolbox applies these
simplification rules:

  • erfcinv(x) = erfinv(1 - x)

  • erfinv(-x) = -erfinv(x)

  • erfcinv(2 - x) = -erfcinv(x)

  • erf(erfinv(x)) = erfc(erfcinv(x)) = x

  • erf(erfcinv(x)) = erfc(erfinv(x)) = 1 - x

References

[1] Gautschi, W. “Error Function and Fresnel Integrals.” Handbook
of Mathematical Functions with Formulas, Graphs, and Mathematical
Tables.
(M. Abramowitz and I. A. Stegun, eds.). New York:
Dover, 1972.

Version History

Introduced in R2012a

  • Trial Software
  • Trial Software
  • Product Updates
  • Product Updates

Системы
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

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

Интегрирование

Если f символьное выражение, затем

попытки найти другое символьное выражение, F, так, чтобы diff(F) = f. Таким образом, int(f) возвращает неопределенный интеграл или антипроизводную f (если каждый существует в закрытой форме). Подобно дифференцированию,

использует символьный объект v когда переменная интегрирования, а не переменная определяется symvar. Смотрите как int работает путем рассмотрения этой таблицы.

Математическая операция

MATLAB® Команда

∫xndx={log(x)если n=−1xn+1n+1в противном случае.

int(x^n) или int(x^n,x)

∫0π/2sin(2x)dx=1

int(sin(2*x), 0, pi/2) или int(sin(2*x), x, 0, pi/2)

g = because(at + b)

∫g(t)dt=sin(at+b)/a

g = cos(a*t + b) int(g) или int(g, t)

∫J1(z)dz=−J0(z)

int(besselj(1, z)) или int(besselj(1, z), z)

В отличие от дифференцирования, символьное интегрирование является более сложной задачей. Много трудностей могут возникнуть в вычислении интеграла:

  • Антипроизводная, F, может не существовать в закрытой форме.

  • Антипроизводная может задать незнакомую функцию.

  • Антипроизводная может существовать, но программное обеспечение не может найти его.

  • Программное обеспечение могло найти антипроизводную на более крупном компьютере, но заканчивается время или память на доступной машине.

Тем не менее, во многих случаях, MATLAB может выполнить символьное интегрирование успешно. Например, создайте символьные переменные

Следующая таблица иллюстрирует интегрирование выражений, содержащих те переменные.

f

int (f)

syms x n
f = x^n;
int(f)
ans =
piecewise(n == -1, log(x), n ~= -1,...
 x^(n + 1)/(n + 1))
syms y
f = y^(-1);
int(f)
ans =
log(y)
syms x n
f = n^x;
int(f)
ans =
n^x/log(n)
syms a b theta
f = sin(a*theta+b);
int(f)
ans =
-cos(b + a*theta)/a
syms u
f = 1/(1+u^2);
int(f)
ans =
atan(u)
syms x
f = exp(-x^2);
int(f)
ans =
(pi^(1/2)*erf(x))/2

В последнем примере, exp(-x^2), нет никакой формулы для интеграла включающих стандартных выражений исчисления, таких как тригонометрические и показательные функции. В этом случае MATLAB дает ответ в терминах функции ошибок erf.

Если MATLAB не может найти ответ на интеграл функционального f, это только возвращает int(f).

Определенное интегрирование также возможно.

Определенный интеграл

Команда

∫abf(x)dx

int(f, a, b)

∫abf(v)dv

int(f, v, a, b)

Вот некоторые дополнительные примеры.

f

a, B

int (f, a, b)

syms x
f = x^7;
a = 0;
b = 1;
int(f, a, b)
ans =
1/8
syms x
f = 1/x;
a = 1;
b = 2;
int(f, a, b)
ans =
log(2)
syms x
f = log(x)*sqrt(x);
a = 0;
b = 1;
int(f, a, b)
ans =
-4/9
syms x
f = exp(-x^2);
a = 0;
b = inf;
int(f, a, b)
ans =
pi^(1/2)/2
syms z
f = besselj(1,z)^2;
a = 0;
b = 1;
int(f, a, b)
ans =
hypergeom([3/2, 3/2],...
          [2, 5/2, 3], -1)/12

Для Функции Бесселя (besselj) пример, возможно вычислить числовое приближение к значению интеграла, с помощью double функция. Команды

syms z
a = int(besselj(1,z)^2,0,1)

возврат

a =
hypergeom([3/2, 3/2], [2, 5/2, 3], -1)/12

и команда

возвращается

Интеграция с действительными параметрами

Одна из тонкости, вовлеченной в символьное интегрирование, является “значением” различных параметров. Например, если a является каким-либо положительным вещественным числом, выражением

положительная, кривая, имеющая форму звонка, которая стремится к 0, как x стремится к ± ∞. Можно создать пример этой кривой для a = 1/2.

syms x
a = sym(1/2);
f = exp(-a*x^2);
fplot(f)

Figure contains an axes object. The axes object contains an object of type functionline.

Однако, при попытке вычислить интеграл

не присваивая значение a, MATLAB принимает, что a представляет комплексное число, и поэтому дает кусочный ответ, который зависит от аргумента a. Если вы только интересуетесь случаем, когда a является положительным вещественным числом, используйте assume установить предположение на a:

Теперь можно вычислить предыдущий интеграл с помощью команд

syms x
f = exp(-a*x^2);
int(f, x, -inf, inf)

Это возвращается

Интеграция с комплексными параметрами

Вычислить интеграл

для комплексных чисел a, войти

syms a x 
f = 1/(a^2 + x^2);
F = int(f, x, -inf, inf)

Используйте syms очистить все предположения на переменных. Для получения дополнительной информации о символьных переменных и предположениях на них, смотрите, Удаляют Символьные Объекты и Их Предположения.

Предыдущие команды производят комплексный выход

Функция signIm задан как:

Оценивать F в a = 1 + i, войти

Численное интегрирование высокой точности Используя арифметику Переменной Точности

Численное интегрирование высокой точности реализовано в vpaintegral функция Symbolic Math Toolbox™. vpaintegral арифметика переменной точности использования в отличие от MATLAB integral функция, которая использует арифметику с двойной точностью.

Интегрируйте besseli(5,25*u).*exp(-u*25) при помощи обоих integral и vpaintegral. integral функция возвращает NaN и выдает предупреждение в то время как vpaintegral возвращает правильный результат.

syms u
f = besseli(5,25*x).*exp(-x*25);
fun = @(u)besseli(5,25*u).*exp(-u*25);

usingIntegral = integral(fun, 0, 30)
usingVpaintegral = vpaintegral(f, 0, 30)
Warning: Infinite or Not-a-Number value encountered. 
usingIntegral =
   NaN

usingVpaintegral =
0.688424

Для получения дополнительной информации смотрите vpaintegral.

If f is a symbolic expression, then

attempts to find another symbolic expression, F, so that
diff(F) = f. That is,
int(f) returns the indefinite integral or antiderivative of
f (provided one exists in closed form). Similar to
differentiation,

uses the symbolic object v as the variable of integration, rather than
the variable determined by symvar. See how int works by
looking at this table.

Mathematical Operation

MATLAB® Command

∫xndx={log(x)if n=−1xn+1n+1otherwise.

int(x^n) or
int(x^n,x)

∫0π/2sin(2x)dx=1

int(sin(2*x), 0, pi/2) or int(sin(2*x), x,
0, pi/2)

g  =  cos(at +
b)

∫g(t)dt=sin(at+b)/a

g = cos(a*t + b) int(g) or int(g,
t)

∫J1(z)dz=−J0(z)

int(besselj(1, z)) or int(besselj(1, z),
z)

In contrast to differentiation, symbolic integration is a more complicated task. A number
of difficulties can arise in computing the integral:

  • The antiderivative, F, may not exist in closed form.

  • The antiderivative may define an unfamiliar function.

  • The antiderivative may exist, but the software can’t find it.

  • The software could find the antiderivative on a larger computer, but runs out of time
    or memory on the available machine.

Nevertheless, in many cases, MATLAB can perform symbolic integration successfully. For example, create the symbolic
variables

The following table illustrates integration of expressions containing those
variables.

f

int(f)

syms x n
f = x^n;
int(f)
ans =
piecewise(n == -1, log(x), n ~= -1,...
 x^(n + 1)/(n + 1))
syms y
f = y^(-1);
int(f)
ans =
log(y)
syms x n
f = n^x;
int(f)
ans =
n^x/log(n)
syms a b theta
f = sin(a*theta+b);
int(f)
ans =
-cos(b + a*theta)/a
syms u
f = 1/(1+u^2);
int(f)
ans =
atan(u)
syms x
f = exp(-x^2);
int(f)
ans =
(pi^(1/2)*erf(x))/2

In the last example, exp(-x^2), there is no formula for the integral
involving standard calculus expressions, such as trigonometric and exponential functions. In
this case, MATLAB returns an answer in terms of the error function erf.

If MATLAB is unable to find an answer to the integral of a function f,
it just returns int(f).

Definite integration is also possible.

Definite Integral

Command

∫abf(x)dx

int(f, a, b)

∫abf(v)dv

int(f, v, a, b)

Here are some additional examples.

f

a, b

int(f, a, b)

syms x
f = x^7;
a = 0;
b = 1;
int(f, a, b)
ans =
1/8
syms x
f = 1/x;
a = 1;
b = 2;
int(f, a, b)
ans =
log(2)
syms x
f = log(x)*sqrt(x);
a = 0;
b = 1;
int(f, a, b)
ans =
-4/9
syms x
f = exp(-x^2);
a = 0;
b = inf;
int(f, a, b)
ans =
pi^(1/2)/2
syms z
f = besselj(1,z)^2;
a = 0;
b = 1;
int(f, a, b)
ans =
hypergeom([3/2, 3/2],...
          [2, 5/2, 3], -1)/12

For the Bessel function (besselj) example, it is possible to compute a
numerical approximation to the value of the integral, using the double function. The commands

syms z
a = int(besselj(1,z)^2,0,1)

return

a =
hypergeom([3/2, 3/2], [2, 5/2, 3], -1)/12

and the command

returns

Integration with Real Parameters

One of the subtleties involved in symbolic integration is the “value” of
various parameters. For example, if a is any positive real number, the
expression

is the positive, bell shaped curve that tends to 0 as x tends to ±∞. You can create an example of this curve, for a = 1/2.

syms x
a = sym(1/2);
f = exp(-a*x^2);
fplot(f)

Figure contains an axes object. The axes object contains an object of type functionline.

However, if you try to calculate the integral

without assigning a value to a, MATLAB assumes that a represents a complex number, and therefore
returns a piecewise answer that depends on the argument of a. If you are
only interested in the case when a is a positive real number, use
assume to set an assumption on a:

Now you can calculate the preceding integral using the commands

syms x
f = exp(-a*x^2);
int(f, x, -inf, inf)

This returns

Integration with Complex Parameters

To calculate the integral

for complex values of a, enter

syms a x 
f = 1/(a^2 + x^2);
F = int(f, x, -inf, inf)

Use syms to clear all the assumptions on variables. For more
information about symbolic variables and assumptions on them, see Use Assumptions on Symbolic Variables.

The preceding commands produce the complex output

The function signIm is defined as:

Cartesian representation of a complex number z, showing regions where signIm has a value of 1, 0, and -1

To evaluate F at a = 1 + i, enter

High-Precision Numerical Integration Using Variable-Precision Arithmetic

High-precision numerical integration is implemented in the vpaintegral function of the Symbolic Math Toolbox™. vpaintegral uses variable-precision arithmetic in
contrast to the MATLAB
integral function, which uses
double-precision arithmetic.

Integrate besseli(5,25*u).*exp(-u*25) by using both
integral and vpaintegral. The
integral function returns NaN and issues a
warning while vpaintegral returns the correct result.

syms u
f = besseli(5,25*x).*exp(-x*25);
fun = @(u)besseli(5,25*u).*exp(-u*25);

usingIntegral = integral(fun, 0, 30)
usingVpaintegral = vpaintegral(f, 0, 30)
Warning: Infinite or Not-a-Number value encountered. 
usingIntegral =
   NaN

usingVpaintegral =
0.688424

For more information, see vpaintegral.

See Also

int | diff | vpaintegral

External Websites

  • Calculus Integrals (MathWorks Teaching Resources)

Syntax

Description

example

q = integral(fun,xmin,xmax) numerically
integrates function fun from xmin to xmax using
global adaptive quadrature and default error tolerances.

example

q = integral(fun,xmin,xmax,Name,Value) specifies
additional options with one or more Name,Value pair
arguments. 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

Improper Integral

Create the function f(x)=e-x2(lnx)2.

fun = @(x) exp(-x.^2).*log(x).^2;

Evaluate the integral from x=0 to x=Inf.

Parameterized Function

Create the function f(x)=1/(x3-2x-c) with one parameter, c.

fun = @(x,c) 1./(x.^3-2*x-c);

Evaluate the integral from x=0 to x=2 at c=5.

q = integral(@(x) fun(x,5),0,2)

See Parameterizing Functions for more information on this technique.

Singularity at Lower Limit

Create the function f(x)=ln(x).

Evaluate the integral from x=0 to x=1 with the default error tolerances.

format long
q1 = integral(fun,0,1)

Evaluate the integral again, this time with 12 decimal places of accuracy. Set RelTol to zero so that integral only attempts to satisfy the absolute error tolerance.

q2 = integral(fun,0,1,'RelTol',0,'AbsTol',1e-12)

Complex Contour Integration Using Waypoints

Create the function f(z)=1/(2z-1).

Integrate in the complex plane over the triangular path from 0 to 1+1i to 1-1i to 0 by specifying waypoints.

q = integral(fun,0,0,'Waypoints',[1+1i,1-1i])

Vector-Valued Function

Create the vector-valued function f(x)=[sinx,sin2x,sin3x,sin4x,sin5x] and integrate from x=0 to x=1. Specify 'ArrayValued',true to evaluate the integral of an array-valued or vector-valued function.

fun = @(x)sin((1:5)*x);
q = integral(fun,0,1,'ArrayValued',true)
q = 1×5

    0.4597    0.7081    0.6633    0.4134    0.1433

Improper Integral of Oscillatory Function

Create the function f(x)=x5e-xsinx.

fun = @(x)x.^5.*exp(-x).*sin(x);

Evaluate the integral from x=0 to x=Inf, adjusting the absolute and relative tolerances.

format long
q = integral(fun,0,Inf,'RelTol',1e-8,'AbsTol',1e-13)

Input Arguments

collapse all

funIntegrand
function handle

Integrand, specified as a function handle, which defines the
function to be integrated from xmin to xmax.

For scalar-valued problems, the function y = fun(x) must accept a vector
argument, x, and return a vector result, y. This
generally means that fun must use array operators instead of matrix
operators. For example, use .* (times) rather
than * (mtimes). If you set the
'ArrayValued' option to true, then
fun must accept a scalar and return an array of fixed size.

xminLower limit of x
real number | complex number

Lower limit of x, specified as a real (finite
or infinite) scalar value or a complex (finite) scalar value. If either xmin or xmax are
complex, then integral approximates the path
integral from xmin to xmax over
a straight line path.

Data Types: double | single
Complex Number Support: Yes

xmaxUpper limit of x
real number | complex number

Upper limit of x, specified as a real number
(finite or infinite) or a complex number (finite). If either xmin or xmax are
complex, integral approximates the path integral
from xmin to xmax over a straight
line path.

Data Types: double | single
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: integral(fun,a,b,'AbsTol',1e-12) sets the absolute error tolerance
to approximately 12 decimal places of accuracy.

AbsTolAbsolute error tolerance
1e-10 (default) | nonnegative real number

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

Note

AbsTol and RelTol work
together. integral might satisfy the absolute
error tolerance or the relative error tolerance, but not necessarily
both. For more information on using these tolerances, see the Tips section.

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

Data Types: single | double

RelTolRelative error tolerance
1e-6 (default) | nonnegative real number

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

Note

RelTol and AbsTol work
together. integral might satisfy the relative
error tolerance or the absolute error tolerance, but not necessarily
both. For more information on using these tolerances, see the Tips section.

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

Data Types: single | double

ArrayValuedArray-valued function flag
false or 0 (default) | true or 1

Array-valued function flag, specified as the comma-separated pair consisting of
'ArrayValued' and a numeric or logical 1
(true) or 0 (false). Set
this flag to true or 1 to indicate that
fun is a function that accepts a scalar input and returns a
vector, matrix, or N-D array output.

The default value of false indicates that fun is a
function that accepts a vector input and returns a vector output.

Example:
integral(fun,a,b,'ArrayValued',true) indicates that the integrand
is an array-valued function.

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:
integral(fun,a,b,'Waypoints',[1+1i,1-1i]) specifies two complex
waypoints along the interval of integration.

Data Types: single | double
Complex Number Support: Yes

Tips

  • The integral function attempts to satisfy:

    abs(q - Q) <= max(AbsTol,RelTol*abs(q))

    where
    q is the computed value of the integral and Q is
    the (unknown) exact value. The absolute and relative tolerances provide a way of trading
    off accuracy and computation time. Usually, the relative tolerance determines the accuracy
    of the integration. However if abs(q) is sufficiently small, the
    absolute tolerance determines the accuracy of the integration. You should generally
    specify both absolute and relative tolerances together.

  • If you are specifying single-precision limits of integration, or if
    fun returns single-precision results, you might need to specify
    larger absolute and relative error tolerances.

References

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

Extended Capabilities

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

Usage notes and limitations:

  • You must enable support for variable-size arrays.

  • The integral function does not support function handles that
    return sparse matrix output.

Thread-Based Environment
Run code in the background using MATLAB® backgroundPool or accelerate code with Parallel Computing Toolbox™ ThreadPool.

This function fully supports thread-based environments. For
more information, see Run MATLAB Functions in Thread-Based Environment.

Version History

Introduced in R2012a

Понравилась статья? Поделить с друзьями:
  • Интеграл ошибок лапласа
  • Инструменты человеческого фактора для предотвращения ошибок
  • Интеграл ошибок erf
  • Интеграл вероятностей и функция ошибок
  • Инструменты предотвращения ошибок персонала росатом