Re: Function-type arguments in function definition
- To: mathgroup at smc.vnet.net
- Subject: [mg44351] Re: Function-type arguments in function definition
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Wed, 5 Nov 2003 10:02:20 -0500 (EST)
- Organization: The University of Western Australia
- References: <bo7o3k$aep$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <bo7o3k$aep$1 at smc.vnet.net>,
"Carsten Reckord" <news at reckord.de> wrote:
> I'm pretty new to Mathematica so please excuse me if this is kind of a silly
> question (though I couldn't find any answer after a full day of searching).
> I'm trying to define functions that take other functions as arguments and
> need those functions' arguments in their own definition. An example would be
> the definition of convolution:
>
> h(x)=f(x)*g(x) is defined as Integral over f(y)g(x-y) with respect to y.
>
> As you can see it is important in the definition of convolution to treat the
> arguments f and g as functions because the definition makes use of their
> arguments.
> I've seen this done in Mathematica as
>
> convolute[f_,g_,x_]:=Integrate[f[y]*g[x-y],{y,-inf,inf}]
>
> but that's not exactly what I'm looking for because I can only use function
> names as arguments to convolute[...], not arbitrary expressions in x. So I
> can't for example use it for the convolution f(s(x))*g(t(x)) without
> defining intermediate functions for f(s(x)) and g(t(x))...
>
> So, my question is if there is any way to define such a function that can
> make use of its arguments being functions and yet supports arbitrary
> expressions as its arguments?
I would do this as follows. Define your convolution operation for pure
functions f and g with variable x as
Star[f_Function, g_Function][x_] :=
Integrate[f[y] g[x - y], {y, -Infinity, Infinity}]
If you now add a rule that converts f and g to pure functions (assumed
to be functions of x),
Star[f_,g_][x_] := Star[Function[x,f], Function[x,g]][x]
then you can compute convolutions of the type you require as
Star[f[s[x]], g[t[x]]][x]
(An aside: Mathematica already has an infix notation suitable for
convolution -- the Star operator. Above I've used the InputForm, Star,
which adds rules to Star, so that you can enter input expressions as
(f[s[x]] \[Star] g[t[x]])[x]
where \[Star] is converted to the appropriate special character on
input.)
Cheers,
Paul
--
Paul Abbott Phone: +61 8 9380 2734
School of Physics, M013 Fax: +61 8 9380 1014
The University of Western Australia (CRICOS Provider No 00126G)
35 Stirling Highway
Crawley WA 6009 mailto:paul at physics.uwa.edu.au
AUSTRALIA http://physics.uwa.edu.au/~paul