Симуляція гравітації N тіл: як танцюють планети

Гравітація — найпростіша сила у всесвіті: одне рівняння, дві маси, одна відстань. Проте гравітаційний танець трьох і більше тіл породжує рух настільки складний, що його ніколи не можна розв'язати аналітично. Ось як ми симулюємо його чисельно, ефективно і точно.

Закон всесвітнього тяжіння Ньютона

Кожна маса у всесвіті притягує кожну іншу масу із силою, що визначається законом Ньютона:

F = G × m₁ × m₂ / r²

Де G — гравітаційна стала (6.674 × 10−11 Н·м²·кг−2), m₁ і m₂ — маси двох тіл, а r — відстань між їхніми центрами. Сила є силою притягання і діє вздовж лінії, що з'єднує обидва тіла.

Для двох тіл це дає систему, яку можна розв'язати повністю. Тіла обертаються навколо спільного центра мас по еліпсах — закони Кеплера випливають безпосередньо. Додайте третє тіло — і все змінюється.

Чому задача N тіл складна: задача трьох тіл

У 1887 році Анрі Пуанкаре довів, що гравітаційна задача трьох тіл не має загального розв'язку у замкненій формі. Неможливо записати рівняння, яке дає положення трьох гравітуючих мас у момент часу t на основі їхніх початкових умов. Система, як правило, хаотична — малі відмінності в початкових умовах призводять до цілком різних довгострокових траєкторій.

Це не провал математики. Це фундаментальна властивість самих рівнянь. Три гравітаційно взаємодіючих тіла можуть демонструвати будь-який режим поведінки: стабільні орбіти, квазіперіодичний рух, резонанси, хаотичне блукання і викидання одного з тіл у нескінченність.

Єдиний практичний спосіб передбачити еволюцію системи N тіл — чисельне інтегрування: робити малі кроки за часом, обчислювати сили, оновлювати швидкості й положення, повторювати. Саме це і робить симуляція — і саме це робить кожен астрофізичний код, від моделей Сонячної системи до симуляцій галактик.

Наївний алгоритм: складність O(n²)

Прямолінійний підхід до обчислення гравітаційних сил полягає в перевірці кожної пари тіл:

for each body i:
    force[i] = (0, 0, 0)
    for each body j ≠ i:
        r = position[j] - position[i]
        dist = length(r)
        force[i] += G * mass[i] * mass[j] / dist² * normalize(r)

Це вимагає n × (n−1) обчислень сили на кожен крок за часом — складність O(n²). Для 100 тіл: 9 900 обчислень. Для 1 000 тіл: 999 000 обчислень. Для 10 000 тіл: майже 100 мільйонів обчислень. Для справжньої галактики зі 100 мільярдами зірок наївний алгоритм повністю нездійсненний.

Пом'якшення для запобігання сингулярностям

У рівнянні сили криється чисельна проблема: коли два тіла зближуються дуже сильно, r прямує до нуля, а сила прямує до нескінченності. Насправді зірки не є точковими масами — близькі зближення включають складну фізику. У симуляції ми додаємо довжину пом'якшення ε:

F = G × m₁ × m₂ / (r² + ε²)

Це обмежує максимальну силу і запобігає чисельним вибухам під час близьких зближень. Довжина пом'якшення — параметр симуляції: занадто велика — і фізика стає нереалістичною; занадто мала — і близькі зближення дестабілізують інтегратор.

Барнс-Хат: зниження до O(n log n)

У 1986 році Джош Барнс і Піт Хат опублікували алгоритм, що зменшує складність задачі N тіл з O(n²) до O(n log n) — трансформаційне покращення. Ключова ідея: віддалене скупчення багатьох тіл можна наблизити одним тілом у центрі мас скупчення. Гравітаційна похибка від такого наближення мала, коли скупчення знаходиться далеко.

Алгоритм Барнса-Хата будує октодерево (дерево, яке рекурсивно ділить тривимірний простір на вісім октантів у кожному вузлі). Кожен внутрішній вузол зберігає сумарну масу і центр мас усіх тіл у своєму піддереві.

