MathGroup Archive 2010

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

Search the Archive

More universal way of writing gradient


Hi,

My question is not related to the gradient at all, but rather strictly 
the grammar of Mathematica. Gradient is just an example.

My question is: what's the elegant way to write the following function 
so that it applies to single functions as well as ("rectangular") lists 
of functions?

grad[u_] := {Derivative[1, 0][u], Derivative[0, 1][u]}
gradList[u_] := {Map[Derivative[1, 0], u, {2}],
   Map[Derivative[0, 1], u, {Length[Dimensions[u]]}]}

f[x_, y_] := Sin[x] Exp[y]
Through[grad[f][x, y]] // MatrixForm
gradList[{{f, f}, {f, f}}] //
   Map[Apply[#, {x, y}] &, #, {Length[Dimensions[#]]}] & // MatrixForm

I'm sure I could wrap grad and gradList into a function with an If, but 
I'm sure there is a more natural way.

Thank you in advance,

Sam

PS: Using Map[Apply[]] in the second case because Through doesn't seem 
to work with Lists of Lists. This is the subject of an earlier post...


  • Prev by Date: Re: For loop outputs to a list
  • Next by Date: Re: For loop outputs to a list
  • Previous by thread: simultaneous and constrained interpolation?
  • Next by thread: Re: More universal way of writing gradient