Funciones de varias variables. Extremos relativos y condicionados.

Práctica 7 (Específica de la asignatura de Cálculo Matemático en E.U.A.T.)

(Práctica elaborada a partir de las realizadas por los profesores María José Cáceres, Juan Campos y Óscar Sánchez)

Introducción

En esta práctica veremos cómo derivar funciones de varias variables y hallar extremos (tanto los relativos como los condicionados) con Mathematica.

Funciones reales de variable vectorial

Definimos una función en varias variables de forma análoga  al caso de una función en una única variable.

f[x_, y_] :=  E^(-(x^2 + y^2)/2);

Para representar gráficamente esta función usamos la orden Plot3D.

Plot3D[f[x, y],  {x, -1, 1}, {y, -1, 1}];

También puede ser útil una representación de las curvas de nivel.

ContourPlot[f[x , y], {x, -1, 1}, {y, -1, 1}];

Derivación

Derivadas parciales

Como se ha estudiado en teoría, las derivadas parciales de una función de varias variables son las derivadas con respecto a una de las variables, considerando fijas las demás. En Mathematica, la orden D calcula derivadas de cualquier orden en las variables que elijamos (en particular calcula derivadas de funciones de una sola variable como ya se ha visto). Esta orden toma como argumentos la función que uno quiere derivar, las variables en las que se quiere derivar y el orden de la derivación (cuántas veces queremos derivar con respecto a cada variable).

Primera derivada parcial respecto a x.

D[f[x, y], x]

Primera derivada parcial respecto a y.

D[f[x, y], y]

Segunda derivada parcial respecto a x.

D[f[x, y], {x, 2}]

Segunda derivada parcial respecto a x e y.

D[f[x, y], x, y]

Vector gradiente

Conocidas las derivadas parciales es fácil calcular el vector gradiente.

gradientef[x_, y_] = {D[f[x, y], x], D[f[x, y], y]}

gradientef[1, 1]

Puede ser que en versiones antiguas de Mathematica no funcione el procedimeinto anterior. En tales casos podemos usar la siguiente alternativa. ¡OJO! Si se pone punto y coma al final de la primera línea de la siguiente celda se obtiene un resultado que no es el deseado (aunque lo parezca). En versiones superiores de Mathematica (5.0 por ejemplo) si se pueden incluir los puntos y comas sin problemas.

gradf = {D[f[x, y], x], D[f[x, y], y]}gradf /. {x -> 1, y -> 1}

Matriz hessiana

También es fácil calcular la matriz hessiana a partir de las derivadas parciales segundas. Calculemos antes las parciales que faltan.

Segunda derivada parcial respecto a y y x.

D[f[x, y], y, x]

Segunda derivada parcial respecto a y.

D[f[x, y], {y, 2}]

hessianaf[x_, y_]
         = {{D[f[x, y], {x, 2}], D[f[x, y], x, y]}, {D[f[x, y], y, x], 
          D[f[x, y], {y, 2}]}}MatrixForm[%]

Calculemos la hessiana en el punto (1,1).

hessianaf[x, y] /. {x -> 1, y -> 1}MatrixForm[%]

Derivadas direccionales

Una vez que tenemos el gradiente de una función podemos calcular su derivada direccional en cualquier dirección elegida. Veámoslo en un ejemplo.

Derivada direccional en la dirección de u = (1,1).

dfu[x_, y_] = gradientef[x, y].{1/Sqrt[2], 1/Sqrt[2]}

La misma derivada direccional, evaluada en el punto (2,0).

dfu[2, 0]

Para versiones antiguas proponemos la siguiente alternativa.

derivadadireccionaluf = gradf.{1/Sqrt[2], 1/Sqrt[2]} derivadadireccionaluf /. {x -> 2, y -> 0}

Interpretación gráfica de la derivada direccional

Una derivada direccional no es más que la derivada de la función de una variable que resulta al "cortar" la gráfica de una función de varias variables con un plano vertical orientado en una dirección dada (de ahí el nombre). Es útil ver gráficamente lo que esto significa.

