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

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

вычисляет частную производную 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, вводит

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

Чтобы вычислить якобиевскую матрицу, J, этого преобразования, использует функцию jacobian. Математическое обозначение for 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])