Lección 5: Fórmulas sobre arrays
Construye en Python el patrón «Ola de péndulos» y aprende por el camino:
- una fórmula de física aplicada a todo un array
- np.round y print para una comprobación rápida
- varios gráficos uno al lado de otro con plt.subplots
- f-strings
- la fase: en qué punto de su oscilación está un péndulo
Míralo primero
Se reproduce desde YouTube tras hacer clic.
"""Pendulum wave: 24 pendulums making 51, 52, ... 74 swings in 60 seconds.
Run: python pendulum-wave.py (needs: pip install numpy matplotlib)
"""
import numpy as np
import matplotlib.pyplot as plt
plt.style.use("dark_background")
g, cycle = 9.81, 60.0 # gravity in m/s^2, seconds until they are back in step
n = np.arange(51, 75) # swings per cycle, one more for each pendulum
period = cycle / n
length = g * (period / (2 * np.pi)) ** 2 # small swings: T = 2 pi sqrt(L / g)
print("lengths in cm:", np.round(length * 100, 1))
fig, axes = plt.subplots(1, 4, figsize=(12, 4), sharey=True)
for ax, t in zip(axes, [0, 15, 20, 30]):
swing = np.cos(2 * np.pi * t / period) # where each bob is, from -1 to 1
ax.scatter(swing, np.arange(len(n)), c=swing, cmap="cool", s=40)
ax.set_title(f"t = {t} s")
ax.set_xlim(-1.2, 1.2)
ax.axis("off")
plt.show()
# Try: t = 60 s (or 75, 80, 90): the same pictures again, as every count is whole
¿No tienes Python en este equipo? El cuaderno ejecuta el mismo script, los ejercicios y las respuestas en tu navegador, en Google Colab. El cuaderno está en inglés.
Línea a línea
n = np.arange(51, 75)Las 24 cuentas de oscilaciones por minuto: 51, 52, … 74.
period = cycle / nEl periodo de cada péndulo: 60 segundos divididos entre su cuenta.
length = g * (period / (2 * np.pi)) ** 2La fórmula del péndulo para oscilaciones pequeñas, T = 2π√(L / g), despejada para la longitud L.
fig, axes = plt.subplots(1, 4, figsize=(12, 4), sharey=True)Una figura con cuatro gráficos uno al lado de otro; el bucle rellena un gráfico por cada instante.
swing = np.cos(2 * np.pi * t / period)Dónde está cada péndulo en el instante t, de −1 a 1: tras t / period oscilaciones, el coseno de ese número de vueltas completas.
ax.set_title(f"t = {t} s")Una f-string pone el valor de t en el título.
Pruébalo tú
¿Cuánto miden el péndulo más largo y el más corto?
Pista
El script muestra las longitudes.
Respuesta
34,4 cm para 51 oscilaciones por minuto, 16,3 cm para 74.
Añade el instante t = 12 s. ¿En cuántos grupos se divide la fila?
Pista
Necesitas un quinto gráfico: plt.subplots(1, 5) y [0, 12, 15, 20, 30].
Respuesta
En cinco: a los 12 s, un quinto del minuto, los vecinos están a un quinto de oscilación.
Haz que sean 30 péndulos.
Pista
Cambia el final de np.arange.
Respuesta
n = np.arange(51, 81) da 30 cuentas, de 51 a 80.
Cuestionario
Tarjetas de repaso
Lee el anverso, di el reverso para ti y luego abre la tarjeta.
plt.subplots(1, 4)
Una figura y cuatro gráficos (axes) en una fila, para dibujar en ellos uno a uno.
f"t = {t} s"
Una f-string: el valor de t va en el lugar de {t}.
Periodo de un péndulo
Para oscilaciones pequeñas, T = 2π√(L / g): cuatro veces más largo significa el doble de lento.
Fase
En qué punto de su oscilación está un péndulo; aquí, el coseno de 2π·t / T.
np.round(x, 1)
Redondea cada número de un array a un decimal.