RE: Functions of Functions
- To: mathgroup at smc.vnet.net
- Subject: [mg49631] RE: [mg49598] Functions of Functions
- From: "David Park" <djmp at earthlink.net>
- Date: Sun, 25 Jul 2004 02:55:34 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Michael,
I always find this kind of thing difficult and maybe others will give you a
more direct method. There is a package at my web site called
Algebra`PushThrough` that is useful for working with operators. It basically
extends the Through command. But I only use one routine from it, which I
reproduce here.
PushOnto::usage =
"PushOnto[argslist, ontolist][expr] is a form of the Through command
that \
pushes arguments only onto forms given in the ontolist.\n\
PushOnto[ontolist][(head)[args]] pushes args onto forms given in the \
ontolist";
PushOnto[argslist_List, ontolist_List][expr_] :=
Module[{onto = Alternatives @@ ontolist},
expr /. (h_ /; ¬ FreeQ[h, onto]) @@
argslist :> (h /. a_ /; MatchQ[a, onto] -> a @@ argslist)
]
PushOnto[ontolist_List][(head_)[arglist___]] :=
Module[{onto = Alternatives @@ ontolist},
head /. a_ /; MatchQ[a, onto] :> a[arglist]
]
Then I would do your case as follows...
Clear[a, b, c, f]
a := Function[x, Sin[x] + x^2/2];
b[f_] := Derivative[2][f] + 3/2Derivative[1][f] + 5f;
c[x_] := b[a][x] // PushOnto[{Function[__]}]
c[x] // Simplify
(1/2)*(2 + 3*x + 5*x^2 + 3*Cos[x] + 8*Sin[x])
David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/
From: Michael J Person [mailto:mjperson at mit.edu]
To: mathgroup at smc.vnet.net
Hello,
I was wondering if anyone could help me with this.
I've gone through the book and help files as best I can, but
can't seem to figure out why the following doesn't work:
I'm trying to work with functions that take functions
as parameters and return other functions.
Below is an example...
(*clear stuff*)
Clear[a, b, c, x]
(*Define a functions a*)
\!\(a[x_] := \((Sin[x] + x\^3\/2)\)\)
(*define a function of functions*)
\!\(b[f_] = \((f'' + \(3\ f'\)\/2 + 5 f)\)\)
(*apply the functional function to a*)
c = b[a]
(*Try to apply the resulting function to something*)
c[x]
This last step never gives me the results I'd expect by applying
the derivatives of a to x...
Can anyone tell me where I've gone horribly wrong?
Thanks much,
MJ Person
mjperson at mit.edu