# Aplicaciones del Cálculo Diferencial de Varias Variables

## Extremos relativos de funciones de varias variables

Dada una función

f(x1,...,xn)

buscamos sus puntos críticos, es decir, los puntos que anulan su gradiente

gradiente(f(x1, x2, ..., xn)) =0

/* Ejemplo: Encuentra y clasifica los puntos críticos de la función */

f(x,y):=x^3+3*x*y^2-15*x-12*y; 

/* Calculamos su gradiente */
gf : jacobian([f(x,y)],[x,y]);

/* Planteamos el sistema de ecuaciones correspondiente */
ec1:gf[1,1] = 0;
ec2:gf[1,2] = 0;

/* Y usamos la instrucción solve, para resolverlo*/
solve([ec1,ec2],[x,y]);

/* Aunque también podemos usar algsys */
pcrit:algsys([ec1,ec2],[x,y]);

Obtenemos 4 puntos críticos y para comprobar su naturaleza, 
tenemos que evaluar el Hessiano en cada uno de ellos

/* Definimos el hessiano con la instrucción correspondiente */
define(hf(x,y),hessian(f(x,y),[x,y]));

Y lo evaluamos en cada punto crítico  

/* Este es el primero (2,1) */
A:hf(x,y),pcrit[1]
;

y calculamos los menores principales

/* Menor de orden 1 */
determinant(submatrix(2,A,2));
/* Menor de orden 2 */
determinant(A);

Lo que nos proporciona un punto de Mínimo, puesto que los dos menores son positivos.

Este procedimiento también se puede hacer con los valores propios

eigenvalues(A);

/* Vemos que son todos positivos ==> Mínimo*/

REPETIMOS EL PROCESO CON EL RESTO DE PUNTOS CRÍTICOS

/* Segundo punto crítico (1,2)*/
A:hf(x,y),pcrit[2];

/* Menor de orden 1 */
determinant(submatrix(2,A,2));
/* Menor de orden 2 */
determinant(A);

/* A1>0, A2<0 == > Punto de Silla */

/* O usando valores propios */
eigenvalues(A);

/* No son todos del mismo signos ==> Punto de Silla */

Tercer punto crítico 

/* Tercer punto crítico (-1,-2) */
A:ev(hf(x,y),pcrit[3]) ;

/* Menor de orden 1 */
determinant(submatrix(2,A,2));
/* Menor de orden 2 */
determinant(A);

/* A1<0, A2<0 ==> Otro punto de silla */

/* O usando valores propios */
eigenvalues(A);

/* No son todos del mismo signos ==> Punto de Silla */

Cuarto punto crítico

/* Cuartor punto crítico (-2,-1) */
A:ev(hf(x,y),pcrit[4]) ;

/* Menor de orden 1 */
determinant(submatrix(2,A,2));
/* Menor de orden 2 */
determinant(A);

/* A1<0, A2>0 ==> Máximo */

/* O usando valores propios */
eigenvalues(A);

/* Son todos del mismo signos y negativos ==> Máximo */

EJEMPLO 2

g(x,y) := (x^2+3*y^2)*exp(1-x^2-y^2);

/* Puntos críticos */
j : jacobian([g(x,y)],[x,y]);
pcrit : algsys([j[1,1],j[1,2]],[x,y]);

/* Hessiano */
define(hg(x,y),hessian(g(x,y),[x,y]));

/* Hessiano en los puntos críticos */
A:hg(x,y),pcrit[1];
eigenvalues(A);

A:hg(x,y),pcrit[2];
eigenvalues(A);

A:hg(x,y),pcrit[3];
eigenvalues(A);

A:hg(x,y),pcrit[4];
eigenvalues(A);

A:hg(x,y),pcrit[5];
eigenvalues(A);

/* mínimo, silla, silla, máximo, máximo */

wxplot3d(
    g(x,y),
    [x,-2,2],
    [y,-2,2],
    [plot_format, gnuplot],
    [grid, 50,50],
    [gnuplot_preamble,"set contour base"]
)$

## Extremos condicionados

Recordemos ahora que en un problema de Lagrange buscamos los puntos críticos de la función Lagrangiana, construida con
la función f y las restricciones del problema h, a través de los multiplicadores lambdaλ

Por tanto, si queremos resolver el problema

Optimizar    x^2 - y^2
Sujeto a     x^2 + y^2 - 1 = 0

Construiremos la función Lagrangiana

(x^2-y^2) + λ*(x^2+y^2-1)

f(x,y) := x^2-y^2;
h(x,y):= x^2+y^2-1;
define(L(x,y,λ), f(x,y) +λ*h(x,y));

Puntos críticos de L

JL : jacobian([L(x,y,λ)],[x,y,λ]);

ec1:JL[1,1]=0;
ec2:JL[1,2]=0;
ec3:JL[1,3]=0;

sol:algsys([ec1,ec2,ec3],[x,y,λ]);

Evalúamos en los puntos críticos

f(x,y),sol[1];
f(x,y),sol[2];
f(x,y),sol[3];
f(x,y),sol[4];

Ejemplo 2:

Optimizar     x^2+y^2+z^2
Sujeto a      2x+2y-z+3=0

