MathGroup Archive 1999

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

Search the Archive

Re: Step functions

  • To: mathgroup at
  • Subject: [mg17159] Re: [mg17097] Step functions
  • From: BobHanlon at
  • Date: Sun, 18 Apr 1999 00:59:44 -0400
  • Sender: owner-wri-mathgroup at

In a message dated 4/17/99 9:06:41 AM, alessio.massaro at writes:

>Can anyone help me to build a step function out of a series of {x,y} pairs?
>For ex.., consider an ordered random {x,y} series like
>data=Sort[Table[{Random[],Random[]}, {10}], First[#1]<First[#2]&]
>I would like to build a function f[ { {x1, y1}, {x2, y2}, ...}, x ], that
>evaluates to:
>- y[i]        if x=x[i]
>- y[i+1]    if x[i]<x<x[i+1]
>Here each point {xi, yi} determines f over the left-open interval
>x[i]<x<=x[i+1] of x.
>The right-open interval version would be:
>- y[i]        if x=x[i]
>- y[i]        if x[i]<x<x[i+1]
>Since I do not check the newsgroup regularly, I'll greatly appreciate
>replies sent to my e-mail address as well as the NG itself.


You did not specify how you wanted the function to handle the cases of 
x < x[1] or x > x[Length[data]], so this is set up to return unevalated in 
those cases.

data=Sort[Table[{Random[],Random[]}, {10}]];

Note that the default Sort order does what you want.

f[steps_List, x_?NumericQ] := 
	Module[{ss = Select[data, #[[1]] >= x&]}, 
		If[Length[ss] == 1, ss[[1, 1]], 
			If[ss[[1, 1]] == x, ss[[1, 2]], 
				ss[[2, 1]]]]] /; steps[[1, 1]] <=x <= 

Plot[Evaluate[f[data, x]], {x, First[First[data]], First[Last[data]]}];

Bob Hanlon

  • Prev by Date: ListPlotFit
  • Next by Date: LogLogListPlot
  • Previous by thread: Re: Step functions
  • Next by thread: RE: Step functions