Jacobian -- Applying Outer to lists

*To*: mathgroup at yoda.physics.unc.edu*Subject*: Jacobian -- Applying Outer to lists*From*: "Anthony Varghese" <avarg at s1.arc.umn.edu>*Date*: Wed, 31 Mar 93 16:46:34 CST

Netters, I am trying to construct a Newton iteration scheme for a system of several variables using Maeder's Newton.m (p. 85 of "Programming in Mathematica") as a starting point. I am running into a number of hitches having to do with the computation of the jacobian. So, here is the basic problem as I see it: I have a system of, say 3, equations that I will call "dvdt": In[1]:= dvdt = { {x^2 + y^2}, {y + 2 z^2}, {x - y^3 + z} } dvdt is a function of a system of three variables, called "v": In[2]:= v = {x, y, z} Here is where the problems start. In the single variable Newton method, Maeder denotes the dependence of dvdt on v with a pure Function: NewtonZero[expr_, x_, x0_] := NewtonZero[ Function[x, expr], x0 ] However, this does not seem to do the right thing in the case where x and expr are lists: In[3]:= f = Function[v, dvdt] Out[3]= Function[v, dvdt] In[4]:= jacf = Outer[D,f,v] Outer::heads: Heads List and Function at positions 3 and 2 are expected to be the same. Out[4]= Outer[D, Function[v, dvdt], {x, y, z}] Mma did not make the substitutions I thought it would make and therefore, the Jacobian computation could not be made. Am I missing something crucial in Function? I decided to try to cast "dvdt" explicitly in terms of the v[[i]]s: In[1]:= v = {x, y, z} Out[1]= {x, y, z} In[2]:= dvdt = {{v[[1]]^2 + v[[2]]^2},{v[[2]] + 2 v[[3]]^2}, {v[[1]]-v[[2]]^3+v[[3]]} } 2 2 2 3 Out[2]= {{x + y }, {y + 2 z }, {x - y + z}} In[3]:= f = Function[v, dvdt] Out[3]= Function[v, dvdt] In[4]:= jacf = Outer[D,f,v] Outer::heads: Heads List and Function at positions 3 and 2 are expected to be the same. Out[4]= Outer[D, Function[v, dvdt], {x, y, z}] Same thing! How can I tell Mma that dvdt is a function of a list of variables and then have it use this information to compute the Jacobian? Thanks in advance, Tony Varghese