1.4 Funciones de dos variables con Python



1. Ejemplo - Plano inclinado

Funciones de dos variables gráfico Plano

Referencia: Steward 14.1 ejemplo 5 p891

Trace la gráfica de la función

f(x,y) = 6-3x-2y

La gráfica representa un plano, cuyas intersecciones en el cada eje son: x =2, y=3 y z=6. Puntos que son referencia para el trazado de la gráfica y que se pueden tomar como intervalos para cada eje.

Se realiza la gráfica para:
intervalo [0,2] en el eje x con 7 muestras,
intervalo [0,3] en el eje y con 9 muestras,

También se añade el plano con z=0 como referencia visual. Observe que la matriz de puntos de muestras para el eje z=0 tiene dimensiones (muestrasy,muestrasx).



1.1 Algoritmo en Python con wireframe

# Ejemplo 5 Steward 14.1 p891
# Funciones de dos variables
import numpy as np

# INGRESO
fxy = lambda x,y: 6-3*x -2*y
ax = 0 # intervalo [ax,bx] eje x 
bx = 2
muestrasx = 7 # tramosx = muestrasx-1
ay = 0 # intervalo [ay,by] eje y
by = 3
muestrasy = 9 # tramosy = muestrasy-1
titulo = 'Funciones 2 variables'
verdecimales = 4

# PROCEDIMIENTO
xi = np.linspace(ax,bx,muestrasx)
yj = np.linspace(ay,by,muestrasy)
# Malla para cada eje X,Y
Xi, Yj = np.meshgrid(xi,yj)
F = fxy(Xi,Yj)
# Plano XY con z=0 como referencia en gráfica
F0 = np.zeros((muestrasy,muestrasx),dtype=float)

# SALIDA
np.set_printoptions(verdecimales)
print(titulo)
print('xi:')
print(xi)
print('yj:')
print(yj)
print('f(x,y):')
print(F)

con el siguiente resultado:

Funciones 2 variables
xi:
[0.     0.3333 0.6667 1.     1.3333 1.6667 2.    ]
yj:
[0.    0.375 0.75  1.125 1.5   1.875 2.25  2.625 3.   ]
f(x,y):
[[ 6.    5.    4.    3.    2.    1.    0.  ]
 [ 5.25  4.25  3.25  2.25  1.25  0.25 -0.75]
 [ 4.5   3.5   2.5   1.5   0.5  -0.5  -1.5 ]
 [ 3.75  2.75  1.75  0.75 -0.25 -1.25 -2.25]
 [ 3.    2.    1.    0.   -1.   -2.   -3.  ]
 [ 2.25  1.25  0.25 -0.75 -1.75 -2.75 -3.75]
 [ 1.5   0.5  -0.5  -1.5  -2.5  -3.5  -4.5 ]
 [ 0.75 -0.25 -1.25 -2.25 -3.25 -4.25 -5.25]
 [ 0.   -1.   -2.   -3.   -4.   -5.   -6.  ]]


1.2 Gráfica con Python

Funciones de dos variables, plano en 3D con Python
# GRAFICA 3D de malla ------
import matplotlib.pyplot as plt
 
# Malla para cada eje X,Y
fig3D = plt.figure()
graf3D = fig3D.add_subplot(111, projection='3d')

graf3D.plot_wireframe(Xi,Yj,F,label='f(x,y)')
graf3D.plot_wireframe(Xi,Yj,F0,label='z=0', color='gray')
graf3D.plot(0,0,0,'ro',label='[0,0,0]')

# entorno de gráfica
graf3D.set_xlabel('x')
graf3D.set_ylabel('y')
graf3D.set_zlabel('z')
graf3D.set_title(titulo)
graf3D.legend()
graf3D.view_init(35,40) # elevación, rotación grados
plt.tight_layout()
plt.show()


2. Ejemplo - paraboloide y exponencial

Funciones de 2 variables Paraboloide y Exponencial gráfica de surperficie

Referencia: Steward 14.1 ejemplo fig10a p892

Use la computadora para dibujar la gráfica de la función:

f(x,y) = (x^2+3y^2) e^{-x^2-y^2}

Se usarán intervalos simétricos al origen para los ejes x, y, dado que las variables son elevadas al cuadrado se observaría simetría respecto al origen.

Para el trazado de la gráfica se prefiere en éste caso usar el tipo de superficie.



2.1 Algoritmo en Python con surface

