2.1 Curvas paramétricas en 2D - Derivadas, Tangentes con Python



1. Ejemplo - Trayectoria 2D de una partícula

Referencia: Stewart 10.2 Ejemplo 1 p650

Curvas Paramétricas Tangente gráfico animado

Una curva C está definida por las ecuaciones paramétricas

x = t^2 y = t^3 - 3t

a. Trace la curva y su tangente.

b. Demuestre que C tiene dos rectas tangentes en el punto (3,0) y encuentre sus ecuaciones.

c. Encuentre el punto C donde la recta tangente es horizontal o vertical.

d. Determine dónde la curva es cóncava hacia arriba o hacia abajo.

1.1 Desarrollo Analítico

Se obtienen las derivadas a ser usadas en la gráfica

\frac{dx}{dt} = 2t \frac{dy}{dt} = 3t^2 - 3 \frac{dy}{dx} =\frac{\frac{dy}{dt}}{\frac{dx}{dt}} = \frac{3t^2 - 3}{2t}

Se realizará la observación en la gráfica para el intervalo de tiempo entre [-2,2] con 9 muestras.

Se selecciona un punto de ejemplo t0 = 2 para trazar la tangente a la trayectoria en el plano xy.

\frac{dx}{dt} = 2t = 2(2) = 4 \frac{dy}{dt} = 3t^2 - 3 = 3(2)^2 - 3 = 9 f'(x_0) = \frac{dy}{dx} =\frac{9}{4} =2.25

La tangente se modela con la recta:

y = f'(x_0)x + b_0

en conocimiento que para el ejercicio, la tangente pasa por el punto [x0,y0], se reemplaza y despeja b0,

y_0 = f'(x_0)x_0 + b_0 b_0 = y_0 - f'(x_0)x_0

La ecuación de la recta tangente se expresa como,

tan_{xy} = f'(x_0)x +(y_0 - f'(x_0)x_0) tan_{xy} = f'(x_0)(x-x_0) +y_0

Se evalúan los valores para observación en x0,y0 para t0, y se reemplazan en la ecuación.

x_0 = t^2 = (2)^2 = 4 y _0= t^3 - 3t =(2)^3-3(2) = 2 tan_{xy} = 2.25(x-4) +2 tan_{xy} = 2.25x-7

Expresión usada para trazar la gráfica en el intervalo del eje x del ejercicio.

1.2 Algoritmo en Python

Se usa la opción de tratar las ecuaciones con Sympy en forma simbólica para obtener las derivadas de cada ecuación con sym.diff().

Para evaluación numérica, se convierten con sym.lambdify() que facilita el cálculo numérico vectorial para las gráficas.

Las expresiones algebraicas se guardan en un diccionario para ser mostradas al final del bloque de salida, o recuperarse para otro algoritmo.

Curvas paramétricas, derivadas
fx = t**2
fy = t**3 - 3*t
dx/dt = 2*t
dy/dt = 3*t**2 - 3
dy/dx = 3*(t**2 - 1)/(2*t)
t0,x0,y0 = [2, 4, 2]
tan_xy = 2.25*x - 7.0

i,[ti, xi, yi, dx/dt, dy/dt, dy/dx]
0 [-2.0, 4.0, -2.0, -4.0, 9.0, -2.25]
1 [-1.5, 2.25, 1.125, -3.0, 3.75, -1.25]
2 [-1.0, 1.0, 2.0, -2.0, 0.0, -0.0]
3 [-0.5, 0.25, 1.375, -1.0, -2.25, 2.25]
4 [0.0, 0.0, 0.0, 0.0, -3.0, -inf]
5 [0.5, 0.25, -1.375, 1.0, -2.25, -2.25]
6 [1.0, 1.0, -2.0, 2.0, 0.0, 0.0]
7 [1.5, 2.25, -1.125, 3.0, 3.75, 1.25]
8 [2.0, 4.0, 2.0, 4.0, 9.0, 2.25]
# Ejercicio Stewart 10.2 Ejemplo1 p650
# derivadas con sympy
import numpy as np
import sympy as sym

