Стаття Хаос та Динаміка · ≈ 9 хв читання

Подвійний маятник та детермінований хаос

Два маятника — один прикріплений до кінця іншого. Система абсолютно детермінована і описується чотирма звичайними диференціальними рівняннями. Але при відхиленні більше ~20° траєкторія стає непередбачуваною навіть через кілька секунд.

1. Опис системи

Подвійний маятник — класичний об'єкт теорії хаосу. Система складається з двох невагомих стрижнів довжиною l₁ і l₂ з кульками масами m₁ і m₂. Перший стрижень підвішений у нерухомій точці, другий — на кінці першого.

ЗміннаЗначенняОпис
θ₁кутВідхилення першого маятника від вертикалі
θ₂кутВідхилення другого маятника від вертикалі
ω₁dθ₁/dtКутова швидкість першого маятника
ω₂dθ₂/dtКутова швидкість другого маятника
l₁, l₂мДовжини стрижнів
m₁, m₂кгМаси кульок
g9.81 м/с²Прискорення вільного падіння

Систему описують чотири ступені свободи: (θ₁, θ₂, ω₁, ω₂). Це проекція чотиривимірного фазового простору, де рухається точка стану системи.

2. Лагранжіан та рівняння руху

Для виведення рівнянь руху використовуємо формалізм Лагранжа: замість розкладу сил Ньютона записуємо функцію енергії і застосовуємо рівняння Ейлера–Лагранжа.

Декартові координати кульок через узагальнені координати θ₁, θ₂:

Декартові координати x₁ = l₁ sin θ₁              y₁ = −l₁ cos θ₁
x₂ = x₁ + l₂ sin θ₂      y₂ = y₁ − l₂ cos θ₂

Кінетична енергія T і потенціальна U:

Лагранжіан L = T − U T = ½(m₁ + m₂)l₁²ω₁² + ½m₂l₂²ω₂² + m₂l₁l₂ω₁ω₂ cos(θ₁ − θ₂)

U = −(m₁ + m₂)g·l₁ cos θ₁ − m₂g·l₂ cos θ₂

L = T − U
Чому Лагранж, а не Ньютон?

Реакція зв'язків (натяг стрижнів) автоматично зникає з рівнянь Лагранжа, якщо правильно обрати узагальнені координати. У ньютонівському підході доведеться явно виписувати ці сили і вирішувати систему з невідомими.

3. Стан системи та фазовий простір

Стан подвійного маятника описується вектором:

Вектор стану S = [θ₁, θ₂, ω₁, ω₂]

Еволюція — це крива у чотиривимірному фазовому просторі (θ₁, θ₂, ω₁, ω₂). При малих відхиленнях крива є квазіперіодичним тором (регулярний рух). При великих — вона заповнює хаотичну область простору, ніколи не повторюючись.

Дослід: запустіть два маятники з θ₁, θ₂ = 90° і θ₁, θ₂ = 90.001°. За 5–10 секунд їхні траєкторії будуть абсолютно різними — незважаючи на різницю у θ = 0.001° ≈ 0.02 мм.

4. Рівняння руху (явний вигляд)

Застосовуємо рівняння Ейлера–Лагранжа d/dt(∂L/∂ωᵢ) − ∂L/∂θᵢ = 0 і розв'язуємо відносно кутових прискорень (α₁ = dω₁/dt, α₂ = dω₂/dt). Позначимо Δθ = θ₁ − θ₂:

Кутові прискорення (спрощено при m₁ = m₂ = m, l₁ = l₂ = l) Δ = 2m·l² · [1 − ½ cos²(Δθ)]    (знаменник)

α₁ = [−m·l²·ω₂² sin(Δθ) − 2mg·l sin θ₁ + m·l²·ω₁²·sin(Δθ)cos(Δθ)] / Δ

α₂ = [2m·l²·ω₁² sin(Δθ) + 2mg·l sin θ₂·cos(Δθ) + 2m·l²·ω₂²·sin(Δθ)cos(Δθ) − 2mg·l sin θ₁·cos(Δθ)] / Δ

Для загального випадку (різні m та l) рівняння довші, але мають ту саму структуру лінійної системи 2×2. На практиці їх вирішують через матричне розкладання або за формулою Крамера.

5. Числова інтеграція: RK4

Маємо систему чотирьох ОДУ:

Система ОДУ першого порядку dθ₁/dt = ω₁
dθ₂/dt = ω₂
dω₁/dt = α₁(θ₁, θ₂, ω₁, ω₂)
dω₂/dt = α₂(θ₁, θ₂, ω₁, ω₂)

Ця система записується у векторній формі dS/dt = f(S), де S = [θ₁, θ₂, ω₁, ω₂]. Метод RK4 застосовується до всього вектора одночасно — чотири оцінки k₁, k₂, k₃, k₄ кожна є 4D-вектором.

