Re: Piecewise inside a Module or Block, I don't understand this behavior.
- To: mathgroup at smc.vnet.net
- Subject: [mg83284] Re: Piecewise inside a Module or Block, I don't understand this behavior.
- From: Szabolcs Horvát <szhorvat at gmail.com>
- Date: Sat, 17 Nov 2007 05:09:04 -0500 (EST)
- References: <fhjs9v$4vg$1@smc.vnet.net>
W. Craig Carter wrote: > Hello, > > 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*) You did not explain what kind of behaviour you expected ... I do not see anything wrong with the *behaviour* of this example. But I would like to note that Piecewise is used incorrectly (it should be Piecewise[{{e, 0 < x < 1/2}, {f, 1/2 < x <= 1}}]), 'x' is not defined, Return[] is not needed at the end of Module[], and ';' is not needed at the end of a := definition. This is what I get: In[1]:= a[c_, d_] := Module[{e, f}, e = d^2; f = c^2; Return[Piecewise[{e, 0 < x < 1/2}, {f, Inequality[1/2, Less, x, LessEqual, 1]}]]]; a[1, 2] (* original *) 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]= Piecewise[{e$65, 0 < x < 1/2}, {f$65, Inequality[1/2, Less, x, LessEqual, 1]}] In[3]:= a[c_, d_] := Module[{e, f}, e = d^2; f = c^2; Piecewise[{{e, 0 < x < 1/2}, {f, Inequality[1/2, Less, x, LessEqual, 1]}}]] a[1, 2] (* corrected version *) Out[4]= Piecewise[{{4, 0 < x < 1/2}, {1, Inequality[1/2, Less, x, LessEqual, 1]}}] In[5]:= x = 0.3; a[c_, d_] := Module[{e, f}, e = d^2; f = c^2; Piecewise[{{e, 0 < x < 1/2}, {f, Inequality[1/2, Less, x, LessEqual, 1]}}]] a[1, 2] (* 'x' is defined *) Out[7]= 4 (Sorry about the ugly InpuForm ... just paste it into Mathematic and press CTRL-SHIFT-N to convert the inequalities to a more readable form.) Szabolcs > (*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] > > (*The same goes for Block, and putting an explicit Evaluate > inside the local function*) > > (*This behavior seems to be unique to Piecewise*) > a[c_, d_] := > Module[{e, f}, e = d^2; f = c^2; > Return[MyFunction[{e, 0 < x < 1/2}, {f, 1/2 < x <= 1}]]]; > a[1,2] > > I can't find anything about Piecewise, or in Module and > Block documentation that gives me a hint. > > Anyone know what is going on? > > Thanks, Craig > > PS: I have a work-around: > > aAlt[c_, d_] := > Module[{e, f}, e = d^2; f = c^2; > {{e, 0 < x < 1/2}, {f, 1/2 < x <= 1}}]; > Piecewise@aAlt[1,2] > > but, I am still curious.... >