MathGroup Archive 1996

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

Search the Archive

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
(Nader Tajvidi) writes:

> 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[2]:= f1[x_, y_] := x^4 y^3

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

                3        2          2      2              2      2          2        3
Out[3]= {{{{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[4]:= ?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[4]:= mat1[[1, 2, 1, 1]] == D[f1[x, y], {x, 3}, {y, 1}]

Out[4]= True

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

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

In[7]:= Dimensions[mat2]

Out[7]= {3, 3, 3, 3, 3}

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

Out[8]= 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[9]:= G[f2, x, y, z][y, x, z, x, x]

             2  2               2  4  4                   3  3
Out[9]= -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?