Open In Colab

Péndulo simple: grandes vs pequeñas oscilaciones (Resolución de ODEs)

Péndulo simple. Grandes oscilaciones

Coordenadas:

$x_m = R \sin \theta ~~~~~~~~~~~~~~~~~~~~~~ y_m = - R \cos \theta$,

Energías:

$T = \frac{1}{2} m (\dot x_m^2 + \dot y_m^2) ~~~~~~~~~~ V = m g y_m$

Ecuaciones de Lagrange:

$~~~~~~~~~~~~~~~~~~~~~~ \dfrac{d}{dt} \bigg( \dfrac{\partial L}{\partial \dot \theta} \bigg) - \dfrac{\partial L}{\partial \theta} = 0$

Péndulo simple. Pequeñas oscilaciones

Partimos dela solución anterior,

Sustituimos $sin(θ)$ por $\theta$

Resolución de la ODE

En las gráficas se ve que los periodos son ligeramente diferentes. Dibujamos ahora un diagrama de fases (theta frente a theta_dot).

Uso de lambdify

Podemos usar la función lambdify() para convertir una expresión analítica de sympy a una función numérica evaluable mediante scipyo numpy.

Nuestras ecuaciones del movimiento son ODEs de segundo orden. Para resolverlas tenemos que escribirlas de la siguiente manera:

Convertimos nuestras variables simbólicas en numéricas mediante lambdify():

Resolvemos la ODE, esta vez mediante la función odeint(), que tendremos que importarla.

Extraemos la solución numérica y la convertimos a grados, para representar.

Anexo: animación

Pdemos relaizar una animación con los datos generados anteriormente. Usamos la función animation de mmatplotlib.