MathGroup Archive 1995

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: plot

  • To: mathgroup at christensen.cybernetics.net
  • Subject: [mg1807] Re: plot
  • From: wagner at bullwinkle.cs.Colorado.EDU (Dave Wagner)
  • Date: Mon, 31 Jul 1995 23:08:36 -0400
  • Organization: University of Colorado, Boulder

In article <DCBwvx.544 at wri.com>, yao xiaoqiang  <x-yao at ux1.cso.uiuc.edu> wrote:
>plot of dy/dx vs. x
>
>I have a set of data(x,y). I want to get a plot of dy/dx vs x from
>the plot of y vs. x.
>
>Any suggestions?

You want to use finite differencing, I suppose.  This is easy to do
because the arithmetic operators all work on lists.

Here's some sample data.

In[16]:=
    data = Table[{x, Sin[x]}, {x,0,3.2,.2}]
Out[16]=
    {{0, 0}, {0.2, 0.198669}, {0.4, 0.389418}, 
      {0.6, 0.564642}, {0.8, 0.717356}, {1., 0.841471}, 
      {1.2, 0.932039}, {1.4, 0.98545}, {1.6, 0.999574}, 
      {1.8, 0.973848}, {2., 0.909297}, {2.2, 0.808496}, 
      {2.4, 0.675463}, {2.6, 0.515501}, {2.8, 0.334988}, 
      {3., 0.14112}, {3.2, -0.0583741}}

This computes the difference between successive points, in the form
of {dx, dy}.  The rule converts those pairs into slopes.

In[26]:=
    slopes = Drop[data,1] - Drop[data,-1] /. {dx_,dy_}->dy/dx
Out[26]=
    {0.993347, 0.953745, 0.876121, 0.763568, 0.620574, 
      0.452841, 0.267053, 0.0706194, -0.12863, -0.322751, 
      -0.504005, -0.665166, -0.799809, -0.902566, -0.969341, -0.997471}

Similarly, this computes the midpoint between successive points, and
the rule extracts just the x-components.

In[27]:=
midpoints = (Drop[data,1] + Drop[data,-1])/2 /. {x_,_}->x
Out[27]=
{0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.9, 
  2.1, 2.3, 2.5, 2.7, 2.9, 3.1}

Put 'em all together:

In[29]:=
    derivdata = Transpose[{midpoints, slopes}]
Out[29]=
    {{0.1, 0.993347}, {0.3, 0.953745}, {0.5, 0.876121}, 
      {0.7, 0.763568}, {0.9, 0.620574}, {1.1, 0.452841}, 
      {1.3, 0.267053}, {1.5, 0.0706194}, {1.7, -0.12863}, 
      {1.9, -0.322751}, {2.1, -0.504005}, {2.3, -0.665166}, {2.5, -0.799809}, 
      {2.7, -0.902566}, {2.9, -0.969341}, {3.1, -0.997471}}

This plot should look like the cosine function.

In[30]:=
    ListPlot[derivdata, PlotJoined->True]
Out[30]=
    -Graphics-

I hope this helps!

		Dave Wagner
		Principia Consulting
		(303) 786-8371
		dbwagner at princon.com
		http://www.princon.com/princon


  • Prev by Date: Re: Bugs with transcendental functions?
  • Next by Date: TeX to Mathematica ???
  • Previous by thread: plot
  • Next by thread: [Q] Real time processing support