       Re: A simple question?

• To: mathgroup at smc.vnet.net
• Subject: [mg3654] Re: A simple question?
• From: Count Dracula <lk3a at kelvin.seas.virginia.edu>
• Date: Sun, 31 Mar 1996 00:53:30 -0500
• Sender: owner-wri-mathgroup at wolfram.com

```In article <4jd5ej\$pmr at dragonfly.wolfram.com>, nader at math.chalmers.se

> For a function f[x,y] I want to create a
> 2x2x2x2 matrix called fourthDs. The elements of fourthDs will be the
> fourth derivatives of f with respect to x and y in the following form:
>      fourthDs[[1,1,1,1]]=D[f[x,y],{x,4}]
>      fourthDs[[2,2,2,2]]=D[f[x,y],{y,4}]
>      fourthDs[[1,2,1,1]]=D[f[x,y],{x,3},{y,1}]

For a function f with arguments vars, and maxord = maximum order
of derivative needed in the matrix, the function dmatrix will
create such a matrix. The function G stores its values for
unique argument lists:

G[F_, vars__][args__] /; OrderedQ[{args}] :=
G[F, vars][args] = D[F[vars], args]

G[z__][args__] := G[z] @@ Sort[{args}]

dmatrix[f_Symbol, vars__Symbol, maxord_Integer] :=
Outer[ G[f, vars], Sequence @@ Table[{vars}, {maxord}] ]

For example:

In:= f1[x_, y_] := x^4 y^3

In:= mat1 = dmatrix[f1, x, y, 4]

3        2          2      2              2      2          2        3
Out= {{{{24 y , 72 x y }, {72 x y , 72 x  y}}, {{72 x y , 72 x  y}, {72 x  y, 24 x }}},

2      2          2        3          2        3        3
{{{72 x y , 72 x  y}, {72 x  y, 24 x }}, {{72 x  y, 24 x }, {24 x , 0}}}}

The storage by G is 5 elements:

In:= ?G
Global`G

G[f1, x, y][x, x, x, x] = 24*y^3

G[f1, x, y][x, x, x, y] = 72*x*y^2

G[f1, x, y][x, x, y, y] = 72*x^2*y

G[f1, x, y][x, y, y, y] = 24*x^3

G[f1, x, y][y, y, y, y] = 0

G[F_, vars__][args__] /; OrderedQ[{args}] := G[F, vars][args] = D[F[vars], args]

G[z__][args__] := Apply[G[z], Sort[{args}]]

In:= mat1[[1, 2, 1, 1]] == D[f1[x, y], {x, 3}, {y, 1}]

Out= True

In:= f2[x_, y_, z_] := Sin[x y z]

In:= mat2 = dmatrix[f2, x, y, z, 5];

In:= Dimensions[mat2]

Out= {3, 3, 3, 3, 3}

In:= mat2[[2, 1, 3, 1, 2]] == D[f2[x, y, z], {x, 2}, {y, 2}, {z, 1}]

Out= True

The matrix mat2 in this example has 243 elements but the required storage
by G is 21. It should be possible to use G directly. If it is called
with different arrangements of arguments, G will not have to recalculate
beyond the maximum 21 functions needed:

In:= G[f2, x, y, z][y, x, z, x, x]

2  2               2  4  4                   3  3
Out= -9 y  z  Cos[x y z] + x  y  z  Cos[x y z] + 7 x y  z  Sin[x y z]

--
___________________________________________________________________________________
Levent Kitis           lk3a at cars.mech.virginia.edu    lk3a at kelvin.seas.virginia.edu
University of Virginia Department of Mechanical, Aerospace, and Nuclear Engineering

==== [MESSAGE SEPARATOR] ====

```

• Prev by Date: Re: re:ANOVA
• Next by Date: Re: Mathematica on Win95
• Previous by thread: A simple question?
• Next by thread: Re: A simple question?