Re: Combining pure functions to produce a new pure function
- To: mathgroup at smc.vnet.net
- Subject: [mg89745] Re: Combining pure functions to produce a new pure function
- From: Oliver Ruebenkoenig <ruebenko at uni-freiburg.de>
- Date: Thu, 19 Jun 2008 05:45:51 -0400 (EDT)
- References: <g3aomo$3o$1@smc.vnet.net>
Hi Mac, On Wed, 18 Jun 2008, Mac wrote: > I have a function where one of the arguments is supposed to be a list > of pure functions. Tyhis is useful for an algorithm that can run using > multiple input functions. Based on a previous post some time ago is this perhaps helpful: Through[{# + 1 &, # + 2 &}[1]] > http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_thread= > /thread/b1faadec497c657d/5cc40d169d8992b4?lnk=gst&q=pure+function+#5cc4= > 0d169d8992b4 seems broken. > a method was proposed to address this. If I apply this method to list > arguments I get the following code and results: > > In[60]:= h[f1_, f2_] := > Function[x, > Evaluate[{f1[x], f2[x]} /. > HoldPattern[Function[a_, b_]] -> Function[a, b][x]]] > > Combine two simple pure functions - works as expected > > In[58]:= h[# + 1 &, # + 2 &] > %[1] > > Out[58]= Function[x$, {1 + x$, 2 + x$}] > > Out[59]= {2, 3} > > Combine two custom functions and I get the internal details of one > function and with the second one evaluated properly f["1", n_] := -n f["2", n_] := n res = h[f["1", #] &, f["2", #] &] res[2] seems to work. How do your custom functions look like? Oliver Try to give a function that does not work. > > In[66]:= h[forwardmodel["letoan", #] &, forwardmodel["saatchiphv", #] > &] > %[100] > > Out[66]= Function[x$, {If[-10. - 32./biomass$491^0.434294 <= -15, > 10 Log[10, 10^(\[Gamma]1$491/10) Sin[27 =B0]], > 10 Log[10, 10^(\[Gamma]2$491/10) Sin[27 =B0]]], > If[x$ > 2, -35.01 + 4.296 Log[x$], -35.01 + 4.296 Log[2]]}] > > Out[67]= {If[-10. - 32./biomass$491^0.434294 <= -15, > 10 Log[10, 10^(\[Gamma]1$491/10) Sin[27 =B0]], > 10 Log[10, 10^(\[Gamma]2$491/10) Sin[27 =B0]]], -15.2262} > > I can see that this effect is due to the evaluations of the function > > forwardmodel["letoan", #] & > > so that the output no longer depends on the pure function variable $x. > Note that separately these functions work as expected. Here some > predicted radar backscatter coefficients. > > In[69]:= forwardmodel["letoan", #] &[100] > forwardmodel["saatchiphv", #] &[100] > > Out[69]= -17.6312 > > Out[70]= -15.2262 > > Can annybody suggest a general solution ? > > Many thanks > > Mac > > > > > Oliver Ruebenkoenig, <ruebenko AT uni-freiburg.de>