/* Lo hacemos todo */
f(x,y,z) := x^2+y^2+z^2;
h(x,y,z):= 2*x+2*y-z+3;
define(L(x,y,z,λ), f(x,y,z) + λ*h(x,y,z));
JL : jacobian([L(x,y,z,λ)],[x,y,z,λ]);
ec1:JL[1,1]=0;
ec2:JL[1,2]=0;
ec3:JL[1,3]=0;
ec4:JL[1,4]=0;
sol:algsys([ec1,ec2,ec3,ec4],[x,y,z,λ]);

f(x,y,z),sol;

## Extremos absolutos

Sobre compactos, bajo las hipótesis de continuidad de la función, el problema de búsqueda de extremos tiene solución.
En este caso tenemos que buscar sobre la frontera y en el interior. Hay que resolver un problema sin restricciones (interior) y un problema con restricciones (frontera). 

Debemos prestar atención a la forma de la frontera, porque generalmente no estará constituida por una sola curva.

Ejemplo 1:

Vamos a calcular los extremos de la función f(x,y) = x^2(y-x) en el triángulo de vértices (0,0), (1,0) y (1,1)

Interior:

Buscamos los puntos críticos de f(x,y), sin tener en cuenta el triángulo.

f(x,y):=x^2*(y-x);
jf : jacobian([f(x,y)],[x,y]);

ec1 : jf[1,1]=0;
ec2:jf[1,2]=0;

solve([ec1,ec2],[x,y]);

/* Vemos que la y está libre (%r1 es un parámetro arbirario), luego
las soluciones son de la forma (0,y) */

/* Ninguno de los puntos de esta forma, pertenece al interior del triángulo
ya que están sobre uno de los lados (frontera) del triángulo */

Frontera:

/* La fontera está formada por 3 segmentos, y hay que estudiarlos uno a uno */

/* Segmento que une (0,0) con (1,0), es la base del triángulo.  En este caso, los 
puntos son de la forma (x,0) con  0<= x <=1.*/

/* La función es por tanto 

f(x,0) 

*/
f1(x) := f(x,0)$ f1(x);

/* Puntos críticos de f1 */
solve(diff(f1(x),x),x);

/* El segundo segmento, une (1,0) con (1,1), en este caso los puntos son de la forma
(1,y) con 0<=y<=1 y la función es 

f(1,y)

*/

f2(y):=f(1,y)$ f2(y);

/* Al ser una recta alcanzará el máximo y el mínimo en los extremos de la misma, es decir en y=0 y en y=1*/
f2(0);
f2(1);

/* Último segmento que une el punto (0,0) con el (1,1) , en este caso y=x y los puntos son del a forma (x,x) 
La función es

f(x,x)

*/
f3(x):=f(x,x)$f3(x);

/* La función es constante e igual a 0, por tanto el máximo y el mínimo coinciden en este caso y son todos los puntos 
de este lado */

Resumen

Hemos obtenido:
    1) Del interior:
         Puntos de la forma (0,y), que no están en el interior.
    2) De la frontera:
        - Segmento (0,0)-(1,0): Punto (0,0)
        - Segmento (1,0)-(1,1): Punto (1,0) con valor de la función f(1,0)= -1 y punto (1,1) con valor de la función f(1,1)=0
        - Segmento (1,1)-(0,0): Puntos (x,x) con valor de la función f(x,x) = 0; 

Deducimos que:
     El máximo se alcanza en todos los puntos de la forma (x,x) con valor f(x,x)=0.
     El mínimo se alcanza en el punto (1,0) con valor f(1,0)= -1

Ejemplo 2:

Optimizar x^2 - y^2
Sujeto a   x^2+y^2-1<=0

Es el círculo de centro (0,0) y radio 1

/* Interior */
f(x,y):=x^2-y^2;
jf : jacobian([f(x,y)],[x,y]);
ec1 : jf[1,1]=0;
ec2 : jf[1,2]=0;
solve([ec1,ec2],[x,y]);

/* En la frontera, que es la circunferencia */
h(x,y):=x^2+y^2-1;
define(L(x,y,λ),f(x,y)+λ*h(x,y));
jL : jacobian([L(x,y,λ)],[x,y,λ]);
ec1 : jL[1,1]=0;
ec2 : jL[1,2]=0;
ec3 : jL[1,3]=0;
solve([ec1,ec2,ec3],[x,y,λ]);

/* Evaluamos la función en todos los puntos que cumplan las condiciones */
ev(f(x,y),x=0,y=0);
ev(f(x,y),x=1,y=0);
ev(f(x,y),x=-1,y=0);
ev(f(x,y),x=0,y=1);
ev(f(x,y),x=0,y=-1);

Resumen

Hemos obtenido:
    1) Del interior:
         - P0=(0,0), que es el centro de la circunferencia y por tanto está en el interior, con f(P0)=0

    2) De la frontera:
        - P1: (1,0)   con f(P1) =  1
        - P2: (-1,0)  con f(P2) =  1
        - P3: (0,-1)  con f(P3) = -1
        - P4: (0,1)   con f(P4) = -1

Deducimos que:
     El máximo se alcanza en los puntos P1 y P2.
     El mínimo se alcanza en los puntos P3 y P4.