Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
/*
 * This file:
 *   http://anggtwu.net/MAXIMA/2024-2-C3-P1-Q2.mac.html
 *   http://anggtwu.net/MAXIMA/2024-2-C3-P1-Q2.mac
 *          (find-angg "MAXIMA/2024-2-C3-P1-Q2.mac")
 * Author: Eduardo Ochs <eduardoochs@gmail.com>
 *
 * (defun e () (interactive) (find-angg "MAXIMA/2024-2-C3-P1-Q2.mac"))
*/

* (setq last-kbd-macro (kbd "C-a %M SPC C-a <down>"))
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load("/usr/share/emacs/site-lisp/maxima/emaxima.lisp")$
load("~/MAXIMA/barematrix1.mac")$
:lisp (setf (get '$display2d 'assign) nil)
display2d:'emaxima$

* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
hessian(x^3*y^4, [x,y]);
linel : 110;
linenum : 0;
** (eeks)
* (eeks 0.02 0.02)
gradef(W  (x,y), W_x (x,y), W_y (x,y))$
gradef(W_x(x,y), W_xx(x,y), W_xy(x,y))$
gradef(W_y(x,y), W_xy(x,y), W_yy(x,y))$

dd(F)       := [F,
                diff(F,x),   diff(F,y),
                diff(F,x,2), diff(F,x,1,y,1), diff(F,y,2)]$
aa(o,x0y0)  := at(o, [x=x0y0[1], y=x0y0[2]])$
mm(abcdef)  := block([a,b,c,d,e,f],
                     [a,b,c,d,e,f]:abcdef,
                     [a,b*Dx,c*Dy,d*Dx^2/2,e*Dx*Dy,f*Dy^2/2])$
ss(abcdef)  := block([a,b,c,d,e,f],
                     [a,b,c,d,e,f]:abcdef,
                     a+b+c+d+e+f)$
toM(abcdef) := block([a,b,c,d,e,f],
                     [a,b,c,d,e,f]:abcdef,
                     matrix([a,"",""], [b,c,""], [d,e,f]))$

D2       (F) := toM(dd(F));
D2at(x0y0,F) := toM(aa(dd(F),x0y0));
T2M (x0y0,F) := toM(mm(aa(dd(F),x0y0)));
T2  (x0y0,F) :=  ss(mm(aa(dd(F),x0y0)));

/* Alguns testes: */
          dd(W(x,y));
      toM(dd(W(x,y)));
      toM([1,2,3,4,5,6]);
       aa(dd(W(x,y)),[3,4]);
   toM(aa(dd(W(x,y)),[3,4]));
    mm(aa(dd(W(x,y)),[3,4]));
toM(mm(aa(dd(W(x,y)),[3,4])));
 ss(mm(aa(dd(W(x,y)),[3,4])));

D2        (W(x,y));
D2at([3,4],W(x,y));
T2M ([3,4],W(x,y));
T2  ([3,4],W(x,y));

F  : x*y*(6 - 2*x - y);
F  : expand(F);
P1 : [0,6];
P2 : [1,2];
P3 : [3,0];
P4 : [0,0];

/* (2a) */
D2(W(x,y));
F;
D2F : D2(F);

/* (2b) */
[P1, D2F, D2FP1:D2at(P1,F)];
[P2, D2F, D2FP2:D2at(P2,F)];
[P3, D2F, D2FP3:D2at(P3,F)];
[P4, D2F, D2FP4:D2at(P4,F)];

/* (2c) */
TM2([x0,y0],W(x,y));
[P1, D2FP1, T2M(P1,F), T2(P1,F)];
[P2, D2FP2, T2M(P2,F), T2(P2,F)];
[P3, D2FP3, T2M(P3,F), T2(P3,F)];
[P4, D2FP4, T2M(P4,F), T2(P4,F)];

/* (2d) */
grad(F) := [diff(F,x),diff(F,y)]$
   H(F) := hessian(F, [x,y])$
detH(F) := determinant(H(F))$
crit(F) := [F, grad(F), H(F), detH(F)]$
crit(F) := matrix([F, grad(F)], [H(F), detH(F)])$
   crit(W(x,y));
aa(crit(F), P1);
aa(crit(F), P2);
aa(crit(F), P3);
aa(crit(F), P4);

