Accelerating the pace of engineering and science

Symbolic Math Toolbox

Differentiation

This example shows how to find first and second derivatives using Symbolic Math Toolbox™.

First Derivatives: Finding Local Minima and Maxima

Computing the first derivative of an expression helps you find local minima and maxima of that expression. For example, create the rational expression where the numerator and denominator are polynomial expressions. Before creating a symbolic expression, you declare symbolic variables. By default, solutions that include imaginary components are included in the result. If you are interested in real numbers only, you can set the assumption that x belongs to the set of real numbers. This assumption allows you to avoid complex numbers in symbolic solutions and it also can improve performance:

```syms x real;
f = (3*x^3 + 17*x^2 + 6*x + 1)/(2*x^3 - x + 3)
```
```
f =

(3*x^3 + 17*x^2 + 6*x + 1)/(2*x^3 - x + 3)

```

Plotting this expression shows that the expression has horizontal and vertical asymptotes, a local minimum between -1 and 0, and a local maximum between 1 and 2:

```ezplot(f)
hold on
grid
hold off
```

To find a horizontal asymptote, compute the limit of f for x approaching positive and negative infinities. The horizontal asymptote is x = 3/2:

```limit(f, x, -inf)
limit(f, x, inf)
```
```
ans =

3/2

ans =

3/2

```

To find a vertical asymptote of f, find the roots of the polynomial expression that represents the denominator of f:

```solve(2*x^3 - x + 3, x)
```
```
ans =

- 1/(6*(3/4 - (241^(1/2)*432^(1/2))/432)^(1/3)) - (3/4 - (241^(1/2)*432^(1/2))/432)^(1/3)

```

You can approximate the exact solution numerically by using the double function. To access the result of the previous evaluation, use the default variable name ans:

```double(ans)
```
```ans =

-1.2896

```

Now find the local minimum and maximum of f. If the point is a local extremum (either minimum or maximum), the first derivative of the expression at that point is equal to zero. To compute the derivative of an expression, use the diff function:

```g = diff(f, x)
```
```
g =

(9*x^2 + 34*x + 6)/(2*x^3 - x + 3) - ((6*x^2 - 1)*(3*x^3 + 17*x^2 + 6*x + 1))/(2*x^3 - x + 3)^2

```

To find the local extrema of f, solve the equation g = 0:

```solve(g, x)
```
```
ans =

((2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3))/1156 + 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3) + 361/289)^(1/2)/(6*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/6)) - ((337491*6^(1/2)*((3*3^(1/2)*178939632355^(1/2))/9826 + 2198209/9826)^(1/2))/39304 + (2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3)*((2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3))/1156 + 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3) + 361/289)^(1/2))/578 - 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3)*((2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3))/1156 + 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3) + 361/289)^(1/2) - (361*((2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3))/1156 + 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3) + 361/289)^(1/2))/289)^(1/2)/(6*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/6)*((2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3))/1156 + 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3) + 361/289)^(1/4)) - 15/68
((2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3))/1156 + 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3) + 361/289)^(1/2)/(6*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/6)) + ((337491*6^(1/2)*((3*3^(1/2)*178939632355^(1/2))/9826 + 2198209/9826)^(1/2))/39304 + (2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3)*((2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3))/1156 + 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3) + 361/289)^(1/2))/578 - 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3)*((2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3))/1156 + 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3) + 361/289)^(1/2) - (361*((2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3))/1156 + 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3) + 361/289)^(1/2))/289)^(1/2)/(6*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/6)*((2841*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(1/3))/1156 + 9*((3^(1/2)*178939632355^(1/2))/176868 + 2198209/530604)^(2/3) + 361/289)^(1/4)) - 15/68

```

And again approximate the exact solution numerically by using the double function applied to ans:

```double(ans)
```
```ans =

-0.1892
1.2860

```

The expression f has a local maximum at x = 1.286 and a local minimum at x = -0.189

Second Derivatives: Finding Inflection Points

Computing the second derivative lets you find inflection points of the expression. The most efficient way to compute second or higher-order derivatives is to use the parameter that specifies the order of the derivative:

```h = diff(f, x, 2)
```
```
h =

(18*x + 34)/(2*x^3 - x + 3) - (2*(6*x^2 - 1)*(9*x^2 + 34*x + 6))/(2*x^3 - x + 3)^2 - (12*x*(3*x^3 + 17*x^2 + 6*x + 1))/(2*x^3 - x + 3)^2 + (2*(6*x^2 - 1)^2*(3*x^3 + 17*x^2 + 6*x + 1))/(2*x^3 - x + 3)^3

```

To find inflection points of f, solve the equation h = 0. Here, use the numeric solver to calculate floating-point % approximations of the solutions:

```vpasolve(h, x)
```
```
ans =

0.57871842655441748319601085860196
1.8651543689917122385037075917613
- 0.46088831805332057449182335801198 + 0.47672261854520359440077796751805*i
- 0.46088831805332057449182335801198 - 0.47672261854520359440077796751805*i
- 1.4228127856020972275345064554049 + 1.8180342567480118987898749770461*i
- 1.4228127856020972275345064554049 - 1.8180342567480118987898749770461*i

```

The expression f has two inflection points: x = 1.865 and x = 0.579