       Re: Piecewise function generator

• To: mathgroup at christensen.cybernetics.net
• Subject: [mg1155] Re: Piecewise function generator
• From: pasquale Nardone <pnardon at ulb.ac.be>
• Date: Sat, 20 May 1995 01:03:20 -0400
• Organization: Universite' Libre de Bruxelles

```You can define a function that compute the coefficient a and b in the
linear expression a*x+b and the segment where this hold

fff[{pt1_,pt2_}]:={
LessEqual[pt1[],x,pt2[]],
Apply[Divide,Reverse[pt2-pt1]]*x-Det[{pt1,pt2}]/Apply[Plus,(pt2-pt1)*{1,0}]
};

then you can use recursive tricks
fff[{pt1_,pt2_,restOfpts__}]:=Join[fff[{pt1,pt2}],fff[{pt2,restOfpts}]];

and it will work
pts={{20,0.08},{50,0.8},{250,0.8},{5000,0.004}};
g[x_]=Apply[Which,fff[pts]];

nb: of course fff could be define more easily using explicit
representation:

hhh[{{x1_,y1_},{x2_,y2_}}]:={
LessEqual[x1,x,x2],
((y2-y1)*x+y1*x2-y2*x1)/(x2-x1)};

hhh[{pt1_,pt2_,restOfpts__}]:=Join[hhh[{pt1,pt2}],hhh[{pt2,restOfpts}]]

g[x_]=Apply[Which,hhh[pts]]

Out[]
Which[20 <= x <= 50, (-12. + 0.72*x)/30, 50 <= x <= 250, (160. + 0.*x)/200,
250 <= x <= 5000, (3999. - 0.796*x)/4750]

and if you want to have the possibility to define your variable name :

qqq[{{x1_, y1_}, {x2_, y2_}}, var_] := {x1 <= x <= x2, ((y2 - y1)*var +
y1*x2 - y2*x1)/(x2 - x1)};

qqq[{pt1_, pt2_, restOfpts__}, var_] := Join[qqq[{pt1, pt2}, var],
qqq[{pt2, restOfpts}, var]];

gnew[t_]:=Apply[Which,qqq[pts,t]]

gnew[X]
Out[]
Which[20 <= x <= 50, (-12. + 0.72*X)/30, 50 <= x <= 250, (160. + 0.*X)/200,
250 <= x <= 5000, (3999. - 0.796*X)/4750]

I hope this could help

P. Nardone

```

• Prev by Date: Re: Q: How to load packages inside a package
• Next by Date: triangular phase diagram
• Previous by thread: Re: Piecewise function generator
• Next by thread: Re: Piecewise function generator