graficaf = 
      Plot3D[f[x, y], {x, -2, 2}, {y, -2, 2}, 
        AspectRatio -> Automatic, Mesh -> False];

Para ver lo que significa la derivada parcial en la dirección del vector {1,1} en el punto (0,0), dibujemos sólo el corte de la gráfica con un plano que va en esa dirección.

La recta que pasa por (0,0) y va en la dirección de (1,1) es

recta = {0, 0} + t {1/Sqrt[2], 1/Sqrt[2]};

La función  f dibujada sobre esa recta es

corte = 
      ParametricPlot3D[{recta[[1]], recta[[2]], 
          f[recta[[1]], recta[[2]]]}, {t, -2, 2}];

Show[{graficaf, corte, 
        Graphics3D[{PointSize[0.03], Point[{0, 0, 1}]}]}];

Si recta es la recta que definimos antes, entonces la derivada direccional no es más que la derivada usual de la función f[recta[[1]],recta[[2]]] (que depende de t) en el punto 0. Hemos dibujado esta función sobre la gráfica de  f  para que se vea que es la función  f  "vista en una cierta dirección".

Plano tangente

Dada una función de dos variables f(x,y), podemos definir la superficie formada por los puntos (x,y,z) que verifican que z=f(x,y).Esta superficie puede dibujarse usando la orden Plot3D vista anteriormente.

\(Plot3D[f[x, y], {x, \(-2\), 2}, {y, \(-2\), 2}]; 

    figura1 = 
      Plot3D[f[x, y], {x, \(-2\), 2}, {y, \(-2\), 2}, 
        ViewPoint -> {0, 1, \(-0.1\)}]\)

Si  f  es diferenciable en un punto (a,b), podemos definir el plano tangente a la superficie z=f(x,y) en el punto (a,b) mediante la fórmula z=f(a,b) + (x-a) ∂(f/∂)x (a, b)  + (y-b) ∂(f/∂)y(a, b) . Veamos que ocurre en el caso anterior  si consideramos el punto (0.1, 0.1).

\(a = 0.1; 
b = 0.1; 

    z = f[a, b] + 
        \((x - a)\) \((D[f[x, y], x] /. {x -> a, y -> b})\) + 
        \((y - b)\)*\((D[f[x, y], y] /. {x -> a, y -> b})\)\)

\(figura2 = 
      Plot3D[z, {x, \(-2\), 2}, {y, \(-2\), 2}, 
        ViewPoint -> {0, 1, \(-0.1\)}]; 
Show[figura1, figura2]; \)

Extremos de funciones derivables

En muchas situaciones se desea calcular el máximo o el mínimo valor de una función.

En principio, un ordenador no puede decirnos si una función definida en un subconjunto del plano (o de la recta real, o del espacio) alcanza un valor máximo o mínimo; esto es algo que debemos deducir de nuestra comprensión de la función (tal vez ayudándonos de su representación gráfica u otros cálculos).

Cuando tengamos motivos para pensar que una función tiene un extremo relativo (un punto donde la función es siempre mayor o siempre menor que en los puntos pertencientes a un entorno de dicho punto), si, además, dicha función es derivable en un entorno del extremo relativo entonces todas sus derivadas primeras deben anularse (porque, intuitivamente, la cima de una montaña suave tiene que ser plana).

Por otra parte, recuérdese que esto forma parte del método para buscar extremos absolutos de una función: primero buscamos los extremos relativos, es decir, los puntos donde las derivadas primeras se anulan (¡¡cuando las funciones son derivables!!).

Por ejemplo, calculemos el máximo de la siguiente función. (Una pregunta distinta sería la pregunta ¿por qué sabemos que esta función tiene un máximo?)

h[x_, y_] := -x^4 - y^4 + 2  x^2 + y^2 + 2;

Primero, hallamos los puntos donde el gradiente se anula (o sea, donde todas sus derivadas primeras se anulan). A tales puntos los llamaremos puntos críticos.

gradh = {D[h[x, y], x], D[h[x, y], y]}

criticos = Solve[gradh == 0, {x, y}]

Entre estos nueve puntos, miramos dónde h es mayor:

