Если f
является символьным выражением, то
int(f)
попытки найти другое символьное выражение, F
, так, чтобы diff(F)
=
f
. Таким образом, int(f)
возвращает неопределенный интеграл или антипроизводную f
(если каждый существует в закрытой форме). Подобно дифференцированию,
int(f,v)
использует символьный объект v
в качестве переменной интегрирования, а не переменной, определенной symvar
. Смотрите, как int
работает путем рассмотрения этой таблицы.
Математическая операция | MATLAB® Command |
---|---|
| |
| |
g = because(at + b) |
|
|
В отличие от дифференцирования, символьное интегрирование является более сложной задачей. Много трудностей могут возникнуть в вычислении интеграла:
Антипроизводная, 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)
.
Определенное интегрирование также возможно.
Определенный интеграл | Команда |
---|---|
|
|
|
|
Вот некоторые дополнительные примеры.
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 является каким-либо положительным вещественным числом, выражением
положительная, кривая, имеющая форму звонка, которая склоняется к 0, как x склоняется к ± ∞. Можно создать пример этой кривой для a = 1/2.
syms x
a = sym(1/2);
f = exp(-a*x^2);
fplot(f)
Однако, при попытке вычислить интеграл
не присваивая значение 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)
Вычислить интеграл
для комплексных чисел a
войти
syms a x f = 1/(a^2 + x^2); F = int(f, x, -inf, inf)
Используйте syms
, чтобы очистить все предположения на переменных. Для получения дополнительной информации о символьных переменных и предположениях на них, смотрите, Удаляют Символьные Объекты и Их Предположения.
Предыдущие команды производят комплексный выход
F = (pi*signIm(1i/a))/a
Функциональный signIm
задан как:
Чтобы оценить 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
.