Двойной маятник и хаос
Простая система с непредсказуемым поведением: чувствительность к начальным условиям.
Детерминированный хаос — поведение полностью предсказуемой по уравнениям системы, при котором ничтожные различия в начальных условиях экспоненциально нарастают, делая долгосрочный прогноз невозможным.
Две связанные нелинейности
Двойной маятник — это маятник, на конце которого подвешен второй маятник. Всего две точки и две нити, но поведение поражает: движение выглядит беспорядочным, никогда не повторяется и крайне чувствительно к начальным условиям. При этом система полностью детерминирована — её уравнения точны и не содержат ни капли случайности. Это и есть хаос: предсказуемые правила, непредсказуемый результат.
Эксперимент: эффект бабочки
Запустим два двойных маятника, отличающихся начальным углом второго звена всего на 0.001 радиана (примерно 0.06°), и сравним их состояния через 10 секунд:
import math
g = 9.8
def step(s, dt):
th1, w1, th2, w2 = s
m1=m2=1.0; L1=L2=1.0
d = th1-th2
den = (2*m1+m2 - m2*math.cos(2*th1-2*th2))
a1 = (-g*(2*m1+m2)*math.sin(th1) - m2*g*math.sin(th1-2*th2)
- 2*math.sin(d)*m2*(w2*w2*L2 + w1*w1*L1*math.cos(d))) / (L1*den)
a2 = (2*math.sin(d)*(w1*w1*L1*(m1+m2) + g*(m1+m2)*math.cos(th1)
+ w2*w2*L2*m2*math.cos(d))) / (L2*den)
return (w1, a1, w2, a2)
def run(th2_0, T=10.0, dt=0.001):
s = [math.pi/2, 0.0, th2_0, 0.0]
for _ in range(int(T/dt)):
k = step(s, dt)
s = [s[i] + k[i]*dt for i in range(4)]
return s[0], s[2]
a = run(math.pi/2)
b = run(math.pi/2 + 0.001)
print("Отличие начального угла θ2 всего на 0.001 рад:")
print(f"A: theta1={a[0]:+.3f} theta2={a[1]:+.3f}")
print(f"B: theta1={b[0]:+.3f} theta2={b[1]:+.3f}")
print(f"Расхождение за 10 c: d1={abs(a[0]-b[0]):.3f}, d2={abs(a[1]-b[1]):.3f} рад")
print("Крошечное различие выросло в макроскопическое — это ХАОС.")Вывод:
Отличие начального угла θ2 всего на 0.001 рад: A: theta1=-1.501 theta2=+1.723 B: theta1=-1.566 theta2=+0.734 Расхождение за 10 c: d1=0.066, d2=0.989 рад Крошечное различие выросло в макроскопическое — это ХАОС.
Через 10 секунд маятники, стартовавшие почти одинаково, оказались в совершенно разных положениях: второе звено разошлось почти на радиан (около 57°). Различие в тысячную долю радиана выросло в сотни раз. Это и есть знаменитый эффект бабочки: мельчайшая причина даёт огромное следствие.
Показатель Ляпунова
Скорость, с которой расходятся близкие траектории, измеряют показателем Ляпунова λ: расстояние между ними растёт как e^(λt). Положительный λ — признак хаоса. Он задаёт горизонт предсказуемости: даже зная начальное состояние с точностью до 15 знаков, через время порядка 1/λ мы теряем всякую возможность предсказать поведение. Удвоение точности измерения отодвигает горизонт лишь чуть-чуть.
Как работает под капотом
Хаос не противоречит детерминизму. Уравнения двойного маятника однозначны: одинаковый старт всегда даёт одинаковую траекторию. Проблема в чувствительности: реальные начальные данные всегда известны лишь приблизительно, а нелинейная система экспоненциально усиливает эту неопределённость. Поэтому погоду нельзя предсказать на месяц вперёд (атмосфера хаотична), хотя уравнения гидродинамики детерминированы. Хаос — фундаментальное свойство нелинейных систем, от маятника до климата и Солнечной системы на больших временах.
Частые ошибки
- Считать, что хаос — это случайность. Хаотическая система детерминирована; «случайным» выглядит лишь результат из-за чувствительности.
- Доверять одной хаотической траектории как точной. Численная ошибка тоже растёт как
e^(λt); долгий прогноз бессмыслен. - Думать, что мельче шаг спасёт прогноз. Это лишь чуть отодвигает горизонт предсказуемости, но не отменяет хаос.
Итоги
- Двойной маятник детерминирован, но хаотичен.
- Ничтожные различия начальных условий растут экспоненциально (эффект бабочки).
- Показатель Ляпунова λ задаёт горизонт предсказуемости ~1/λ.
- Хаос объясняет, почему погоду и долгую динамику систем нельзя предсказать.