Intermedio · Ola de péndulos

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.py
"""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

  1. n = np.arange(51, 75)

    Las 24 cuentas de oscilaciones por minuto: 51, 52, … 74.

  2. period = cycle / n

    El periodo de cada péndulo: 60 segundos divididos entre su cuenta.

  3. length = g * (period / (2 * np.pi)) ** 2

    La fórmula del péndulo para oscilaciones pequeñas, T = 2π√(L / g), despejada para la longitud L.

  4. 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.

  5. 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.

  6. ax.set_title(f"t = {t} s")

    Una f-string pone el valor de t en el título.

Pruébalo tú

  1. ¿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.

  2. 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.

  3. 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

1. ¿Por qué a los 60 s todos los péndulos vuelven a ir a la par?
2. ¿Qué hace sharey=True?
3. T = 2π√(L / g), despejada para L, es…
4. Con t = 15, f"t = {t} s" da…
5. A los 30 s, los vecinos están a media oscilación. ¿Qué ves?

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.

Estas tarjetas en su propia página →