Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a set of points like this: P = {{$x_1$,$y_1$},{$x_2$,$y_2$},...,{$x_n$,$y_n$}}. I want to plot them and also plot the derivative of that graph. How can I do this with Mathematica? Is there a simple way in Mathematica?

share|improve this question
In this answer to a related question I suggested to use DerivativeFilter for this purpose. That answer would apply here too (I guess the questions are somewhat different but I tried to make my earlier answer more general so that it now turns out to cover your case...) – Jens Nov 27 '12 at 3:52
Oh, thanks for the answer. – Ana Nov 27 '12 at 5:02
up vote 7 down vote accepted

Here is some sample data, hopefully of the sort you are looking for

a=Table[{i, i^2 - 3 i + 2 + 0.3 Random[]}, {i, -1, 3, 0.1}];

will display the data.

Mathematica graphics

This will create a derivable interpolation.

b = Interpolation[a, Method -> "Spline"];

This is its derivative

c = b';

Plot them together.

Plot[Evaluate[{b[x], c[x]}], {x, -1, 3}]

Mathematica graphics

share|improve this answer
Now, you may also want to try FindFit, based on the model that represents your experimental data, and then take derivate of the function. – Zviovich Nov 27 '12 at 3:15
Yeah, it worked. Thanks. – Ana Nov 27 '12 at 5:01
Finite differences and interpolation will give a somewhat smoother fit. That might or might not be desirable depending on actual needs. Here is the code to compare to. d = .1; derivs = Table[(a[[j + 1, 2]] - a[[j-1, 2]])/(2*d), {j, 2, Length[a] - 1}];derivs2 = Transpose[{Range[-1 + .1, 3 - .1, .1], derivs}]; c = Interpolation[derivs2, Method -> "Spline"]; – Daniel Lichtblau Nov 28 '12 at 17:43

This is the data (taken from the previous example):

a = Table[{i, i^2 - 3 i + 2 + 0.3 Random[]}, {i, -1, 3, 0.1}];

This is derivatives calculated in each point except the first:

derA = Differences[a] /. {x_, y_} -> y/x;

here we combine it into the list of pairs:

lst=Transpose[{Drop[Transpose[a][[1]], 1], derA}];

Now we can plot it along with the initial list:

    ListLinePlot[{a, Transpose[{Drop[Transpose[a][[1]], 1], derA}]}, 
 PlotStyle -> {Blue, Red}]

That is what you get: enter image description here

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.