Combining pure functions to produce a new pure function
- To: mathgroup at smc.vnet.net
- Subject: [mg89705] Combining pure functions to produce a new pure function
- From: Mac <mwjdavidson at googlemail.com>
- Date: Wed, 18 Jun 2008 06:40:29 -0400 (EDT)
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= /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