Re: Combining pure functions to produce a new pure
- To: mathgroup at smc.vnet.net
- Subject: [mg89812] Re: Combining pure functions to produce a new pure
- From: Mac <mwjdavidson at googlemail.com>
- Date: Sat, 21 Jun 2008 05:30:43 -0400 (EDT)
- References: <g3fvuf$kt5$1@smc.vnet.net>
Works like a charm. Sometimes the easiest solutions are the best. Many thanks. On Jun 20, 12:14 pm, Bob Hanlon <hanl... at cox.net> wrote: > Try > > h[f1_Function, f2_Function] := > Function[x, {f1[x], f2[x]}]; > > Bob Hanlon > > ---- Mac <mwjdavid... at googlemail.com> 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 > > >http://groups.google.com/group/comp.soft-sys.math.mathematica/browse_... > > /thread/b1faadec497c657d/5cc40d169d8992b4?lnk=gst&q=pure+function+#5cc4= > > 0d169d8992b4 > > > 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 > > > 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