Para el ejercicio no es necesario mostrar el plano xy con z=0, por lo que no se usa al cambiar la instrucción F0 a comentario (#).

Se aumentan las muestras en cada eje a 21 para mejorar la resolución de la gráfica.

# Ejemplo Steward 14.1 fig10a p892
# Funciones de varias variables
import numpy as np

# INGRESO
fxy = lambda x,y: (x**2+3*y**2)*np.exp(-x**2-y**2)
ax = -3 # intervalo [ax,bx] eje x 
bx = 3
muestrasx = 21 # tramosx = muestrasx-1
ay = -3 # intervalo [ay,by] eje y
by = 3
muestrasy = 21 # tramosy = muestrasy-1
titulo = 'Funciones 2 variables'
verdecimales = 4

# PROCEDIMIENTO
xi = np.linspace(ax,bx,muestrasx)
yj = np.linspace(ay,by,muestrasy)
# Malla para cada eje X,Y
Xi, Yj = np.meshgrid(xi,yj)
F = fxy(Xi,Yj)
# Plano XY con z=0 como referencia en gráfica
#F0 = np.zeros((muestrasy,muestrasx),dtype=float)

# SALIDA
np.set_printoptions(verdecimales)
print(titulo)
print('xi:')
print(xi)
print('yj:')
print(yj)
#print('f(x,y):')
#print(F)


2.2 Gráfica de superficie con Python

Funciones dos variables Paraboloide Exponencial gráfica animada

Se actualiza la instrucción de la gráfica a "plot_surface", indicando la paleta de colores a usar para diferenciar los valores en el eje z.

En la paleta de colores se pueden usar varias combinaciones, como rainbow, Blues, etc.

# GRAFICA 3D de superficie ------
import matplotlib.pyplot as plt
 
# Malla para cada eje X,Y
fig3D = plt.figure()
graf3D = fig3D.add_subplot(111, projection='3d')

graf3D.plot_surface(Xi,Yj,F,label='f(x,y)',
                    cmap=plt.cm.rainbow)
#graf3D.plot_wireframe(Xi,Yj,F00,label='z=0', color='gray')
#graf3D.plot(0,0,0,'ro',label='[0,0,0]')

# entorno de gráfica
graf3D.set_xlabel('x')
graf3D.set_ylabel('y')
graf3D.set_zlabel('z')
graf3D.set_title(titulo)
graf3D.legend()
graf3D.view_init(35,40) # elevación, rotación grados
plt.tight_layout()
plt.show()


3. Ejemplo - paraboloide y exponencial en curvas de nivel

Un método, tomado de los cartógrafos, es un mapa de contorno en el que puntos de elevación constante se unen para formar curvas de contorno o curvas de nivel.

Las curvas de nivel de una función f de dos variables son las curvas con ecuaciones f(x, y) =k, donde k es una constante (en el rango de f).

Funciones de 2 variables Paraboloide y Exponencial gráfica de surperficie

Para el ejercicio con la ecuación mostrada, realizar la gráfica con curvas de nivel

f(x,y) = (x^2+3y^2) e^{-x^2-y^2}

4.1 Algoritmo en Python

En general el desarrollo es el mismo que para la gráfica en 3D, sin embargo las instrucciones cambian a 2D y se usa la instrucción "contour"

Instrucciones en Python:

Funciones 2 variables Paraboloide con Exponencial gráfica curva de nivel
# Ejemplo Steward 14.1 fig10a p892
# Funciones de varias variables
import numpy as np

# INGRESO
fxy = lambda x,y: (x**2+3*y**2)*np.exp(-x**2-y**2)
ax = -3 # intervalo [ax,bx] eje x 
bx = 3
muestrasx = 21 # tramosx = muestrasx-1
ay = -3 # intervalo [ay,by] eje y
by = 3
muestrasy = 21 # tramosy = muestrasy-1
titulo = 'Funciones 2 variables, Curva de nivel'
verdecimales = 4

# PROCEDIMIENTO
xi = np.linspace(ax,bx,muestrasx)
yj = np.linspace(ay,by,muestrasy)
# Malla para cada eje X,Y
Xi, Yj = np.meshgrid(xi,yj)
F = fxy(Xi,Yj)
# Plano XY con z=0 como referencia en gráfica
#F0 = np.zeros((muestrasy,muestrasx),dtype=float)

# SALIDA
np.set_printoptions(verdecimales)
print(titulo)
print('xi:')
print(xi)
print('yj:')
print(yj)
#print('f(x,y):')
#print(F)

4.2 Gráfica en Python para curvas de nivel

El gráfico es en 2D, con instrucciones simples "plt" para el entorno de la gráfica. La instrucción principal es plt.contour.

# GRAFICA de curva de nivel ------
import matplotlib.pyplot as plt
 
# cs: contour surface
cs = plt.contour(Xi,Yj,F)
plt.clabel(cs, fontsize=10) # etiquetas de valores

# entorno de gráfica
plt.xlabel('x')
plt.ylabel('y')
plt.title(titulo)
plt.tight_layout()
plt.show()


4. Ejercicio - Esfera

Referencia: Steward 14.1 ejemplo 6 p891

Trace la gráfica de:

g(x,y) = \sqrt{9-x^2-y^2}

representa una esfera en el origen de radio 3. Sin embargo g(x,y) representa solo la mitad superior de la esfera.

Usando el algoritmo para gráfica de superficies se obtiene:

Función 2 variables Esfera parte Superior gráfica

Tarea: use el algoritmo de superficies y modifique lo necesario para incluir en la gráfica la parte inferior




Unidades FP