Чому RK4, а не Leapfrog? Через нелінійність прискорення α(θ, ω) залежить від θ і ω одночасно — це заважає ефективному «розщепленню» Leapfrog. RK4 справляється з такою структурою краще і забезпечує 4-й порядок точності на інтервалі регулярного руху.

6. Хаос та чутливість до початкових умов

Хаос у подвійному маятнику — не випадковість і не помилка: це детермінована непередбачуваність. Для кількісної характеристики використовують показник Ляпунова λ:

Локальний показник Ляпунова λ = lim(t→∞) (1/t) · ln[|δS(t)| / |δS(0)|]

Де δS(t) — відстань між двома траєкторіями у фазовому просторі. При λ > 0 — хаотична поведінка: траєкторії розходяться експоненціально.

Для подвійного маятника при великих початкових відхиленнях λ ≈ 3–7 с⁻¹. Це означає: при різниці θ = 0.001° траєкторії стають абсолютно різними приблизно через ln(57.3°/0.001°) / λ ≈ 1–3 секунди.

Регулярний та хаотичний режими

  • Малі відхилення (<15°) — квазіперіодичний рух: два зчеплені осцилятори. Показник Ляпунова λ ≈ 0 (числово).
  • Середні відхилення (15°–60°) — перемежовуваний хаос: чередуються регулярні та хаотичні «вибухи».
  • Великі відхилення (>60°) — повний хаос. Верхній маятник регулярно перекидається через верхню точку.
Перекидання

При θ₂ = π (верхній маятник вертикально вгорі) система проходить через нестійку рівновагу. Визначити напрямок перекидання неможливо більш ніж за ~1 с наперед при скінченній точності вимірів.

7. Перерізи Пуанкаре

Щоб візуалізувати чотиривимірний фазовий простір, використовують переріз Пуанкаре — «знімок» фазового стану у момент, коли θ₂ = 0 (другий маятник проходить вертикаль знизу вгору). Відкладаємо (θ₁, ω₁) для кожного такого моменту.

Результат:

  • Регулярний рух → точки лягають на замкнуті криві (інваріантні тори)
  • Хаотичний рух → точки заповнюють хаотичну область («море хаосу»)
  • Острови стабільності — острівці регулярності всередині моря хаосу

Перерізи Пуанкаре є стандартним інструментом аналізу гамільтонового хаосу і дозволяють одразу побачити структуру фазового простору без чотиривимірної уяви.

8. Псевдокод

// Подвійний маятник — RK4 інтегратор
const g = 9.81, m1 = 1, m2 = 1, L1 = 1, L2 = 1;

// Похідна стану: повертає [dθ1, dθ2, dω1, dω2]
function deriv([θ1, θ2, ω1, ω2]) {
  const Δ = θ1 - θ2;
  const cosD = Math.cos(Δ), sinD = Math.sin(Δ);
  const M = m1 + m2;

  // Знаменник матриці мас
  const denom = L1 * L2 * (M * 2 - m2 * cosD * cosD * 2);

  // Кутові прискорення
  const α1 = (-2 * m2 * L2 * ω2*ω2 * sinD
            - 2 * M * g * Math.sin(θ1)
            + m2 * g * Math.sin(θ1 - 2*θ2)
            + 2 * m2 * L1 * ω1*ω1 * sinD * cosD) / denom;

  const α2 = (2 * sinD * (
              M * L1 * ω1*ω1
            + M * g * Math.cos(θ1)
            + m2 * L2 * ω2*ω2 * cosD)) / (L2 * denom / L1);

  return [ω1, ω2, α1, α2];
}

// RK4 крок
function step(state, dt) {
  const k1 = deriv(state);
  const k2 = deriv(add(state, scale(k1, dt/2)));
  const k3 = deriv(add(state, scale(k2, dt/2)));
  const k4 = deriv(add(state, scale(k3, dt)));
  return add(state, scale(
    add(k1, add(scale(k2,2), add(scale(k3,2), k4))),
    dt/6
  ));
}

// Допоміжні функції
const add   = (a,b) => a.map((v,i) => v + b[i]);
const scale = (a,s) => a.map(v => v * s);

// Головний цикл
let state = [Math.PI / 2, Math.PI / 2, 0, 0]; // θ1=θ2=90°
const dt = 1 / 60; // 60 FPS

function animate() {
  for (let i = 0; i < 4; i++) state = step(state, dt / 4); // дрібний крок
  draw(state);
  requestAnimationFrame(animate);
}

Параметр якості: на кожен кадр виконуємо 4 підкроки RK4 (dt/4 кожен). Це дає 16 обчислень deriv() на кадр — достатньо для стабільної і точної симуляції при 60 FPS.

Побачте хаос у дії

Запустіть симуляцію подвійного маятника — спостерігайте до 120 паралельних траєкторій з мінімально різними початковими умовами.

🌀 Запустити маятник Атрактор Лоренца →