Під час обчислення сили на тіло i дерево обходиться. У кожному вузлі приймається рішення на основі відношення s/d — де s це просторовий розмір вузла, а d — відстань від тіла i до центра мас вузла. Якщо s/d < θ (порогове значення кута розкриття, зазвичай від 0.5 до 1.0), вузол трактується як єдина точкова маса. Інакше розкриваються і обробляються окремо дочірні вузли.

function compute_force(body i, node):
    if node is leaf:
        add direct force from node's body
    else:
        s = node size
        d = distance from i to node's centre of mass
        if s/d < θ:
            add approximate force from node's mass
        else:
            for each child of node:
                compute_force(body i, child)

При θ ≈ 0.5 похибка в оцінці сили нижче 1%, тоді як обчислення скорочуються з годин до секунд для тієї ж кількості частинок. Сучасні космологічні симуляції використовують варіанти Барнса-Хата для симуляції мільярдів частинок темної матерії.

Стрибкоподібна інтеграція: стабільність важливіша за точність

Знання сил — лише половина задачі. Потрібно ще й інтегрувати рівняння руху — оновлювати положення і швидкості — так, щоб система залишалась стабільною протягом тисяч кроків за часом.

Просте інтегрування Ейлера (x += v*dt; v += a*dt) здається природним, але має фатальний недолік для орбітальної механіки: воно не зберігає енергію. Повна енергія системи з часом дрейфує вгору, а орбіти повільно розкручуються назовні. У довгостроковій симуляції планети покидають свої зірки.

Стрибкоподібний інтегратор (leapfrog) вирішує це, зсуваючи оновлення положення і швидкості на половину кроку за часом:

// kick-drift-kick (KDK) form:
v_half = v + a * (dt/2)      // half-step velocity
x = x + v_half * dt           // full-step position
a = compute_forces(x)         // forces at new position
v = v_half + a * (dt/2)       // second half-step velocity

Стрибкоподібна схема є симплектичною — вона точно зберігає модифікований гамільтоніан, близький до справжнього. На практиці це означає, що енергія коливається навколо правильного значення замість дрейфу, що дозволяє симуляціям тривати мільярди кроків за часом без накопичення похибки.

Інтегратори вищого порядку (Рунге-Кутта 4, Йошида 6-го порядку) точніші на кожному кроці, але вимагають більше обчислень сили. Для гравітаційної задачі N тіл стрибкоподібна схема з малим кроком за часом зазвичай є найкращим компромісом.

Реальні застосування в астрофізиці

Симуляція N тіл — основний інструмент сучасної астрофізики:

Досліджуйте гравітаційну динаміку прямо у браузері на /nbody/. Спробуйте налаштувати стабільні орбіти трьох тіл у формі вісімки, або подивіться, що станеться, якщо додати масивного гостя до планетної системи.

Стабільність нашої Сонячної системи

Чи стабільна наша власна Сонячна система? Це виявляється напрочуд складним питанням. Чисельні інтегрування, виконані на мільярди симульованих років, показують, що внутрішні планети (від Меркурія до Марса) мають малу, але ненульову ймовірність увійти в хаотичні орбіти. Орбіта Меркурія може стати нестабільною за часові масштаби у кілька мільярдів років, потенційно зіштовхнувшись з Венерою або будучи викинутою.

Зовнішні планети стабільніші, але не ідеально. Резонанс чотирьох тіл між Юпітером, Сатурном, Ураном і Нептуном означає, що малі збурення можуть накопичуватися. Сонячна система, яку ми знаємо, може бути лише однією з багатьох можливих конфігурацій, яка випадково проіснувала достатньо довго, щоб еволюціонувало складне життя.

Часті запитання

Що таке задача N тіл?

Задача N тіл запитує, як N точкових мас рухаються під дією взаємного гравітаційного притягання. Для N=2 існує точний аналітичний розв'язок (кеплерові орбіти). Для N≥3 загального розв'язку у замкненій формі не існує, і систему потрібно розв'язувати чисельно, інтегруючи закон тяжіння Ньютона для всіх попарних взаємодій у часі.

Як гравітаційна сила залежить від відстані?

