Práctica 8 (Cálculo)

(Primera parte)

Funciones de varias variables

Clear["Global`*"]

Definición de funciones de varias variables.

La definición de funciones de varias variables se realiza de forma similar a la definición de funciones de una variable. Por ejemplo, la siguiente instrucción define una función A, que permite obtener el área de un triángulo a partir del valor de la base del triángulo y de su altura. Es decir, se da la función A que tiene por variables b y h (nótese que para multiplicar b y h se pone un asterísco).

A[b_, h_] := b*h/2

Una vez definida la función podemos usarla para evaluar el valor de la función para unos valores concretos de las variables. A continuación calculamos el área de un triángulo de base igual a 3 metros y altura igual a 2 metros.

A[3, 2]

Vemos ahora otras definiciones de funciones.

f[x_, y_] := Sin[x^2 + y^2]

g[x_, y_] := Cos[Log[x]*y^2]

h[x_, y_, z_] := x^2 + y^2 + z^2

Ejercicio: Defina la función f(x,y)=Cos[y*Sin[x]], y calcule el valor de dicha función para x=Pi, y=0.5  .

Ejercicio: Dado un punto (x,y) del plano, su distancia al punto (0,0) viene dada por la fórmula d=(Sqrt[x^2 + y^2]). Defina esa función, y calcule la distancia al punto (0,0) del punto (7,3).

Gráficas de funciones de dos variables.

Para dibujar la gráfica de una función de dos variables empleamos la orden Plot3D. Definamos una función f, y veamos el tipo de representación que produce esta orden.

f[x_, y_] := Exp[-(x^2 + y^2)]
Plot3D[f[x, y], {x, -2, 2}, {y, -1, 1}]

Al emplear la orden Plot3D, el dominio de representación de la función debe ser rectangular, en el ejemplo anterior la variable x toma valores en el intervalo [-2,2], y la variable y toma valores en el intervalo [-1,1].

Para representar la función, Mathematica evalua la función en un número determinado de puntos, sin embargo, a veces es necesario aumentar el número de puntos para obtener una mejor representación. Para ello se emplea la opción PlotPoints seguida de -> y del número de puntos que deben considerarse en cada eje. Observe las siguientes órdenes y las gráficas que producen.

h[x_, y_] := Sin[x*y + x]
Plot3D[h[x, y], {x, -3, 3}, {y, -4, 4}]

Plot3D[h[x, y], {x, -3, 3}, {y, -4, 4}, 
      PlotPoints -> 50]

Es posible cambiar el punto desde el que se observa la gráfica usando la opción ViewPoint. Las siguientes instrucciones dibujan la misma gráfica, vista desde puntos distintos.

j[x_, y_] := 
      Exp[Sqrt[2  y^2]/(2 + x + y)]
Plot3D[j[x, y], {x, -3, 3}, {y, -3, 3}, 
      PlotPoints -> 30]
Plot3D[j[x, y], {x, -3, 3}, {y, -3, 3}, PlotPoints -> 30, 
      ViewPoint -> {2, 3, 1}]

Ahora veremos como se emplea la orden ContourPlot para representar las curvas de nivel de una función. Una curva de nivel de una función de dos variables f(x,y),  está formada por los puntos del plano que verifican que f(x,y)=C, donde C es una constante. Así, una curva de nivel está formada por los puntos que dan la misma altura en la gráfica.

Veamos una ilustración, para lo cual dibujamos dos gráficas, la de la función f, y la de la función constantemente igual a 1/2.

f[x_, y_] := Exp[-(x^2 + y^2)]
G1 = 
      Plot3D[f[x, y], {x, -2, 2}, {y, -2, 
          2}]
G2 = Plot3D[0.5, {x, -2, 2}, {y, -2, 2}]

Y representamos las dos gráficas conjuntamente con la orden Show.

Show[G1, G2]

Los puntos de intersección de las dos gráficas son puntos que pertenecen a la gráfica de f, y que tienen altura igual a 1/2, es decir, puntos que verifican f(x,y)=1/2.

La siguiente orden ContourPlot dibuja las curvas de nivel de la función f.

ContourPlot[Exp[-(x^2 + y^2)], {x, -2, 2}, {y, -2, 2}, 
      PlotPoints -> 20]

Veamos otro ejemplo, en el que representaremos una función y sus curvas de nivel.

G1 = Plot3D[x^2 - y^2, {x, -2, 2}, {y, -2, 2}]

G2 = Plot3D[1, {x, -2, 2}, {y, -2, 2}]

Show[G1, G2]

ContourPlot[x^2 - y^2, {x, -2, 2}, {y, -2, 2}]