Table[N[h[x, y] /. criticos[[i]]], {i, 1, 9}]

Vemos que los puntos 2º, 3º, 8º y 9º de la lista anterior son máximos locales de h.

Cómo distinguir entre máximos y mínimos relativos

Una vez que hemos calculado los puntos críticos de una función, puede ocurrir que algunos sean máximos relativos, que otros sean mínimos relativos y, finalmente, que no sean de ninguno de estos dos tipos (los llamados puntos de silla). La matriz hessiana de una función distingue entre estos tres casos según sua una matriz definida negativa, definida positiva o indefinida, respectivamente.

Calculemos la matriz hessiana de h.

hessianah[x, y]
         = {{D[h[x, y], {x, 2}], D[h[x, y], x, y]}, {D[h[x, y], y, x], 
          D[h[x, y], {y, 2}]}}MatrixForm[%]

Veamos cuál es dicha matriz en algunos puntos críticos. ¡OJO! Si se ponen puntos y comas al final de la primera línea de cada una de las tres siguientes celdas se obtiene un resulatdo que no es el deseado. En versiones superiores de Mathematica (5.0 por ejemplo) si se pueden incluir los puntos y comas sin problemas. (Ya hicimos un comentario parecido anteriormente).

hessianah[x, y] /. criticos[[1]]MatrixForm[%]

hessianah[x, y] /. criticos[[2]]MatrixForm[%]

hessianah[x, y] /. criticos[[4]]MatrixForm[%]

El que una matriz sea definida positiva, negativa o indefinida depende de sus valores propios, aunque hay formas más sencillas de verlo a simple vista y que funcionan en muchos casos. Por ejemplo, en el caso de matrices de orden 2 (el que estamos considerando) es suficiente con ver el signo del término de la posición (1,1) de la matriz  y el signo de su determinante.
Por tanto, aplicando el criterio  estudiado en teoría podemos afirmar que el primer punto crítico es un punto de silla (determinante negativo), el segundo es un máximo local (determinante positivo y valor negativo en la posición (1,1)) y el cuarto es un mínimo local (determinante positivo y valor positivo en la posición (1,1)).

Veamos gráficamente los resultados obtenidos.

Plot3D[h[x, y], {x, -1.2, 1.2}, {y, -1.2, 1.2}];

Extremos condicionados

Nos planteamos ahora el problema de hallar el máximo (o el mínimo) de una función f(x,y) sujeto a unas restricciones g(x,y)=0. Sabemos que para que un punto a=(a1,a2) sea extremo de f sujeto a la restricción dada por g es necesario que el punto a sea punto crítico de la función  L(x,y,λ)=f(x,y)-λg(x,y), es decir se han de verificar las ecuaciones

		∂ (L/∂) x (x, y, λ) = 0;   ∂ (L/∂) y (x, y, λ) = 0;   g(x, y)=0 . 

Es equivalente utilizar L(x,y,λ)=f(x,y)+λg(x,y), teniendo en cuenta que cambiaría el signo de los valores obtenidos para λ.

Como ejemplo, vamos a hallar los posibles puntos críticos de la función f(x,y)=3 x^2+2xy-2y^2, entre los puntos que verifican la restricción x^2+ y^2 =1. En primer lugar definimos las funciones y mostramos gráficamente la situación que vamos a estudiar.

\(f[x_, y_] := 3\ x^2 + 2  x\ y - 2  y^2; 
g[x_, y_] := \ x^2 + y^2 - 1; 
    \)

Representación gráfica de la función que se quiere optimizar en una región que contiene a la restricción.

g1 = 
      Plot3D[f[x, y], {x, -1.5, 1.5}, {y, -1.5, 1.5}, 
        AxesLabel -> {"x", "y", "z"}, Mesh -> False] ;

La función ParametricPlot3D dibuja una función donde las tres componentes (x,y,z) dependen de un mismo parámetro. Para describir los puntos del plano que verifican la restricción x^2+y^2=1 se emplean las coordenadas polares x(t)=cos(t), y(t)=sen(t) y, por tanto,  z(t)=f[x(t),y(t)] .

