Services & Resources / Wolfram Forums / MathGroup Archive

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: defining a function of functions

  • To: mathgroup at
  • Subject: [mg110474] Re: defining a function of functions
  • From: Leonid Shifrin <lshifr at>
  • Date: Sun, 20 Jun 2010 03:45:05 -0400 (EDT)


you don't need a lot more effort to accomplish what you want. Just pass a
pure function as your first parameter:


I would not recommend embedding global parameters in a function in the
fashion you did it in your code though,since you make your function
implicitly dependent on values of global variables, and this is an
invitation to trouble.  I'd either make all parameters explicit:

innerprod[f_, g_,mylist_List,l_Integer] := Sum[f[k]Conjugate[g[k]]Part[
> mylist,k],{k,1,l}]

(notice also that := (SetDelayed) is usually more appropriate to define
functions than  = (Set), and that the use of names starting with a capital
letter is better avoided).

Or, if the same length and list are used many times, I'd make a function

makeInner[innerName_Symbol, mylist_List,l_Integer]:=
innerName[f_, g_] :=Sum[f[k]Conjugate[g[k]]Part[
> mylist,k],{k,1,l}]);

then  you define your inner product function by calling makeInner, like

Clear[a, b, myInnerProd];
makeInner[myInnerProd, Range[10], 5]

In[6]:= ?myInnerProd


\*UnderoverscriptBox[\(\[Sum]\), \(k = 1\), \(5\)]\(f$[k]\ Conjugate[g$[k]]\
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}[[k]]\)\)

In[7]:= myInnerProd[a, b]

Out[7]= a[1] Conjugate[b[1]] + 2 a[2] Conjugate[b[2]] + 3 a[3]
Conjugate[b[3]] + 4 a[4] Conjugate[b[4]] + 5 a[5] Conjugate[b[5]]

Both ways, you don't mess with global variables.


On Sat, Jun 19, 2010 at 4:49 AM, J Davis <texasautiger at> wrote:

> I want to define an inner product function such as
> (here mylist is a specified list and L is a specified constant)
> innerprod[f_, g_] = Sum[f[k]Conjugate[g[k]]Part[mylist,k],{k,1,L}]
> This works fine but now I need to apply it in a situation where f is a
> function of 2 variables while g is a function of only one variable,
> i.e. I want to compute something like the inner product of f[2,n] and
> g[n].
> Of course, I want the ability to freely vary the first input of f.
> I have accomplish this before rather easily but I'm presently drawing
> a blank.
> Thanks for your help.
> Best,
> JD

  • Prev by Date: Re: whats wrong with this code ?!
  • Next by Date: Re: Why?
  • Previous by thread: Re: defining a function of functions
  • Next by thread: Re: defining a function of functions