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

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

int(f)

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

int(f,v)

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

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

MATLAB® Command

xndx={журнал(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 может выполнить символьное интегрирование успешно. Например, создайте символьные переменные

syms a b theta x y n u z

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

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 = double(a)

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

a =
    0.0717

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

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

eax2

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

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

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

eax2dx

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

syms a
assume(a > 0)

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

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

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

ans =
pi^(1/2)/a^(1/2)

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

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

1a2+x2dx

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

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

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

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

F = 
(pi*signIm(1i/a))/a

Функциональный signIm задан как:

вход в систему(z)={1если \Im(z)>0, или \Im(z)=0 и z<00если  z=0-1в противном случае.

Чтобы оценить F в a = 1 + i, войти

g = subs(F, 1 + i)
g = 
pi*(1/2 - 1i/2)
double(g)
ans =
   1.5708 - 1.5708i

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

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

Интегрируйте 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.