Representación gráfica de la función que se quiere optimizar en la región determinada por la restricción.

g2 = 
      ParametricPlot3D[{Cos[t], Sin[t], f[Cos[t], Sin[t]], 
          RGBColor[1, 0, 0]}, {t, 0, 2 Pi}, 
        PlotRange -> {{-1.5, 1.5}, {-1.5, 1.5}, {-5, 5}}, 
        AxesLabel -> {"x", "y", "z"}];

Representación conjunta de las dos gráficas anteriores. La curva roja describe los valores de la función cuando las variables verfican la restricción.

Show[g1, g2];

Definimos la función Lagrangiana y resolvemos el sistema a estudiar:

\(L[x_, y_, λ_] := \ f[x, y]\  - \ λ\ g[x, y]; 

    pcriticos = 
      Solve[{D[L[x, y, λ], x] == 0, 
          D[L[x, y, λ], y] == 0, g[x, y] == 0}, {x, y, 
          λ}]\)N[%]

De los cuatro posibles puntos críticos a la vista de la gráfica dos serán máximos relativos y dos mínimos relativos. Además, son extremos absolutos.

Table[
      N[f[x, y] /. {pcriticos[[i]][[2]], 
            pcriticos[[i]][[3]]}], {i, 1, 4}]

¿Dónde se alcanzarían el máximo y el mínimo absolutos si las variables se mueven en el círculo unidad?

Haciendo dibujos

En esta sección veremos como podemos utilizar las gráficas de las funciones para conseguir una idea aproximada (exacta en lagunos casos) de los extremos de tales funciones.

Ejemplo 1

Consideremos la función

f1[x_, y_] := x - y^2;

Hagamos su grafica en una determinada región el plano.

Plot3D[f1[x, y], {x, 1, 3}, {y, 1, 2}];

A simple vista tenemos que el máximo se alcanza en (3,1) y el mínimo en (1,2). Veamos otra forma de llegar a este resulatdo utilizando las curvas de nivel.

ContourPlot[f1[x, y], {x, 1, 3}, {y, 1, 2}];

Observamos que las zonas claras corresponden con los valores mayores de la función y las oscuras con los valores menores.

Ejemplo 2

Consideremos la función

f2[x_, y_] := x^2 - 2  x + 2 + y^2 - 2  y + x*y;

Hagamos su grafica en una determinada región el plano.

Plot3D[f2[x, y], {x, -1, 3}, {y, -1, 2}];

Parece que el máximo se alcanza en (3,2) y el mínimo en el centro de la región. Utilicemos las curvas de nivel.

ContourPlot[f2[x, y], {x, -1, 3}, {y, -1, 2}];