# INGRESO
t = sym.Symbol('t')
fx = t**2
fy = t**3-3*t

a = -2 # intervalo entre [a,b]
b = 2
muestras = 9

t0 = 2 # Observacion en tiempo

titulo = 'Curvas paramétricas, derivadas'

# PROCEDIMIENTO
# Derivadas, formula Sympy
dxdt = sym.diff(fx,t,1)
dydt = sym.diff(fy,t,1)
dydx = sym.simplify(dydt/dxdt)

ecuacion = {'fx':fx,'fy':fy,
            'dx/dt':dxdt,
            'dy/dt':dydt,
            'dy/dx':dydx}
# formula Numpy
fx = sym.lambdify(t,fx)
fy = sym.lambdify(t,fy)
dxdt = sym.lambdify(t,dxdt)
dydt = sym.lambdify(t,dydt)
dydx = dydt(t)/dxdt(t)

# curva en intervalo [a,b]
ti = np.linspace(a,b,muestras)
xi = fx(ti)
yi = fy(ti)
# derivadas
dxdti = dxdt(ti)
dydti = dydt(ti)
dydxi = dydti/dxdti

# Observacion en tiempo
x0 = fx(t0)
y0 = fy(t0)
dx0 = dxdt(t0)
dy0 = dydt(t0)
dydx0 = dy0/dx0

# tangente x,y
tan_xy = lambda x: dydx0*(x-x0)+y0
tan_xi = np.linspace(np.min(xi),np.max(xi),muestras)
tan_yi = tan_xy(tan_xi)
x = sym.Symbol('x')
ecuacion['t0,x0,y0'] = [t0,x0,y0]
ecuacion['tan_xy']= dydx0*(x-x0)+y0

# SALIDA
print(titulo)
for una_eq in ecuacion:
    print(una_eq,'=', ecuacion[una_eq])
    
print('i,[ti, xi, yi, dx/dt, dy/dt, dy/dx]')
for i in range(0,muestras,1):
    print(i,[ti[i],xi[i],yi[i],dxdti[i],dydti[i],dydxi[i]])

1.3 Gráfica con Python

La gráfica se realiza con 3 sub-gráficas: trayectoria (x,y), velocidad dy/dt, velocidad dx/dt.

Curvas Paramétricas Tangente gráfica 01

Semejante a los ejercicios anteriores, se suaviza la curva aumentando el número de muestras en tk.

Las tangentes se trazan en el punto seleccionado en t0.

# GRAFICA ---------------------
import matplotlib.pyplot as plt

# suavizar la curva
muestras_graf = 5*muestras
verdecimales = 4

tk = np.linspace(a,b,muestras_graf)
xk = fx(tk)
yk = fy(tk)
dt = ti[1]-ti[0]

deltay = np.abs(np.max(yi)-np.min(yi))*0.05

plt.subplot(221)
plt.plot(ti,dxdti,label='dx/dt')
plt.plot(ti,dxdti,'o',color='lightgray')
plt.plot(t0,dx0,'o')
# entorno de grafica
plt.axvline(0,color='lightgreen',linestyle='dashed')
plt.axhline(0,color='gray',linestyle='dotted')
plt.ylabel('t')
plt.legend()

plt.subplot(223)
plt.plot(xk,yk,label='x,y')
plt.plot(xi,yi,'o',color='lightgray')
plt.plot(x0,y0,'o')
plt.plot(tan_xi,tan_yi,label='tangente')
# entorno de grafica
plt.ylim(np.min(yk)-deltay,np.max(yk)+deltay)
plt.axhline(0,color='gray',linestyle='dashed')
plt.axvline(0,color='gray',linestyle='dotted')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()

plt.subplot(224)
plt.plot(ti,dydti,label='dy/dt')
plt.plot(ti,dydti,'o',color='lightgray')
plt.plot(t0,dy0,'o')
# entorno de grafica
plt.axhline(0,color='lightgreen',linestyle='dashed')
plt.axvline(0,color='gray',linestyle='dotted')
plt.xlabel('t')
plt.legend()

plt.suptitle(titulo)
plt.show()


Unidades FP