Observe que en una representación con ContourPlot, las partes mas claras se corresponden con valores mayores de la función, y las partes mas oscuras con valores menores de la función. Así, la orden ContourPlot nos puede servir para localizar de forma aproximada máximos y mínimos de una función de dos variables. Observe en el siguiente ejemplo la gráfica de la función, y sus curvas de nivel. (La opción PlotRange sirve para indicar el intervalo de la imagen de f que debe representarse, es decir los valores de f en el eje z que se representan en la gráfica).

h[x_, y_] := (x^2 + 3  y^3)*
        Exp[1 - x^2 - y^2]
Plot3D[h[x, y], {x, -2, 2}, {y, -2, 2}, PlotPoints -> 40, 
      PlotRange -> {-3, 3}]
ContourPlot[h[x, y], {x, -2, 2}, {y, -2, 2}, 
      PlotPoints -> 60]

A la vista de las gráficas obtenidas parece que la función tiene, en el dominio representado un máximo absoluto y un mínimo absoluto. También parece que podemos encontrar dos máximos relativos, y un mínimo relativo.

Cambiando los intervalos para x y para y, obtenemos una mejor representación de los puntos que son posible máximos o mínimos. Como ejemplo representamos las curvas de nivel alrededor del mínimo de la función.

ContourPlot[h[x, y], {x, -1, 1}, {y, -2, -1}]

ContourPlot[
      h[x, y], {x, - .5,  .5}, {y, -1.4, -1}]

Restringiendo los intervalos para la variable x y para la variable y, podemos tener una aproximación del punto en el que se alcanza el mínimo.

Ejercicio: Dibuje la gráfica de la función t(x,y)=e^(x*y-x)/x^2 para x entre -3 y 3, e y entre -3 y 3. Aumente el número de puntos que se emplean al dibujar la gráfica para obtener una mejor representación.

Ejercicio: Dibuje las curvas de nivel de la función g(x,y)=cos(x*y)*x para valores de las variables comprendidos entre -2 y 2.

Ejercicio: Dibuje la gráfica de la función h(x,y)=(3x^2+y^2)*e^(1-x^2-y^2), y emplee las curvas de nivel para calcular una aproximación de un máximo relativo.

Límites dobles.

Mathematica no tiene una orden para realizar límites dobles. Sin embargo, al estudiar el límite doble de una función aparecen límites de una variable, que si pueden realizarse con este programa. En concreto, podemos usar la orden Limit para calcular un límite según una recta o una curva, o para calcular límites reiterados.

Veremos en primer lugar un ejemplo en el que los límites reiterados existen pero toman distinto valor.

f[x_, y_] := ((x - y)/(x + y))
Limit[f[x, y], y -> 0]

Limit[     Limit[f[x, y], y -> 0]      , 
      x -> 0]

Limit[f[x, y], x -> 0]

Limit[       Limit[f[x, y], x -> 0]      , 
      y -> 0]

Del cálculo de estos límites se deduce que la función f no es continua en el punto (0,0), vemos a continuación su gráfica.

Plot3D[f[x, y], {x, -1, 1}, {y, -1, 1}, PlotPoints -> 47, 
      PlotRange -> {-5, 10}]

En el siguiente ejemplo calculamos los límites según las rectas y=m*x. Como el límite depende de m, es decir, depende de la recta que se considere para acercarse al punto (0,0), se concluye que el límite doble para (x,y)->(0,0) no existe.

g[x_, y_] := ((x^2 - y^2)/(x^2 + y^2))
Limit[g[x, m*x], x -> 0]

Plot3D[g[x, y], {x, -1, 1}, {y, -1, 1}]

Ejercicio: Calcule los límites reiterados de g(x,y)=(x^2-y^2)/(x^2+y^2).

Ejercicio: Calcule los límites según la recta y=m*x  de la función g(x,y)=(x^2*y)/(x^3+y^3).

Derivadas según un vector y derivadas parciales.

La definición de derivada según un vector v empleaba un límite de una variable. Por tanto podemos usar Mathematica para calcular derivadas según un vector. Calculemos como ejemplo la derivada de la función f(x,y)=x^2+y^3+y,  en el punto A=(1,2), según el vector v=(5,7).

f[x_, y_] := x^2 + y^3 + y
A1 = 1;
A2 = 2;
v1 = 5;
v2 = 7;

Limit[((f[A1 + t*v1, A2 + t*v2] - f[A1, A2])/t), 
      t -> 0]

Para calcular derivadas parciales empleamos la orden D, indicando la variable respecto de la que se quiere derivar. A continuación derivamos la función h respecto de x. Luego calculamos la derivada de h respecto de la variable y.

h[x_, y_] := x*Exp[y^2] + y*Exp[x^3]
D[h[x, y], x]
D[h[x, y], y]

Para calcular una de estas derivadas en un punto concreto, empleamos la misma notación con barra, punto y flecha que vimos en la práctica 4. A continuación calculamos la derivada de z respecto de y, y de x en el punto (x,y)=(-2.1 , 0.7).

D[h[x, y], x, y] /. {x -> -2.1, y -> 0.7}

