Double Pendulum and Deterministic Chaos
Two pendulums — one attached to the end of the other. The system is completely deterministic and described by four ordinary differential equations. Yet with deflections beyond ~20° the trajectory becomes unpredictable within just a few seconds.
1. System description
Подвійний маятник — класичний об'єкт теорії хаосу. Система
складається з двох невагомих стрижнів довжиною l₁ і
l₂ з кульками масами m₁ і m₂.
Перший стрижень підвішений у нерухомій точці, другий — на кінці
першого.
| Variable | Value | Description |
|---|---|---|
| θ₁ | кут | Відхилення першого маятника від вертикалі |
| θ₂ | кут | Відхилення другого маятника від вертикалі |
| ω₁ | dθ₁/dt | Кутова швидкість першого маятника |
| ω₂ | dθ₂/dt | Кутова швидкість другого маятника |
| l₁, l₂ | м | Довжини стрижнів |
| m₁, m₂ | кг | Маси кульок |
| g | 9.81 м/с² | Прискорення вільного падіння |
Систему описують чотири ступені свободи: (θ₁, θ₂, ω₁, ω₂). Це проекція чотиривимірного фазового простору, де рухається точка стану системи.
2. Lagrangian and equations of motion
Для виведення рівнянь руху використовуємо формалізм Лагранжа: замість розкладу сил Ньютона записуємо функцію енергії і застосовуємо рівняння Ейлера–Лагранжа.
Cartesian coordinates кульок через узагальнені координати θ₁, θ₂:
x₂ = x₁ + l₂ sin θ₂ y₂ = y₁ − l₂ cos θ₂
Кінетична енергія T і потенціальна U:
U = −(m₁ + m₂)g·l₁ cos θ₁ − m₂g·l₂ cos θ₂
L = T − U
Реакція зв'язків (натяг стрижнів) автоматично зникає з рівнянь Лагранжа, якщо правильно обрати узагальнені координати. У ньютонівському підході доведеться явно виписувати ці сили і вирішувати систему з невідомими.
3. System state and phase space
Стан подвійного маятника описується вектором:
Еволюція — це крива у чотиривимірному фазовому просторі (θ₁, θ₂, ω₁, ω₂). При малих відхиленнях крива є квазіперіодичним тором (регулярний рух). При великих — вона заповнює хаотичну область простору, ніколи не повторюючись.
Дослід: запустіть два маятники з θ₁, θ₂ = 90° і θ₁, θ₂ = 90.001°. За 5–10 секунд їхні траєкторії будуть абсолютно різними — незважаючи на різницю у θ = 0.001° ≈ 0.02 мм.
4. Equations of motion (explicit form)
Застосовуємо рівняння Ейлера–Лагранжа d/dt(∂L/∂ωᵢ) − ∂L/∂θᵢ = 0 і розв'язуємо відносно кутових прискорень (α₁ = dω₁/dt, α₂ = dω₂/dt). Позначимо Δθ = θ₁ − θ₂:
α₁ = [−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. Numerical integration: RK4
Маємо систему чотирьох ОДУ:
dθ₂/dt = ω₂
dω₁/dt = α₁(θ₁, θ₂, ω₁, ω₂)
dω₂/dt = α₂(θ₁, θ₂, ω₁, ω₂)
Ця система записується у векторній формі dS/dt = f(S), де S = [θ₁, θ₂, ω₁, ω₂]. Метод RK4 застосовується до всього вектора одночасно — чотири оцінки k₁, k₂, k₃, k₄ кожна є 4D-вектором.
Чому RK4, а не Leapfrog? Через нелінійність прискорення α(θ, ω) залежить від θ і ω одночасно — це заважає ефективному «розщепленню» Leapfrog. RK4 справляється з такою структурою краще і забезпечує 4-й порядок точності на інтервалі регулярного руху.
6. Chaos and sensitivity to initial conditions
Хаос у подвійному маятнику — не випадковість і не помилка: це детермінована непередбачуваність. Для кількісної характеристики використовують показник Ляпунова λ:
Де δS(t) — відстань між двома траєкторіями у фазовому просторі. При λ > 0 — хаотична поведінка: траєкторії розходяться експоненціально.
Для подвійного маятника при великих початкових відхиленнях λ ≈ 3–7 с⁻¹. Це означає: при різниці θ = 0.001° траєкторії стають абсолютно різними приблизно через ln(57.3°/0.001°) / λ ≈ 1–3 секунди.
Regular and chaotic regimes
- Малі відхилення (<15°) — квазіперіодичний рух: два зчеплені осцилятори. Показник Ляпунова λ ≈ 0 (числово).
- Середні відхилення (15°–60°) — перемежовуваний хаос: чередуються регулярні та хаотичні «вибухи».
- Великі відхилення (>60°) — повний хаос. Верхній маятник регулярно перекидається через верхню точку.
При θ₂ = π (верхній маятник вертикально вгорі) система проходить через нестійку рівновагу. Визначити напрямок перекидання неможливо більш ніж за ~1 с наперед при скінченній точності вимірів.
7. Poincaré sections
Щоб візуалізувати чотиривимірний фазовий простір, використовують переріз Пуанкаре — «знімок» фазового стану у момент, коли θ₂ = 0 (другий маятник проходить вертикаль знизу вгору). Відкладаємо (θ₁, ω₁) для кожного такого моменту.
Результат:
- Регулярний рух → точки лягають на замкнуті криві (інваріантні тори)
- Хаотичний рух → точки заповнюють хаотичну область («море хаосу»)
- Острови стабільності — острівці регулярності всередині моря хаосу
Poincaré sections є стандартним інструментом аналізу гамільтонового хаосу і дозволяють одразу побачити структуру фазового простору без чотиривимірної уяви.
8. Pseudocode
// Подвійний маятник — 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 step
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); // substep
draw(state);
requestAnimationFrame(animate);
}
Параметр якості: на кожен кадр виконуємо
4 підкроки RK4 (dt/4 кожен). Це дає 16 обчислень
deriv() на кадр — достатньо для стабільної і точної
симуляції при 60 FPS.
Побачте хаос у дії
Запустіть симуляцію подвійного маятника — спостерігайте до 120 паралельних траєкторій з мінімально різними початковими умовами.
🌀 Запустити маятник Атрактор Лоренца →