MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

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



  • Prev by Date: Re: Problems with FindRoot and recursive functions
  • Next by Date: Re: Browsing for a Directory
  • Previous by thread: Re: Combining pure functions to produce a new pure
  • Next by thread: Re: Browsing for a Directory