/* definicao da funcao G */
P2;
T2(P2,F);
G__ :                        T2(P2,F);
G_  : subst([Dx=x-1,Dy=y-2], T2(P2,F));
G   : expand(G_);

/* definicao dos conjuntos B e C */
inC_(x,y)   := y <= 6 - 2*x;
inC (x,y,o) := if inC_(x,y) then o else "";
numsB(expr) :=
  apply(matrix,
        makelist(makelist(ev(expr), x,0,3),
                 y, seqby(6,0,-1)))$
numsC(expr) :=
  apply(matrix,
        makelist(makelist(inC(x,y,ev(expr)), x,0,3),
                 y, seqby(6,0,-1)))$
numsB([x,y]);
numsC([x,y]);

/* (2e) */
F;
[numsC(   x  *y),
 numsC(   x^2*y),
 numsC(   x  *y^2)];
[numsC( 6*x  *y),
 numsC(-2*x^2*y),
 numsC(  -x  *y^2),
 numsC(F)];

/* (2f) */
G__;
G_;
Dx : x-1;
Dy : y-2;
[numsC(Dx^2),
 numsC(Dx*Dy),
 numsC(Dy^2)];
[numsC(4),
 numsC(-4*Dx^2),
 numsC(-2*Dx*Dy),
 numsC(  -Dy^2)];
numsC(G);

/* (2g) */
grad(F);

Fx : diff(F,x);
 -4*x*y + 6*y - y^2;
[numsC(-4*x*y),
 numsC(6*y),
 numsC(-y^2),
 numsC(Fx)];

Fy : diff(F,y);
 -2*x*y + 6*x - 2*x^2;
[numsC(-2*x*y),
 numsC(6*x),
 numsC(-2*x^2),
 numsC(Fy)];

numsC(grad(F));

*



** (c3m242p1p 5 "questao-2" "(2g)")
** (c3m242p1a   "questao-2"   "g)")
** (find-myqdraw "myqdraw3.mac")
** (find-myqdraw "myqdraw3.mac" "myimp")
load_myqdraw()$
[topdf_a,topdf_b,topdf_c,topdf_n] : ["~/LATEX/", "2024-2-C3/", "P1-Q2-v2", 0];
myqdrawp_to_new_pdf(); myps(s):=ps(s/5);
myqdrawp_to_screen (); myps(s):=ps(s);

[xmin,ymin, xmax,ymax] : [-1,-1, 4,7]$
level(zz,color) := myimp1(F=zz, lc(color), lk(z=zz))$
levels() := [level( 3.95, gray),
             level( 3.90, gray),
             level( 3.85, gray),
             level( 3,    red),
             level( 2,    orange),
             level( 1,    gold),
             level( 0,    forest_green),
             level(-1,    blue)]$

** As curvas de nível da F, sem os vetores gradientes:
level(zz,color) := myimp1(F=zz, lc(color), lk(z=zz))$
F_levels : myqdrawp(xyrange(), levels());

** As curvas de nível da G, sem os vetores gradientes:
level(zz,color) := myimp1(G=zz, lc(color), lk(z=zz))$
G_levels : myqdrawp(xyrange(), levels());

** Os conjuntos B e C:
B : create_list([x,y], y,seqby(6,0,-1), x,seq(0,3));
eq1 : y = 6 - 2*x;
eq2 : solve(eq1,x);
subst(eq2, x);
define(xmaxC(y), subst(eq2, x));
C : create_list([x,y], y,seqby(6,0,-1), x,seq(0,xmaxC(y)));

atxy(oo,xy) := aa(oo,xy);

** O gradiente da F nos pontos de C:
** (find-myqdraw "myqdraw3.mac" "myPv")
define(v_at (xy), atxy(grad(F)/10,xy))$
define(Pv_at(xy), myPv(xy,v_at(xy),[myps(1)],hl(0.15)))$
Pv_at([1,3]);
grads_at_C : makelist(Pv_at(xy), xy, C)$
F_grads : myqdrawp(xyrange(), grads_at_C);

** O gradiente da F nos pontos de C e as curvas de nível:
level(zz,color) := myimp1(F=zz, lc(color), lk(z=zz))$
F_all : myqdrawp(xyrange(), levels(), grads_at_C);

matrix([F_levels, G_levels, F_grads, F_all]);