       Re: More universal way of writing gradient

• To: mathgroup at smc.vnet.net
• Subject: [mg112919] Re: More universal way of writing gradient
• From: Bob Hanlon <hanlonr at cox.net>
• Date: Wed, 6 Oct 2010 03:14:12 -0400 (EDT)

```Perhaps a different approach would work easier

vars = Table[v[i], {i, Length[{arg}]}];
(D[f @@ vars, #] & /@ vars) /.

{Derivative[1, 0][f][x, y], Derivative[0, 1][f][x, y]}

{Derivative[1, 0][f][1, 2], Derivative[0, 1][f][1, 2]}

{{Derivative[1, 0][f][x, y], Derivative[0, 1][f][x, y]},
{Derivative[1, 0][g][x, y], Derivative[0, 1][g][x, y]}}

{{{Derivative[1, 0][f][x, y], Derivative[0, 1][f][x, y]},
{Derivative[1, 0][g][x, y], Derivative[0, 1][g][x, y]}},
{{Derivative[1, 0][h][x, y], Derivative[0, 1][h][x, y]},
{Derivative[1, 0][i][x, y], Derivative[0, 1][i][x, y]}}}

Bob Hanlon

---- Sam Takoy <sam.takoy at yahoo.com> wrote:

=============
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]
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.