1. Ejemplo - Trayectoria 2D de una partícula
Referencia: Stewart 10.2 Ejemplo 1 p650

Una curva C está definida por las ecuaciones paramétricas
x = t^2 y = t^3 - 3ta. 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.25La tangente se modela con la recta:
y = f'(x_0)x + b_0en 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_0La 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_0Se 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-7Expresió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.

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()