Funções de várias variáveis
Yolanda K. Saito Furuya
Um pequeno resumo dos comandos de Maple V para derivação e uso em máximos e mínimos.
1. Definição de função de 2 variáveis:
> restart; # limpando a memória
> f := (x,y) -> (2*x^2+y^2)*exp(1-x^2-y^2);
> f(x,y); f(a,b); f(1,2); avalia a função f em (x,y), (a,b) e (1,2)
2. Definindo uma expressão:
> gxy := (2*x^2+y^2)*exp(1-x^2-y^2);
> subs(x=1,y=2,gxy); avalia a expressao gxy no ponto (1,2)
3. Transformando a expressão acima em função e chamando de g:
> g :=unapply(gxy,x,y);
> g(1,2);
4. Derivando uma expressão e gerando a expressão da derivada:
> diff(f(x,y),x);
> diff(f(x,y),x,x,x); diff(f(x,y),x$3);
> diff(f(x,y),x,y);
5. Função derivada, usando o operador derivação D:
> fx :=D[1](f); derivada de f em relação à 1a. variável
> fy :=D[2](f); derivada de f em relação à 2a. variável
> fxy:= D[1,2](f); fxx := D[1$2](f); fyy:=D[2$2](f); derivadas de ordem superior
> D[1,1,2,2,2](f); D[1$2,2$3](f);
6. Função derivada, utilizando a expressão da derivada obtida com o diff.
> unapply(diff(f(x,y),x),x,y); fabricando uma função derivada, a partir da expressão da derivada.
7. Plano tangente ao gráfico de função de 2 variáveis em (x0,y0).
> with(plots): with(plottools):
> x0 := 1: y0 := 1.5: z0 := f(x0,y0): escolhendo o ponto
> Tang:= (x,y) -> z0 + fx(x0,y0)*(x-x0) + fy(x0,y0)*(y-y0); função do plano tangente
> Tang(x,y);
> Ponto := sphere([x0,y0,z0],.1):
> PlanoTang := plot3d(Tang(x,y), x=0..2,y=0..2, style=wireframe, color=blue):
> grafico := plot3d(f(x,y),x=0..2,y=0..2, style=patchcontour):
> display({grafico,PlanoTang,Ponto});
8. Localizando pontos críticos de f através do gradiente:
> solve({fx(x,y)=0, fy(x,y)=0},{x,y});
Portando temos os pontos:
> p1:=[0,0]: p2:=[1,0]: p3:=[-1,0]: p4:=[0,1]: p5:=[0,-1]:
9. Construindo a matriz hessiana Hf como matriz de funções, com as funções fxx,fxy,fyy acima definidas:
> Hf := matrix(2,2,[fxx,fxy,fxy,fyy]);
10. Classificando os pontos críticos:
> H1:=Hf(op(p1)); H2:=Hf(op(p2)); H3:=Hf(op(p3)); H4:=Hf(op(p4)); H5:=Hf(op(p5)); avaliando a hessiana nos pontos. A função op tira o "[ ] ".
Pelos resultados, p1 é ponto de mínimo, p2 e p3 pontos de máximo, p4 e p5 pontos de sela.
11. Conferindo os resultados, com gráficos:
> plot3d(f(x,y), x=-2..2, y=-2..2, style=patchcontour, orientation=[85,40]);
> with(plots):
> gradplot(f(x,y),x=-2..2,y=-2..2); fig1 :=%: campo de vetores gradiente
> contourplot(f(x,y),x=-2..2,y=-2..2); fig2 := %: curvas de nível
> display({fig1,fig2}, scaling=constrained); curvas de nível e os vetores gradiente, juntos
Veja que nos pontos de máximo, os vetores gradiente da vizinhança apontam para eles, ao contrário do ponto de mínimo. No ponto de sela, passa uma curva de nível que faz um X no ponto.
>
12. Trabalhando com multiplicadores de Lagrange: (exerc. 5d)
> restart; with(plots):
> f := (x,y,z) -> x^2+y^2+z^2;
> g1 := (x,y,z) -> x^2-x*y+y^2-z^2-1;
> g2 := (x,y,z)->x^2+y^2-1;
> implicitplot3d(g1(x,y,z)=0,x=-2..2,y=-2..2,z=-2..2, style=wireframe, color=blue); fig1 := %:
> implicitplot3d(g2(x,y,z)=0,x=-2..2,y=-2..2,z=-2..2, style=patchnogrid); fig2 := %:
> display({fig1,fig2}, orientation=[0,55]);
O vínculo é a curva de intersecção do hiperbolóide com o cilindro, dando duas componentes semelhantes a uma circunferência. É um conjunto compacto - fechado e limitado.
> fx := D[1](f); fy:=D[2](f); fz:=D[3](f);
> g1x := D[1](g1); g1y:=D[2](g1); g1z:=D[3](g1);
> g2x := D[1](g2); g2y:=D[2](g2); g2z:=D[3](g2);
> solve({fx(x,y,z)=lambda*g1x(x,y,z)+mu*g2x(x,y,z), fy(x,y,z)=lambda*g1y(x,y,z)+mu*g2y(x,y,z), fz(x,y,z)=lambda*g1z(x,y,z)+mu*g2z(x,y,z), g1(x,y,z)=0, g2(x,y,z)=0},{x,y,z,lambda,mu});
Logo, os pontos críticos imediatos sobre o vínculo são:
> p[1]:=[1,0,0]: p[2] :=[-1,0,0]: p[3] :=[0,1,0]: p[4] :=[0,-1,0]:
E também:
> Z := sqrt(2)/2; Z e -Z são RootOf(2_Z^2 -1)=raízes de 2*Z^2-1
> p[5] :=[-Z,Z,Z]: p[6]:=[Z,-Z,-Z]:
> for i from 1 to 6 do evalf(f(op(p[i]))) od;
Como o vínculo no problema é um COMPACTO, f tem máximo e mínimo sobre o vínculo, e portanto, os 4 primeiros pontos são de mínimo e os 2 últimos, de máximo.
> fig3 := implicitplot3d(f(x,y,z)=1, x=-2..2,y=-2..2,z=-2..2, style=wireframe,color=green):
> fig4 := implicitplot3d(f(x,y,z)=1.5, x=-2..2,y=-2..2,z=-2..2, style=wireframe, color=red):
> display({fig1,fig2,fig3,fig4});
>
>