Lição 5: Fórmulas sobre arrays
Construa em Python o padrão “Onda de pêndulos” e aprenda pelo caminho:
- uma fórmula de física aplicada a um array inteiro
- np.round e print para uma verificação rápida
- vários gráficos lado a lado com plt.subplots
- f-strings
- fase: em que ponto da oscilação está um pêndulo
Veja-o primeiro
É reproduzido a partir do YouTube depois de um clique.
"""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
Não tem Python neste computador? O notebook executa o mesmo script, os exercícios e as respostas no navegador, no Google Colab. O notebook está em inglês.
Linha a linha
n = np.arange(51, 75)As 24 contagens de oscilações por minuto: 51, 52, … 74.
period = cycle / nO período de cada pêndulo: 60 segundos divididos pela sua contagem.
length = g * (period / (2 * np.pi)) ** 2A fórmula do pêndulo para oscilações pequenas, T = 2π√(L / g), com o comprimento L isolado.
fig, axes = plt.subplots(1, 4, figsize=(12, 4), sharey=True)Uma figura com quatro gráficos lado a lado; o loop preenche um gráfico por instante.
swing = np.cos(2 * np.pi * t / period)Onde está cada peso no instante t, de −1 a 1: depois de t / period oscilações, o cosseno de outras tantas voltas completas.
ax.set_title(f"t = {t} s")Uma f-string põe o valor de t no título.
Experimente
Que comprimento têm o pêndulo mais comprido e o mais curto?
Pista
O script mostra os comprimentos.
Resposta
34,4 cm para 51 oscilações por minuto, 16,3 cm para 74.
Acrescente o instante t = 12 s. Em quantos grupos se divide a fila?
Pista
É preciso um quinto gráfico: plt.subplots(1, 5) e [0, 12, 15, 20, 30].
Resposta
Cinco: aos 12 s, um quinto do minuto, pêndulos vizinhos estão separados por um quinto de oscilação.
Passe para 30 pêndulos.
Pista
Mude o fim de np.arange.
Resposta
n = np.arange(51, 81) dá 30 contagens, de 51 a 80.
Quiz
Flashcards
Leia a frente, tente recordar o verso e só depois abra o cartão.
plt.subplots(1, 4)
Uma figura e quatro gráficos (axes) numa linha, para desenhar um a um.
f"t = {t} s"
Uma f-string: o valor de t entra no lugar de {t}.
Período do pêndulo
Para oscilações pequenas, T = 2π√(L / g): quatro vezes mais comprido significa duas vezes mais lento.
Fase
Em que ponto da sua oscilação está um pêndulo; aqui, o cosseno de 2π·t / T.
np.round(x, 1)
Arredonda cada número de um array a uma casa decimal.