Re: Function-type arguments in function definition
- To: mathgroup at smc.vnet.net
- Subject: [mg44356] Re: Function-type arguments in function definition
- From: poujadej at yahoo.fr (Jean-Claude Poujade)
- Date: Wed, 5 Nov 2003 10:02:32 -0500 (EST)
- References: <bo7o3k$aep$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
"Carsten Reckord" <news at reckord.de> wrote in message news:<bo7o3k$aep$1 at smc.vnet.net>...
> Hi,
>
> 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?
>
> Thanks,
> Carsten
If f and g are expressions, instead of functions,
one needs an extra argument telling the name
of the variable used in f and g (it's not necessarily 'x').
Example :
In[1]:=ClearAll[convolute];
convolute[f_,g_,x_]:=
Integrate[f[y]*g[x-y],{y,-Infinity,Infinity}];
(* 'u' is the variable used in expressions f and g *)
convolute[f_,g_,u_,x_]:=
Integrate[(f /. u -> y)*(g /. u ->(x-y)),{y,-Infinity,Infinity}];
In[2]:=f1[x_]:=E^(-x^2);
f2[x_]:=E^(-x^2);
convolute[f1,f2,x]
Out[2]=Sqrt[Pi/2]/E^(x^2/2)
In[3]:=exp1=E^(-u^2);
exp2=E^(-u^2);
convolute[exp1,exp2,u,x]
Out[3]=Sqrt[Pi/2]/E^(x^2/2)
---
jcp