Średnio zaawansowane · Fala wahadeł

Lekcja 5: Wzory na tablicach

Zbuduj w Pythonie wzór „Fala wahadeł” i po drodze naucz się:

  • wzór fizyczny zastosowany do całej tablicy
  • np.round i print do szybkiego sprawdzenia
  • kilka wykresów obok siebie z plt.subplots
  • f-stringi
  • faza: w którym miejscu wahnięcia jest wahadło

Najpierw obejrzyj

Film gra z YouTube po kliknięciu.

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

Nie masz Pythona na tym komputerze? Notatnik uruchamia ten sam skrypt, zadania i odpowiedzi w przeglądarce, w Google Colab. Notatnik jest po angielsku.

Linijka po linijce

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

    24 liczby wahnięć na minutę: 51, 52, … 74.

  2. period = cycle / n

    Okres każdego wahadła: 60 sekund podzielone przez jego liczbę wahnięć.

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

    Wzór na wahadło przy małych wychyleniach, T = 2π√(L / g), rozwiązany względem długości L.

  4. fig, axes = plt.subplots(1, 4, figsize=(12, 4), sharey=True)

    Jedna figura z czterema wykresami obok siebie; pętla wypełnia jeden wykres na każdą chwilę.

  5. swing = np.cos(2 * np.pi * t / period)

    Gdzie jest każdy ciężarek w chwili t, od −1 do 1: po t / okres wahnięć, cosinus tylu pełnych obrotów.

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

    f-string wstawia wartość t do tytułu.

Twoja kolej

  1. Jak długie są najdłuższe i najkrótsze wahadło?

    Podpowiedź

    Skrypt wypisuje długości.

    Odpowiedź

    34,4 cm dla 51 wahnięć na minutę, 16,3 cm dla 74.

  2. Dodaj chwilę t = 12 s. Na ile grup dzieli się rząd?

    Podpowiedź

    Potrzebujesz piątego wykresu: plt.subplots(1, 5) i [0, 12, 15, 20, 30].

    Odpowiedź

    Na pięć: po 12 s, jednej piątej minuty, sąsiednie wahadła dzieli jedna piąta wahnięcia.

  3. Zrób 30 wahadeł.

    Podpowiedź

    Zmień koniec np.arange.

    Odpowiedź

    n = np.arange(51, 81) daje 30 liczb, od 51 do 80.

Quiz

1. Dlaczego po 60 s wszystkie wahadła są znów w jednej linii?
2. Co robi sharey=True?
3. T = 2π√(L / g) rozwiązane względem L to…
4. Przy t = 15 f"t = {t} s" daje…
5. Po 30 s sąsiednie wahadła dzieli pół wahnięcia. Co widać?

Fiszki

Przeczytaj przód, powiedz sobie, co jest z tyłu, potem otwórz kartę.

  • plt.subplots(1, 4)

    Figura i cztery wykresy (osie) w jednym rzędzie, do rysowania po kolei.

  • f"t = {t} s"

    f-string: wartość t trafia w miejsce {t}.

  • Okres wahadła

    Przy małych wychyleniach T = 2π√(L / g): cztery razy dłuższe znaczy dwa razy wolniejsze.

  • Faza

    Miejsce wahadła w jego wahnięciu; tutaj cosinus z 2π·t / T.

  • np.round(x, 1)

    Zaokrągla każdą liczbę tablicy do jednego miejsca po przecinku.

Te fiszki na osobnej stronie →