Маятник: когда формула перестаёт работать
Школьная формула периода маятника верна лишь для малых колебаний — симуляция покажет, где она ломается.
Математический маятник — груз на невесомой нити длины $L$; при малых отклонениях его колебания гармонические с периодом $T = 2\pi\sqrt{L/g}$.
Уравнение маятника
Если отклонить маятник на угол $\theta$, возвращающая сила пропорциональна $\sin\theta$, и уравнение движения для угла таково:
$$\ddot\theta = -\frac{g}{L}\sin\theta.$$
Это нелинейное уравнение из-за синуса, и точного решения в элементарных функциях у него нет. Но при малых углах $\sin\theta \approx \theta$ (в радианах), и уравнение становится тем же гармоническим осциллятором, что и пружина, с $\omega = \sqrt{g/L}$. Отсюда знаменитая формула периода малых колебаний:
$$T = 2\pi\sqrt{\frac{L}{g}}.$$
Для $L = 1$ м и $g = 9.8$ это $T \approx 2.007$ с. Важно: в эту формулу не входит ни масса груза, ни амплитуда — потому Галилей и заметил, что период не зависит от размаха (для малых колебаний).
Симуляция и проверка периода
Проинтегрируем полное нелинейное уравнение с синусом и измерим период по моментам прохождения через ноль. Сравним для разных начальных амплитуд.
import math
def period(theta0, g=9.8, L=1.0, dt=0.0005):
th, om, t = theta0, 0.0, 0.0
prev, crossings = th, []
while t < 10:
a = -(g/L)*math.sin(th)
om += a*dt; th += om*dt; t += dt
if prev > 0 and th <= 0: # прошли ноль сверху вниз
crossings.append(t)
if len(crossings) == 2:
break
prev = th
return crossings[1] - crossings[0]
print(f"малоугловая формула T = {2*math.pi*math.sqrt(1.0/9.8):.4f} с")
for deg in (5, 30, 60, 90, 120):
print(f"амплитуда {deg:3d}° период {period(math.radians(deg)):.4f} с")
Вывод:
малоугловая формула T = 2.0071 с амплитуда 5° период 2.0080 с амплитуда 30° период 2.0420 с амплитуда 60° период 2.1540 с амплитуда 90° период 2.3690 с амплитуда 120° период 2.7555 с
При $5°$ симуляция даёт $2.008$ с — почти точно формула. Но с ростом амплитуды период увеличивается: при $90°$ он уже $2.37$ с, а при $120°$ — целых $2.76$ с, на $37\%$ больше «школьного» значения. Формула $T = 2\pi\sqrt{L/g}$ — это приближение для малых углов, и симуляция наглядно показывает границы его применимости. Реальный маятник при больших размахах качается медленнее.
Как работает под капотом
Источник расхождения — замена $\sin\theta$ на $\theta$. При $\theta = 90° = \frac{\pi}{2} \approx 1.571$ рад истинный $\sin\theta = 1$, а приближение даёт $1.571$ — завышение на $57\%$. Возвращающая сила оказывается слабее, чем в линейной модели, поэтому маятник «ленится» и период растёт. Этот пример — отличная иллюстрация общего принципа: численная симуляция честно решает настоящее уравнение, тогда как аналитическая формула часто опирается на упрощение. Когда упрощение нарушается, доверять надо симуляции. Кстати, измерение периода по двум прохождениям нуля — простой, но рабочий способ извлечь характеристику из «сырой» траектории.
Частые ошибки
- Применять $T=2\pi\sqrt{L/g}$ к большим амплитудам. При размахе в десятки градусов формула заметно занижает период.
- Линеаризовать уравнение в коде. Если написать $a = -(g/L)\theta$ вместо $\sin\theta$, вы потеряете весь эффект — симуляция станет «врать» так же, как формула.
- Слишком крупный шаг при измерении периода. Грубая сетка промахивается мимо момента нуля; для точного периода нужен малый $\Delta t$ или интерполяция.
Итог
- Уравнение маятника $\ddot\theta=-\frac{g}{L}\sin\theta$ нелинейно; точной формулы периода нет.
- Малоугловое приближение даёт $T=2\pi\sqrt{L/g}$, не зависящий от массы и амплитуды.
- Симуляция показывает: с ростом амплитуды период растёт (при $120°$ — на $\approx 37\%$).
- Симуляция решает настоящее уравнение; формула верна лишь там, где верно упрощение.