Teniendo en que las zonas claras corresponden con los valores mayores de la función y las oscuras con los valores menores, se confirma que el máximo se alcanza en (3,2) (aunque puede haber duda con (-1,-1) y el mínimo está en el centro de la región. Observemos de cerca esta zona.

ContourPlot[f2[x, y], {x, 0.3, 1}, {y, 0.3, 1}];

ContourPlot[f2[x, y], {x, 0.5, 0.8}, {y, 0.5, 0.8}];

ContourPlot[f2[x, y], {x, 0.6, 0.73}, {y, 0.6, 0.73}];

Siguiendo este proceso, llegaríamos a la conclusión de que el mínimo se alcanza en (2/3,2/3).

Ejemplo 3

Consideremos la función del ejemplo 2 pero restringida a la condición x^2+y^2=a.  Para calcular los extremos en este caso vamos a utilizar las curvas de nivel  junto con la gráfica en implícitas de la restricción. Para ello necesitamos cargar previamente un paquete específico de Mathematica.

<< Graphics`ImplicitPlot`

restric[x_, y_] := x^2 + y^2;

Varía el valor de a en la siguiente celda para observar que hace ImplicitPlot .

\(a := 2; 

    ImplicitPlot[restric[x, y] == a, {x, \(-2\), 2}, {y, \(-2\), 2}, 
      PlotStyle -> Thickness[0.02]]; \)

\(restriccion = 
      ImplicitPlot[restric[x, y] == a, {x, \(-2\), 2}, {y, \(-2\), 2}, 
        PlotStyle -> Thickness[0.02]]; 

    curvasnivel = ContourPlot[f2[x, y], {x, \(-2\), 2}, {y, \(-2\), 2}]; 

    Show[{curvasnivel, restriccion}]; \)

Intentemos mejorar el resultado.

Show[{curvasnivel, restriccion}, 
      PlotRange -> {{-1.2, -0.6}, {-1.2, -0.6}}];

Show[{curvasnivel, restriccion}, PlotRange -> {{0, 1.3}, {0, 1.3}}];

Como no observamos nada en el mínimo, vamos a operar con la función opuesta.

\(restriccion = 
      ImplicitPlot[restric[x, y] == a, {x, \(-2\), 2}, {y, \(-2\), 2}, 
        PlotStyle -> Thickness[0.02]]; 

    curvasnivelmodif = 
      ContourPlot[\(-f2[x, y]\), {x, \(-2\), 2}, {y, \(-2\), 2}]; 

    Show[{curvasnivelmodif, restriccion}]; \)

\(restmod1 = 
      ImplicitPlot[
        restric[x, y] == a, {x, \(-1.2\), \(-0.6\)}, {y, \(-1.2\), \(-0.6\)}, 
        PlotStyle -> Thickness[0.02]]; 

    curvnivmod1 = 
      ContourPlot[
        \(-f2[x, y]\), {x, \(-1.2\), \(-0.6\)}, {y, \(-1.2\), \(-0.6\)}]; 

    Show[{curvnivmod1, restmod1}]; \)

\(restmod2 = 
      ImplicitPlot[restric[x, y] == a, {x, 0, 1.3}, {y, 0, 1.3}, 
        PlotStyle -> Thickness[0.02]]; 

    curvnivmod2 = ContourPlot[\(-f2[x, y]\), {x, 0, 1.3}, {y, 0, 1.3}]; 

    Show[{curvnivmod2, restmod2}]; \)

¡OJO! Hay que tener cuidado con el orden en que se muestran los dibujos. Si permutamos los dibujos aparecen las curvas de nivel pero desaparece la curva de la restricción.

Show[{restmod2, curvnivmod2}];

Ejercicios

1.- Calcula el plano tangente a  S={(x,y,z) ;  z - cos(x+y) exp(x^2)=0} en el punto (0,0,1) de dicha superficie.

2.- Dada la función f(x,y)=x^3 +y^3 -3x-12y+25, determina sus máximos y mínimos locales, es decir, sus máximos y mínimos relativos.

3.- Calcula los extremos relativos de  f(x, y) = (x + y^2) exp(1 - x^2) . ¿Cuáles de ellos son mínimos relativos? ¿Cuáles máximos relativos? ¿Cuáles puntos de silla? ¿Alcanza esta función un máximo absoluto? ¿Alcanza un mínimo absoluto?

4.- Calcula los extremos relativos de  f(x,y) = cos(x) sin(y) . ¿Tiene esta función máximo o mínimo absoluto?

5.- Realiza los ejercicios 8 a 11 de la relación de teoría.

6.- Calcula los extremos relativos de la función  f(x,y) = exp(xy)  bajo la restricción  x^2 +y^2 = 8 .

7.- Calcula la matriz Hessiana de la función  f(x,y) = a x^2+c y^2+2 b x y . Determina qué han de cumplir a, b y c para que esta matriz sea siempre definida positiva.

8.- Realiza los ejercicios 12, 13, 14, 15, 16 y 17 de la relación de teoría de este tema.

9.- Queremos ir desde Granada hasta Madrid en coche. Sabemos, en general, que a velocidades altas el coche gasta más cuanto más rápido vayamos. Para ser exactos, supondremos que si vamos a v kilómetros por hora el coche gasta (v^3)/500000 + 5 céntimos por minuto (lo cual entra dentro de lo razonable: por muy despacio que vayamos, el coche siempre gasta algo, y el gasto aumenta muy rápido con la velocidad). Suponiendo esto, ¿a qué velocidad debemos ir para que el gasto sea el mínimo posible?