Re: Piecewise inside a Module or Block, I don't understand this behavior.
- To: mathgroup at smc.vnet.net
- Subject: [mg83296] Re: Piecewise inside a Module or Block, I don't understand this behavior.
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Sat, 17 Nov 2007 05:15:22 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <fhjs9v$4vg$1@smc.vnet.net>
W. Craig Carter wrote:
> I have a Piecewise function calculated in a module:
> Here is a simplifed example of something which has a
> behavior that puzzles me.
>
> a[c_, d_] :=
> Module[{e, f}, e = d^2; f = c^2;
> Return[Piecewise[{e, 0 < x < 1/2}, {f, 1/2 < x <= 1}]]];
> a[1,2] (*doen't return what I had anticipated*)
>
> (*However this does*)
> a[c_, d_] :=
> Module[{e, f}, e = d^2; f = c^2;
> Return[Piecewise[{d^2, 0 < x < 1/2}, {c^2, 1/2 < x <= 1}]]];
> a[1,2]
<snip>
All this is just about a syntax error you made.
First, note that, as posted, none of the above examples works: they both
return the same error message complaining about the erroneous structure
of the argument given to Piecewise.
In[1]:= a[c_, d_] := Module[{e, f}, e = d^2; f = c^2;
Return[Piecewise[{e, 0 < x < 1/2}, {f, 1/2 < x <= 1}]]];
a[1, 2]
a[c_, d_] := Module[{e, f}, e = d^2; f = c^2;
Return[Piecewise[{d^2, 0 < x < 1/2}, {c^2, 1/2 < x <= 1}]]];
a[1, 2]
During evaluation of In[1]:= Piecewise::pairs: The first argument
{4,0<x<1/2} of Piecewise is not a list of pairs. >>
Out[2]=
1 1
Piecewise[{e$65, 0 < x < -}, {f$65, - < x <= 1}]
2 2
During evaluation of In[1]:= Piecewise::pairs: The first argument
{4,0<x<1/2} of Piecewise is not a list of pairs. >>
Out[4]=
2 1 2 1
Piecewise[{2 , 0 < x < -}, {1 , - < x <= 1}]
2 2
The correct syntax for Piecewise is a list of lists. (Note that Return
is useless in these functions.) The following will work as expected.
In[5]:= a[c_, d_] := Module[{e, f}, e = d^2; f = c^2;
Piecewise[{{e, 0 < x < 1/2}, {f, 1/2 < x <= 1}}]];
a[1, 2]
a[c_, d_] := Module[{e, f}, e = d^2; f = c^2;
Piecewise[{{d^2, 0 < x < 1/2}, {c^2, 1/2 < x <= 1}}]];
a[1, 2]
Out[6]=
1 1
Piecewise[{{4, 0 < x < -}, {1, - < x <= 1}}]
2 2
Out[8]=
1 1
Piecewise[{{4, 0 < x < -}, {1, - < x <= 1}}]
2 2
Regards,
--
Jean-Marc