Чтобы проиллюстрировать, как взять производные с помощью программного обеспечения Symbolic Math Toolbox™, сначала создайте символьное выражение:
syms x f = sin(5*x);
Команда
diff(f)
дифференцирует f
относительно x
:
ans = 5*cos(5*x)
В качестве другого примера позвольте
g = exp(x)*cos(x);
где exp(x)
обозначает e
x, и дифференцировать g
:
y = diff(g)
y = exp(x)*cos(x) - exp(x)*sin(x)
Чтобы найти производную g
для заданного значения x
, подстановка x
для значения используя subs
и возвращает числовое значение, используя vpa
. Найдите производную g
при x = 2
.
vpa(subs(y,x,2))
ans = -9.7937820180676088383807818261614
Чтобы взять вторую производную g
, введите
diff(g,2)
ans = -2*exp(x)*sin(x)
Вы можете получить тот же результат, взяв производную дважды:
diff(diff(g))
ans = -2*exp(x)*sin(x)
В этом примере MATLAB® программное обеспечение автоматически упрощает ответ. Однако в некоторых случаях MATLAB может не упростить ответ, в этом случае можно использовать simplify
команда. Пример такого упрощения см. в дополнительных примерах.
Обратите внимание, что чтобы взять производную от константы, необходимо сначала задать константу как символьное выражение. Для примера введите
c = sym('5'); diff(c)
возвраты
ans = 0
Если вы просто вводите
diff(5)
MATLAB возвращает
ans = []
потому что 5
не является символическим выражением.
Чтобы дифференцировать выражение, которое содержит более одной символьной переменной, задайте переменную, которую вы хотите дифференцировать относительно. diff
затем команда вычисляет частную производную выражения относительно этой переменной. Для примера, учитывая символическое выражение
syms s t f = sin(s*t);
команда
diff(f,t)
вычисляет частную производную . Результатом является
ans = s*cos(s*t)
Чтобы дифференцировать f
относительно переменной s
, введите
diff(f,s)
который возвращает:
ans = t*cos(s*t)
Если вы не задаете переменную, которая будет дифференцироваться относительно, MATLAB выбирает переменную по умолчанию. В основном переменная по умолчанию является буквой, ближайшей к x в алфавите. Полный набор правил см. в разделе Поиск символической переменной по умолчанию. В предыдущем примере diff(f)
принимает производную от f
относительно t
потому что буква t
ближе к x в алфавите, чем буква s
является. Чтобы определить переменную по умолчанию, которую MATLAB дифференцирует относительно, используйте symvar
:
symvar(f, 1)
ans = t
Вычислим вторую производную f
относительно t
:
diff(f, t, 2)
Эта команда возвращает
ans = -s^2*sin(s*t)
Обратите внимание, что diff(f, 2)
возвращает тот же ответ, потому что t
- переменная по умолчанию.
Чтобы дополнительно проиллюстрировать diff
команда, задайте a
, b
, x
, n
, t
, и theta
в рабочем пространстве MATLAB путем ввода
syms a b x n t theta
Эта таблица иллюстрирует результаты ввода diff(f)
.
f | diff (f) |
---|---|
syms x n f = x^n; | diff(f) ans = n*x^(n - 1) |
syms a b t f = sin(a*t + b); | diff(f) ans = a*cos(b + a*t) |
syms theta f = exp(i*theta); | diff(f) ans = exp(theta*1i)*1i |
Чтобы дифференцировать функцию Бесселя первого рода, besselj(nu,z)
, в отношении z
, type
syms nu z b = besselj(nu,z); db = diff(b)
который возвращает
db = (nu*besselj(nu, z))/z - besselj(nu + 1, z)
diff
функция может также взять символьную матрицу в качестве входных входов. В этом случае дифференцирование выполняется поэлементно. Рассмотрим пример
syms a x A = [cos(a*x),sin(a*x);-sin(a*x),cos(a*x)]
который возвращает
A = [ cos(a*x), sin(a*x)] [ -sin(a*x), cos(a*x)]
Команда
diff(A)
возвраты
ans = [ -a*sin(a*x), a*cos(a*x)] [ -a*cos(a*x), -a*sin(a*x)]
Можно также выполнить дифференциацию функции вектора относительно аргумента вектора. Рассмотрим преобразование из евклидова (x, y, z) в сферическое координаты, заданные , , и . Обратите внимание, что соответствует повышению или широте, в то время как обозначает азимут или долготу.
Чтобы вычислить матрицу Якобия, J, этого преобразования, используйте jacobian
функция. Математическое обозначение для J
В целях синтаксиса тулбокса используйте l
для и f
для . Команды
syms r l f x = r*cos(l)*cos(f); y = r*cos(l)*sin(f); z = r*sin(l); J = jacobian([x; y; z], [r l f])
вернуть якобиан
J = [ cos(f)*cos(l), -r*cos(f)*sin(l), -r*cos(l)*sin(f)] [ cos(l)*sin(f), -r*sin(f)*sin(l), r*cos(f)*cos(l)] [ sin(l), r*cos(l), 0]
и команду
detJ = simplify(det(J))
возвраты
detJ = -r^2*cos(l)
Аргументы jacobian
функция может быть столбцом или векторами-строками. Более того, поскольку определяющий якобиана является довольно сложным тригонометрическим выражением, можно использовать simplify
для проведения тригонометрических замен и редукций (упрощений).
Таблица, результирующая diff
и jacobian
далее.
Математический оператор | Команда MATLAB |
---|---|
| |
| |
| |
|