1. Ejemplo - Trayectoria 2D de una partícula
Referencia: Stewart 14.3 Ejemplo 2 p915
Sea f(x,y) la expresión dada, encuentre fx(1,1) y fy(1,1) e interprete estos números como pendientes
f(x,y) = 4 - x^2 - 2y^2
1.1 Desarrollo analítico
Las derivadas parciales de f(x,y) son:
f_x(x,y) = -2 x f_y(x,y) = - 4 ySe evalúan las expresiones en el punto [x0,y0] = [1,1]
f_x(1,1) = -2(1) = -2 f_y(1,1) = - 4 (1) = -4Las tangentes se obtienen usando el modelo del plano tangente en el espacio
Referencia: Stewart 14.4 p928
z-z_0 =f_x(x_0,y_0) (x-x_0) + f_y (x_0,y_0) (y-y_0)Cuando y=y0 se tiene la tangente a la curva en y0
z-z_0 =f_x(x_0,y_0) (x-x_0) z =f_x(x_0,y_0) (x-x_0) + z_0 z_0 = f(x_0,y_0) = 4 - x^2 - 2y^2= 4 - (1)^2 - 2(1)^2 = 1 tan_{fy_0} =z =-2(x-1) + 1 tan_{fy_0} =-2x+3Cuando x=x0 se tiene la tangente a la curva en x0
z-z_0 = f_y (x_0,y_0) (y-y_0) z = f_y (x_0,y_0) (y-y_0)+z_0 tan_{fx_0} = z = -4 (y-1)+1 tan_{fx_0} = -4 y+5La ecuación del plano tangente en x0,y0
z-z_0 =f_x(x_0,y_0) (x-x_0) + f_y (x_0,y_0) (y-y_0) z-1 =-2 (x-1) -4 (y-1) tan_{xy} =-2 (x-1) -4 (y-1)+1 tan_{xy} =-2x -4 y+71.2 Algoritmo con Python
Se escriben las ecuaciones en formato Sympy para obtener las derivadas aplicando sym.diff(). Para la evaluación de las funciones en la gráfica se convierten a Numpy.
Las tangentes se trazan a partir del punto de observación x0,y0 en el sentido paralelo a cada eje.
Derivadas parciales - tangentes
f = -x**2 - 2*y**2 + 4
df/dx = -2*x
df/dy = -4*y
Dxf(x0,y0) = -2
Dyf(x0,y0) = -4
x0,y0,F0 = [1, 1, 1]
tan_f_y0 = 3 - 2*x
tan_f_x0 = 5 - 4*y
tan_plano = -2*x - 4*y + 7
# Stewart 14.3 Ejemplo2 p915
# Derivadas parciales - tangentes
import numpy as np
import sympy as sym
# INGRESO
x = sym.Symbol('x')
y = sym.Symbol('y')
f = 4-x**2-2*y**2
x0 = 1
y0 = 1
ax = 0 # intervalo [ax,bx] eje x
bx = 2
muestrasx = 11 # tramosx = muestrasx-1
ay = 0 # intervalo [ay,by] eje y
by = 2
muestrasy = 11 # tramosy = muestrasy-1
titulo = 'Derivadas parciales - tangentes'
verdecimales = 4
# PROCEDIMIENTO
# Derivadas parciales, formula Sympy
Dxf = sym.diff(f,x,1)
Dyf = sym.diff(f,y,1)
ecuacion = {'f':f,
'df/dx':Dxf,
'df/dy':Dyf}
# formulas Numpy
f = sym.lambdify((x,y),f)
Dxf = sym.lambdify((x,y),Dxf)
Dyf = sym.lambdify((x,y),Dyf)
xi = np.linspace(ax,bx,muestrasx)
yj = np.linspace(ay,by,muestrasy)
# Malla para cada eje X,Y
Xi, Yj = np.meshgrid(xi,yj)
Fij = f(Xi,Yj)
# observación en x0,y0
F0 = f(x0,y0) # observación en x0,y0
f_y0 = f(xi,y0) # corte f en y0
f_x0 = f(x0,yj) # corte f en x0
Dxf_y0 = Dxf(x0,y0) # derivada Dxf en y0
Dyf_x0 = Dyf(x0,y0)
ecuacion['Dxf(x0,y0)'] = Dxf_y0
ecuacion['Dyf(x0,y0)'] = Dyf_x0
# Tangente f en y0 , f en x0
tan_f_y0 = Dxf_y0*(xi-x0)+F0
tan_f_x0 = Dyf_x0*(yj-y0)+F0
ecuacion['x0,y0,F0'] = [x0,y0,F0]
ecuacion['tan_f_y0'] = Dxf_y0*(x-x0)+F0
ecuacion['tan_f_x0'] = Dyf_x0*(y-y0)+F0
# Plano tangente
tan_xy = lambda x,y: Dyf_x0*(y-y0)+ Dxf_y0*(x-x0)+F0
tan_plano = tan_xy(Xi,Yj)
ecuacion['tan_plano'] = Dyf_x0*(y-y0)+ Dxf_y0*(x-x0)+F0
# SALIDA
np.set_printoptions(verdecimales)
print(titulo)
for una_eq in ecuacion:
print(una_eq,'=', ecuacion[una_eq])
1.3 Gráfica en Python
Para la gráfica de f(x,y) se usa el tipo dispersión, permite observar la forma de la superficie y deja espacio para el trazado de los cortes en cada eje con x0,y0.
También se permite observar mas claro el trazado de las tangentes.

# GRAFICA 3D ------
import matplotlib.pyplot as plt
# Malla para cada eje X,Y
fig3D = plt.figure()
graf3D = fig3D.add_subplot(111, projection='3d')
graf3D.scatter3D(Xi,Yj,Fij,marker='.',label='f(x,y)')
graf3D.plot(xi,y0,f_y0,label='f_y0')
graf3D.plot(x0,yj,f_x0,label='f_x0')
graf3D.plot(xi,y0,tan_f_y0,label='tanf_y0')
graf3D.plot(x0,yj,tan_f_x0,label='tanf_x0')
# 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()
#plano tangente a f en x0,y0
figPT = plt.figure()
grafPT = figPT.add_subplot(projection='3d')
grafPT.scatter3D(Xi,Yj,Fij,marker='.',label='f(x,y)')
grafPT.plot_wireframe(Xi,Yj,tan_plano, color='green',
label='tan_f(x0,y0)')
grafPT.scatter3D(x0,y0,F0,'o',color='red',label='[x0,y0,F0]')
# entorno de gráfica
grafPT.set_xlabel('x')
grafPT.set_ylabel('y')
grafPT.set_zlabel('z')
grafPT.set_title(titulo)
grafPT.legend()
grafPT.view_init(35,40) # elevación, rotación grados
plt.tight_layout()
plt.show()
