Re: UnitStep Argument
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg672] Re: [mg628] UnitStep Argument
- From: bob Hanlon <hanlon at pafosu2.hq.af.mil>
- Date: Sat, 8 Apr 1995 10:03:59 +45722824 (EDT)
On Fri, 7 Apr 1995, bob Hanlon wrote: > On Sat, 1 Apr 1995, Roger M. Jones wrote: > > > How can I define > > UnitStep[-x], so that the answer is zero > > (.i.e. assign x as being a positive number). > > Defining: > > > > x/:Positive[x]=True doesn't work. > > > > > > Many thanks. > > > > --- > > Regards, > > > > Roger > > (rmj at llewelyn.slac.stanford.edu) > > > > Here are two simple approaches: > > In[1]:= > z /: Positive[z] = True; > > In[2]:= > UnitStep1[-x_] := 1 - UnitStep1[x]; > UnitStep1[x_] := If[Positive[x], 1, 0]; > > In[4]:= > {UnitStep1[-4], UnitStep1[-0], UnitStep1[0], UnitStep1[4], > UnitStep1[-z], UnitStep1[z], UnitStep1[-y], UnitStep1[y]} > > Out[4]= > {0, 0, 0, 1, 0, 1, 1 - If[Positive[y], 1, 0], If[Positive[y], 1, 0]} > > In[5]:= > UnitStep2[-x_] := 1 - UnitStep2[x]; > UnitStep2[x_?Positive] := 1; > UnitStep2[x_?Negative] := 0; > UnitStep2[x_ /; x == 0] := 0; > > In[9]:= > {UnitStep2[-4], UnitStep2[-0], UnitStep2[0], UnitStep2[4], > UnitStep2[-z], UnitStep2[z], UnitStep2[-y], UnitStep2[y]} > > Out[9]= > {0, 0, 0, 1, 0, 1, 1 - UnitStep2[y], UnitStep2[y]} > > There is a problem with the solutions which I provided as shown below. In[1]:= z /: Positive[z] = True; UnitStep1[-x_] := 1 - UnitStep1[x]; UnitStep1[ x_] := If[ Positive[x], 1, 0 ]; In[4]:= { UnitStep1[-4], UnitStep1[0], UnitStep1[4], UnitStep1[z], UnitStep1[-z], UnitStep1[y], UnitStep1[-y], UnitStep1[-y /. y -> 0], UnitStep1[-y] /. y -> 0 } Out[4]= {0, 0, 1, 1, 0, If[Positive[y], 1, 0], 1 - If[Positive[y], 1, 0], 0, 1} Note that the substitutions in the last two cases above give conflicting results. The same problem exists for UnitStep2: UnitStep2[-x_] := 1 - UnitStep2[x]; UnitStep2[ x_?Positive ] := 1; UnitStep2[ x_?Negative ] := 0; UnitStep2[ x_ /; x == 0 ] := 0; In[9]:= { UnitStep2[-4], UnitStep2[0], UnitStep2[4], UnitStep2[z], UnitStep2[-z], UnitStep2[y], UnitStep2[-y], UnitStep2[-y /. y -> 0], UnitStep2[-y] /. y -> 0 } Out[9]= {0, 0, 1, 1, 0, UnitStep2[y], 1 - UnitStep2[y], 0, 1} The following definition, UnitStep3, provides consistent results: UnitStep3[-x_ /; Positive[x] ] := 0; UnitStep3[ x_ /; Positive[x] ] := 1; UnitStep3[ x_ /; !Positive[x] ] := 0; In[13]:= { UnitStep3[-4], UnitStep3[0], UnitStep3[4], UnitStep3[z], UnitStep3[-z], UnitStep3[y], UnitStep3[-y], UnitStep3[-y /. y -> 0], UnitStep3[-y] /. y -> 0 } Out[13]= {0, 0, 1, 1, 0, UnitStep3[y], UnitStep3[-y], 0, 0}