Дифференцирование

Чтобы проиллюстрировать, как взять производные с помощью программного обеспечения 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) обозначает ex, и дифференцировать 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)

вычисляет частную производную 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) в сферическое (r,λ,φ) координаты, заданные x=rcosλcosφ, y=rcosλsinϕ, и z=rsinλ. Обратите внимание, что λ соответствует повышению или широте, в то время как φ обозначает азимут или долготу.

Чтобы вычислить матрицу Якобия, J, этого преобразования, используйте jacobian функция. Математическое обозначение для J

J=(x,y,z)(r,λ,φ).

В целях синтаксиса тулбокса используйте 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

dfdx

diff(f) или diff(f, x)

dfda

diff(f, a)

d2fdb2

diff(f, b, 2)

J=(r,t)(u,v)

J = jacobian([r; t],[u; v])