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
>