implicit derivative problem



Robert Dodier wrote:
> On 1/4/08, S. Newhouse <sen1 at math.msu.edu> wrote:
>
>   
>> /* the following example will fill the array f with derivatives
>> array(f,2,3,function)
>> f[0,0]:x^2+y^3-z^4=0
>> implicit_derivative(f,[x,y],[2,3],z) */
>>
>> (%i2) load(impdiff);
>> (%o2)      /usr/local/share/maxima/5.14.0/share/contrib/impdiff.mac
>> (%i3) array(f,2,3,function);
>> (%o3)                                  f
>> (%i4) f[0,0]:x^2+y^3-z^4=0;
>>                                  4    3    2
>> (%o4)                         - z  + y  + x  = 0
>> (%i5) implicit_derivative(f,[x,y],[2,3],z);
>>
>> Second argument to `fillarray' must be an array or list:
>> makeOrders([x, y], [2, 3])
>> #0:
>> implicit_derivative(f=f,indvarlist=[x,y],orderlist=[2,3],depvar=z)(impdiff.mac
>> line 36)
>>  -- an error.  To debug this try debugmode(true);
>>     
>
> I think there are 2 problems here.
> (1) You need load("makeOrders") first.
> (2) The array(f,2,3,function) isn't needed by Maxima, and its presence
> triggers an error about something not being an array. Seems to work
> OK if it is omitted.
>
> (%i1) display2d : false;
> (%o1) false
> (%i2) load (impdiff);
> (%o2) "/usr/local/share/maxima/5.14.0cvs/share/contrib/impdiff.mac"
> (%i3) load ("makeOrders");
> (%o3) "/usr/local/share/maxima/5.14.0cvs/share/contrib/makeOrders.mac"
> (%i4) f[0,0] : x^2 + y^3 - z^4 = 0;
> (%o4) -z^4+y^3+x^2 = 0
> (%i5) implicit_derivative (f, [x, y], [2, 3], z);
> (%o5) munlocal()
> (%i6) arrayinfo (f);
> (%o6) [hashed,2,[0,0],[0,1],[0,2],[0,3],[1,0],[1,1],[1,2],[1,3],
>        [2,0],[2,1],[2,2],[2,3]]
> (%i7) listarray (f);
> (%o7) [-z^4+y^3+x^2 = 0,3*y^2/(4*z^3),
>        (24*y*z^4-27*y^4)/(16*z^7),
>        (96*z^8-648*y^3*z^4+567*y^6)/(64*z^11),x/(2*z^3),
>        -9*x*y^2/(8*z^7),-(72*x*y*z^4-189*x*y^4)/(32*z^11),
>        -(288*x*z^8-4536*x*y^3*z^4+6237*x*y^6)/(128*z^15),
>        (2*z^4-3*x^2)/(4*z^7),-(18*y^2*z^4-63*x^2*y^2)/(16*z^11),
>        -(144*y*z^8+(-378*y^4-504*x^2*y)*z^4+2079*x^2*y^4)
>         /(64*z^15),
>        -(576*z^12+(-9072*y^3-2016*x^2)*z^8
>                  +(12474*y^6+49896*x^2*y^3)*z^4-93555*x^2*y^6)
>         /(256*z^19)]
>
>
> It seems strange for implicit_derivative to return munlocal(). Hmm.
>
> Hope this helps,
>
> Robert Dodier
> .
>
>   
Hi Robert,
 Your solution works--thanks.   Actually, I looked at the source for 
impdiff.mac and it contains two functions 'mlocal' and 'munlocal' which 
don't seem to be needed.  Apparently they are lisp funcions defined in 
mlisp.lisp.    I removed them from impdiff.mac, saved the modified 
version as 'my_impdiff.mac'.  This versions seems to work fine with your 
method, so I don't see the need for mlocal and munlocal anyway. 

-sen