Гравітаційна сила підпорядковується закону оберненого квадрата: F = G·m₁·m₂/r². Подвоєння відстані зменшує силу вчетверо; потроєння — у дев'ять разів. Це означає, що віддалені тіла мають незначний вплив, тоді як близькі зближення спричиняють різкі відхилення — саме звідси й береться багата динаміка симуляцій N тіл.

Які методи чисельного інтегрування використовуються для симуляцій N тіл?

Поширені методи включають інтегрування Ейлера (просте, але неточне), стрибкоподібне інтегрування / метод Верле (добре зберігає енергію, широко застосовується), метод Рунге-Кутти 4-го порядку (точний, але обчислювально дорогий) та симплектичні інтегратори (зберігають об'єм фазового простору, ідеальні для довготривалих орбітальних симуляцій). Стрибкоподібна схема — стандартний вибір для гравітаційних кодів N тіл.

Що таке алгоритм Барнса-Хата?

Барнс-Хат — це апроксимаційний алгоритм, який зменшує обчислення задачі N тіл з O(N²) до O(N log N), групуючи віддалені тіла у більші агрегати за допомогою октодерева (3D) або квадродерева (2D). Якщо скупчення тіл достатньо далеко відносно свого розміру (критерій кута розкриття), воно трактується як єдине тіло в його центрі мас.

Що таке гравітаційне пом'якшення?

Гравітаційне пом'якшення замінює закон сили 1/r² на 1/(r²+ε²) поблизу r=0, де ε — довжина пом'якшення. Це запобігає нескінченним силам під час близьких зближень, які спричиняли б нестабільність кроку за часом. Пом'якшення фактично трактує частинки як протяжні розподіли маси, а не точкові маси на дуже малих відстанях.

Що спричиняє хаотичну поведінку в системах N тіл?

Системи N тіл демонструють хаос, тому що близькі гравітаційні зближення надзвичайно чутливі до початкових умов. Малі зміни положення чи швидкості частинки можуть посилюватися гіперболічними близькими зближеннями, призводячи до цілком різних довгострокових траєкторій. Сама Сонячна система хаотична за часові масштаби близько 5 мільйонів років.

Що таке точки Лагранжа?

Точки Лагранжа — це п'ять особливих позицій у системі двох тіл (наприклад, Земля-Сонце), де мале третє тіло може залишатися у стабільній або нестабільній рівновазі. L1, L2, L3 — нестабільні сідлові точки, тоді як L4 і L5 (на 60° попереду і позаду по орбіті) стабільні для співвідношень мас нижче приблизно 1:25. Космічний телескоп Джеймса Вебба обертається навколо точки L2 системи Сонце-Земля.

Як темна матерія впливає на космологічні симуляції N тіл?

У космологічних симуляціях N тіл частинки темної матерії домінують у бюджеті маси (~85% усієї матерії). Без темної матерії симульовані галактики обертаються надто повільно, а структури не встигають формуватися достатньо швидко, щоб відповідати спостереженням. Включення темної матерії відтворює криві обертання, структуру гало та крупномасштабну павутиноподібну структуру ниток, що відповідають спостережуваним оглядам галактик.

Що таке орбітальний резонанс?

Орбітальний резонанс виникає, коли два тіла мають орбітальні періоди в простому цілочисельному співвідношенні (наприклад, 1:2, 2:3). Повторювані гравітаційні поштовхи в одних і тих же орбітальних фазах підсилюють збурення. Резонанси можуть дестабілізувати орбіти (проміжки Кірквуда в поясі астероїдів) або стабілізувати їх (резонанс 2:3 Плутона й Нептуна утримує їх від зіткнення).

Чи можуть симуляції N тіл моделювати злиття чорних дір?

Стандартні ньютонівські коди N тіл не можуть моделювати злиття чорних дір, оскільки на малих відстанях домінують загальнорелятивістські ефекти. Спеціалізовані коди використовують постньютонівські наближення для додавання релятивістських поправок або повну числову теорію відносності (розв'язуючи рівняння поля Ейнштейна на сітці). Гравітаційні хвилі, виявлені LIGO, були передбачені саме за допомогою таких симуляцій числової теорії відносності.