To illustrate how to take derivatives using Symbolic Math Toolbox™ software, first create a symbolic expression:
syms x f = sin(5*x);
The command
diff(f)
differentiates f
with respect to x
:
ans = 5*cos(5*x)
As another example, let
g = exp(x)*cos(x);
where exp(x)
denotes e
^{x},
and differentiate g
:
y = diff(g)
y = exp(x)*cos(x)  exp(x)*sin(x)
To find the derivative of g
for a given value
of x
, substitute x
for the value
using subs
and return a numerical value using vpa
.
Find the derivative of g
at x = 2
.
vpa(subs(y,x,2))
ans = 9.7937820180676088383807818261614
To take the second derivative of g
, enter
diff(g,2)
ans = 2*exp(x)*sin(x)
You can get the same result by taking the derivative twice:
diff(diff(g))
ans = 2*exp(x)*sin(x)
In this example, MATLAB^{®} software automatically simplifies
the answer. However, in some cases, MATLAB might not simplify
an answer, in which case you can use the simplify
command.
For an example of such simplification, see More Examples.
Note that to take the derivative of a constant, you must first define the constant as a symbolic expression. For example, entering
c = sym('5'); diff(c)
returns
ans = 0
If you just enter
diff(5)
MATLAB returns
ans = []
because 5
is not a symbolic expression.
To differentiate an expression that contains more than one symbolic
variable, specify the variable that you want to differentiate with
respect to. The diff
command then calculates the
partial derivative of the expression with respect to that variable.
For example, given the symbolic expression
syms s t f = sin(s*t);
the command
diff(f,t)
calculates the partial derivative $$\partial f/\partial t$$. The result is
ans = s*cos(s*t)
To differentiate f
with respect to the variable s
,
enter
diff(f,s)
which returns:
ans = t*cos(s*t)
If you do not specify a variable to differentiate with respect
to, MATLAB chooses a default variable. Basically, the default
variable is the letter closest to x in the alphabet. See the complete
set of rules in Find a Default Symbolic Variable. In the preceding example, diff(f)
takes
the derivative of f
with respect to t
because
the letter t
is closer to x in the alphabet than
the letter s
is. To determine the default variable
that MATLAB differentiates with respect to, use symvar
:
symvar(f, 1)
ans = t
Calculate the second derivative of f
with
respect to t
:
diff(f, t, 2)
This command returns
ans = s^2*sin(s*t)
Note that diff(f, 2)
returns the same answer
because t
is the default variable.
To further illustrate the diff
command, define a
, b
, x
, n
, t
,
and theta
in the MATLAB workspace by entering
syms a b x n t theta
This table illustrates the results of entering 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 
To differentiate the Bessel function of the first kind, besselj(nu,z)
,
with respect to z
, type
syms nu z b = besselj(nu,z); db = diff(b)
which returns
db = (nu*besselj(nu, z))/z  besselj(nu + 1, z)
The diff
function can also take a symbolic
matrix as its input. In this case, the differentiation is done elementbyelement.
Consider the example
syms a x A = [cos(a*x),sin(a*x);sin(a*x),cos(a*x)]
which returns
A = [ cos(a*x), sin(a*x)] [ sin(a*x), cos(a*x)]
The command
diff(A)
returns
ans = [ a*sin(a*x), a*cos(a*x)] [ a*cos(a*x), a*sin(a*x)]
You can also perform differentiation of a vector function with respect to a vector argument. Consider the transformation from Euclidean (x, y, z) to spherical $$(r,\lambda ,\phi )$$ coordinates as given by $$x=r\mathrm{cos}\lambda \mathrm{cos}\phi $$, $$y=r\mathrm{cos}\lambda \mathrm{sin}\varphi $$, and $$z=r\mathrm{sin}\lambda $$. Note that $$\lambda $$ corresponds to elevation or latitude while $$\phi $$ denotes azimuth or longitude.
To calculate the Jacobian matrix, J, of this
transformation, use the jacobian
function. The
mathematical notation for J is
$$J=\frac{\partial (x,y,z)}{\partial \left(r,\lambda ,\phi \right)}.$$
For the purposes of toolbox syntax, use l
for $$\lambda $$ and f
for $$\phi $$. The commands
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])
return the Jacobian
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]
and the command
detJ = simplify(det(J))
returns
detJ = r^2*cos(l)
The arguments of the jacobian
function
can be column or row vectors. Moreover, since the determinant of the
Jacobian is a rather complicated trigonometric expression, you can
use simplify
to make trigonometric
substitutions and reductions (simplifications).
A table summarizing diff
and jacobian
follows.
Mathematical Operator  MATLAB Command 

$$\frac{df}{dx}$$ 

$$\frac{df}{da}$$ 

$$\frac{{d}^{2}f}{d{b}^{2}}$$ 

$$J=\frac{\partial (r,t)}{\partial (u,v)}$$ 
