Accelerating the pace of engineering and science

# Documentation

## Differentiation

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 ex, and differentiate g:

`diff(g)`
```ans =
exp(x)*cos(x) - exp(x)*sin(x)```

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.

### Derivatives of Expressions with Several Variables

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.

### More Examples

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*i)*i```

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 element-by-element. 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 $\left(r,\lambda ,\phi \right)$ 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 \left(x,y,z\right)}{\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}$

diff(f) or diff(f, x)

$\frac{df}{da}$

diff(f, a)

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

diff(f, b, 2)

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

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