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