# Calculating Derivatives in IDL

**QUESTION:** I'm having trouble understanding how to calculate derivatives in IDL using the
**DERIV **function? For example, suppose I create a data set like this:

data = Findgen(100) y = 0.95 * Sin(data/5)

I know that the derivative of Sin(X) is Cos(X), so I would expect if I plot DERIV(Y) I should see a cosine function.

Plot, y dx = DERIV(y) OPlot, dx, LineStyle=2

In fact, I do, but the scale is vastly smaller than what I expect. How come?

The derivative is correct, but seems to be on the wrong scale. Why? |

** ANSWER:** We know, by the chain rule that:

d/dx(f(g(x))) = f'(g(x))*g'(x)

So, in your case:

d/dx(Sin(data/5)) = Cos(data/5) * (1/5)

The left-hand side of this equation is DERIV(Y), so you can see that if you simply multiply your answer by 5 that you will have what you want.

Plot, y dx = DERIV(y) OPlot, dx * 5, LineStyle=2

Now the derivative is plotted at the correct scale. |

Another way to find the correct answer would be to pass the function you are differentiating
to the **DERIV **function, like this:

data = Findgen(100) y = 0.95 * Sin(data/5) Plot, y dx = DERIV(data/5, y) OPlot, dx, LineStyle=2

Or, even better, perform the division first, like this:

data = Findgen(100) / 5 y = 0.95 * Sin(data) Plot, y dx = DERIV(data, y) OPlot, dx, LineStyle=2

Copyright © 2006 David W. Fanning

Last Updated 16 October 2006