## 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 `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.

### 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*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 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 Cartesian coordinates (x, y, z) to spherical coordinates $\left(r,\lambda ,\phi \right)$ 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])```