Re: piecewise function

*To*: mathgroup at smc.vnet.net*Subject*: [mg109200] Re: piecewise function*From*: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>*Date*: Fri, 16 Apr 2010 05:53:41 -0400 (EDT)

Hi, to answer your question (which is maybe not the answer you want): Your definition for s[x] makes only sense when x is a numerical value in the interval [a,b]. For all other values it gives 0. PiecewiseExpand on your s, no matter what value x has, makes never sense, since you can only expand expression that contain If-statements or nested Piecewise's. Your s[x] gives a number. What should be expanded? The PiecewiseExpand never sees your definition, only the result of the evaluation. <<<< end answer Please, (please!), never ever use "N" as variable. N is a function. Look it up in the documentation center. This is bad style. I don't now exactly what you want but say you have a list of the y-values your piecewise-defined function should have inside the interval [a,b]: data = Table[Sin[x], {x, 0, Pi, Pi/15.}] then you could define a function which makes a Piecewise function for you: makePiecewise[values : {__?NumericQ}, a_?NumericQ, b_?NumericQ, var_Symbol] := Piecewise[ Transpose[{values, (#1 <= var <= #2) & @@@ Partition[Table[x, {x, a, b, (b - a)/Length[values]}], 2, 1]}], 0] func=makePiecewise[data, 0, Pi, x] Plot[func,{x,0,Pi}] Cheers Patrick On Wed, 2010-04-14 at 23:14 -0400, mircea wrote: > I want a define a piecewise constant function on an interval [a,b]. > What I did is: > > s[x_] := Module[{out}, out = 0; > For[i = 1, i <= N, i++, > If[mesh[[i]] <= x < mesh[[i + 1]], > out = (mesh[[i]] + mesh[[i + 1]])/2; Break[]]]; out]; > > where: > mesh={x_1,x_2,..,x_{N+1} }, a=x_1<x_2<..<x_{N+1}=b > > However > > PiecewiseExpand /@ s[x] > > gives me 0..... > > Can you please help me? > Thanks, > Mirela >