Re: Boolean 0/1 function
- To: MathGroup at yoda.physics.unc.edu
- Subject: Re: Boolean 0/1 function
- From: villegas
- Date: Tue, 3 Nov 92 08:07:55 CST
Joseph McWilliams asked how to define a Boolean function which returns 1 or 0 (instead of the Mathematica Booleans 'True' and 'False'): > I am trying to recursively define a piecewise function in the > following manner: > > ======================== > s=0 > For[i=0,i<=(n-1), i++, > s = s + f[y,x[i]]*Indicator[y,x[i],x[i+1]] > ] > ======================== > > I would like Indicator[y,x[i],x[i+1]] to equal 1 if x[i]<= y <=x[i+1] > and 0 otherwise. You could define a function which maps the symbol 'True' to 1, and 'False' to 0: BooleanBit[True] = 1 BooleanBit[False] = 0 Then apply attach this function to any expression whose output you expect to be 'True' or 'False'. For instance, the inequality you wrote: s=0 For[i=0,i<=(n-1), i++, s = s + f[y,x[i]] * BooleanBit[ x[i] <= y <= x[i+1] ] ] If you wished, you could define BooleanBit to return some flag for cases where a test returns neither 'True' nor 'False', which could happen if you ever had symbols involved in the comparison instead of numbers. An alternative way to code this computation, more Mathematica-esque in that it is structural and functional, could go something like: (* Initialization of values *) xlist = {x1, x2, ..., xn} (where any 'xi' stands for the value of 'x[i]' in your code) y = <whatever> (the value you had for 'y') (* Computation *) fvalues = Map[f[y, #]&, Drop[xlist, -1] ] consecutivepairs = Partition[xlist, 2, 1] boolvalues = Apply[BooleanBit[#1 <= y <= #2]&, consecutivepairs, {1}] total = Apply[Plus, fvalues * boolvalues] The 'fvalues' could also be without using any pure functions, with a structural command: fvalues = Thread[ f[y, xlist] ] as long as 'y' isn't a list itself (if it's a number, say). Robby Villegas Technical Support Wolfram Research