> # sfb feb 14, 2002 > # Critical Point Extreme Machine > cpem:=proc(f) > local f_x, f_y, f_xx, f_yy, f_xy, bigD, critical, dd, xx, i; > f_x:=diff(f,x);f_y:=diff(f,y); > f_xx:=diff(f_x,x);f_xy:=diff(f_x,y);f_yy:=diff(f_y,y); > bigD:=f_xx*f_yy-(f_xy)^2; > critical:=solve({f_x=0,f_y=0},{x,y}); > for i from 1 to nops([critical]) do > if ( nops([critical]) = 1 ) then > dd:=eval(bigD,critical); xx:=eval(f_xx,critical); > if ( dd < 0 ) then > print("The critical point ",critical," is a saddle ", dd,xx); > elif ( dd = 0 ) then > print("The test fails for ",critical, dd,xx); > elif ( xx > 0 ) then > print("The critical point ",critical," is a local min ", dd,xx); > else > print("The critical point ",critical," is a local max ", dd,xx); > fi; > else > dd:=eval(bigD,critical[i]); xx:=eval(f_xx,critical[i]); > if ( dd < 0 ) then > print("The critical point ",critical[i]," is a saddle ", dd,xx); > elif ( dd = 0 ) then > print("The test fails for ",critical[i], dd,xx); > elif ( xx > 0 ) then > print("The critical point ",critical[i]," is a local min ", dd,xx); > else > print("The critical point ",critical[i]," is a local max ", dd,xx); > fi > fi; > od; > #print(f);print(critical); > end; > f:=x^2+y^2;cpem(f); > f:=8*y^3+12*x^2-24*x*y;cpem(f); > cpem(1-x^2-y^2+x^2*y^2); > cpem(sin(x)*sin(y)); > f:=x^2*(y+1)^3+y^2;cpem(f); > solve({diff(1-x^2-y^2+x^2*y^2,x)=0,diff(1-x^2-y^2+x^2*y^2,y)=0},{x,y}); >