Ejercicio: Calcule la derivada direccional de la función f(x,y)=x^2+y^2+2xy en el punto (2,-1) según el vector (1,1).

Ejercicio: Calcule las derivadas parciales de la función w(x,y)=e^(x*cos(y)+y*sen(x)).

Vector gradiente.

El vector gradiente de una función se define a partir de las parciales de la función. En Mathematica se puede expresar de esta manera.

f[x_, y_] := x^2 + y^3 + x*y
Gra = {D[f[x, y], x], D[f[x, y], y]}

Y podemos calcular el gradiente en un punto de la siguiente manera.

Gra /. {x -> 1, y -> 2}

Como la función f es diferenciable, podemos decir que la derivada direccional en el punto (1,2) es máxima en la dirección del vector {4,13}. Además en el punto (1,2) el valor máximo de la derivada direccional es el valor del módulo del vector {4,13}.

vect = Gra /. {x -> 1, y -> 2}

Sqrt[vect . vect]

El vector gradiente se puede utilizar para calcular la derivada direccional de una función según un vector v. En concreto la derivada de la función f en el punto A=(A1,A2) según el vector v=(v1,v2), se calcula de esta manera.

A1 = 2;
A2 = 3;
v1 = -1;
v2 = 2;
vect = Gra /. {x -> A1, y -> A2}
vect . {v1, v2}

Ejercicio: Sea la función  f(x,y)=x^3*y^2+x*y+3. Halle el vector gradiente de f en un punto cualquiera (x,y).

Ejercicio: Para la función f del ejercicio anterior, halle la dirección en la que es máxima la derivada direccional en el punto (1,1).

Derivadas sucesivas.

Ahora calculamos las derivadas parciales de segundo orden de la función z(x,y)=3x^4*y+2x*y^3. Primero calculamos la derivada segunda de z respecto de x, luego derivamos z respecto de x, y volvemos a derivar respecto de y.

z[x_, y_] = 3  x^4*y + 2  x*y^3
D[z[x, y], {x, 2}]
D[   D[z[x, y], x]   , y]

Esta última derivada puede obtenerse también mediante la siguiente orden (sic).

D[z[x, y], y, x]

Calculamos también la derivada de z respecto de y, y luego respecto de x. Por último, calculamos la derivada segunda de z respecto de y.

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

Ejercicio: Dada la función g(x,y)=cos(3x*y^2), halle la derivada de g respecto de x dos veces, y respecto de y tres veces.

Matriz hessiana.

Empleando las derivadas de segundo orden se construye la matriz hessiana.

f[x_, y_] := 2  x^4*y + 3  x*y^3
mhessiana = {{D[f[x, y], {x, 2}], D[f[x, y], x, y]}, {D[f[x, y], y, x], 
          D[f[x, y], {y, 2}]}}

Para calcular la matriz hessiana en un punto concreto empleamos una instrucción como la siguiente.

M = mhessiana /. {x -> 1, y -> 5}

La matriz M se puede mostrar con la orden MatrixForm, calcular su determinante (el hessiano) con Det, y las ordenes que se pueden emplear con cualquier matriz.

MatrixForm[M]
Det[M]
M[[1, 1]]

Ejercicio: Calcule la matriz hessiana de la función g(x,y)=sin(x*y)+x^2+cos[y^2] en el punto (0,0).

Ejercicios

1- Según la fórmula de Herón, el área S de un triángulo cuyos lados miden a, b y c, viene dada por S=(Sqrt[s(s - a) (s - b) (s - c)])donde s es el semiperímetro s=(a+b+c)/2. Define la función  S(a,b,c) que tiene por variables las longitudes de los lados, y que da el área del triángulo. Calcula el área de un triángulo cuyos lados miden 120, 150 y 200 metros. ¿Puede calcular el área de un triángulo de lados a=80, b=70 y c=160?

2- Se sabe que un lado de un triángulo mide a=100 metros, usando el ejercicio anterior, dibuje la gráfica de la función que da el área del triángulo para valores de b comprendidos entre 70 y 180, y valores de c comprendidos entre 80 y 170. ¿Aprecia, en la gráfica representada, algún máximo de la función S? ¿Podría representar la función S en un dominio menor que contenga ese máximo?

3- Dibuje la gráfica de la función f(x,y)=cos(x^2+y^2), así como las curvas de nivel para x∈[-2,2], y∈[-2,2].

4- Estudie la continuidad de la función f(x,y)=( - x^2+y^2)/(x^2+y^4) si (x,y)≠(0,0) y f(0,0)=0.

5- Calcule el gradiente de la función f(x,y)=cos(x^2+y^2) en el punto (0,0), y también en el punto (0.1 , 0.2).

6- Halle el determinante de la  matriz hessiana de la función f(x,y)=x^3+x^2*y+3*xy+2 en el punto (-1 , 2).