Z archivu progresivně mrtvého programátora: Problém tří těles

Technologie Jan Janča

Když se dnes v běžné IT firmě vysloví slovo “simulovat”, vzbudí to u přítomných pravděpodobně především snahu rozpomenout se, kdy naposledy předstírali zánět slepého střeva, celkovou tělesnou slabost, případně premenstruační či postejakulační syndrom, aby pak místo nahlášeného sickday vyrazili na výlet nebo rande. V dávných dobách, když jsem ještě žil, tomu však bylo úplně jinak.

V těch temných časech, kdy monitory ještě nebyly placaté a srdce počítačů netepaly v ritmu gigahertz nýbrž v k uzoufání utahaných megahertz, se počítače nepoužívaly toliko k posílání zbytečných zpráv, psaní a čtení ještě zbytečnějších článků, natožpak k natáčení a sledování storíček, porna a seriálů. Hlavním úkolem počítačů bylo, světe div se, počítat, a to především různé fyzikální, chemické a také astronomické simulace, s jejichž pomocí jsme se snažili nakouknout do budoucnosti nebo pochopit minulost. 

Když to nejde spočítat na papíru 

Obecná představa laické veřejnosti, a dnes i valné části vývojářů, o tom, jak fyzici a jiní podobní magoři dochází k výsledkům je, že prostě počítají složité rovnice, často diferenciální, integrály, matice a jiné prasárny, aby po hodinách úmorné práce získali výsledek v podobě čísla nebo nějaké funkce. Takovému přístupu k řešení matematických problémů se říká analytický, a jeho cílem je nalezení přesného, často obecného řešení rovnic pomocí algebraických operací a diferenciálního a integrálního počtu.

Matematický aparát pro tento způsob řešení fyzikálních problémů vymysleli intelektuální superhrdinové jako Descartes, Newton, Leibnitz, Euler nebo Fourier (omlouvám se všem zasloužilým zemřelým, které jsem nejmenoval, rozkládejte se v pokoji) což umožnilo Evropanům vyvinout technologie, se kterými ovládli a vybudovali moderní svět, tak jak ho dnes známe. 

Nechci dělat reklamu, ale epesní tričko se zakladatelem analytické geometrie, René Descartesem, můžet koupit u nás v e-shopu.

Jenže už Newton v 17. století věděl, že existují úlohy, na které jsou analytické metody krátké, protože vedou na příliš komplikované soustavy vzájemně propletených rovnic, pro které je nemožné najít přesné a obecné řešení. Zatímco sestavit a obecně vyřešit rovnice, které popisují soustavu dvou na sebe vzájemně gravitačně působících těles je při znalosti Newtonova gravitačního zákona snadné, udělat to stejné pro soustavu tří těles je komplikované jak ženská psychologie.

Pokud vás děsí vzorce, pusťte si tohle video a následující dva odstavce klidně přeskočte!

Přiklad soustavy rovnic popisující systém dvou těles

Newtonův gravitační zákon říká, že dvě tělesa o hmotnostech m1 a m2 se přitahují silou F, která je přímo úměrná součinu jejich hmotností a nepřímo úměrná čtverci vzdálenosti r mezi nimi, což můžeme zapsat do jednoduché rovnice:

F = G m1 m2r2

kde:

  • F je gravitační síla mezi dvěma tělesy,
  • G = 6.67430 × 10-11m3 kg-1 s-2
  • m1 m2​ jsou hmotnosti těles,
  • r je vzdálenost mezi středy těles.

Vektorová forma:

Pro těleso m1 působící na těleso m2:

F12 = G m1 m2r2r

Pro těleso m2 působící na těleso m1:

F21 = -G m1 m2r2r

Tyto rovnice není složité vyřešit a jejich výsledkem je zjištění, že se dvě tělesa v závislosti na počátečním směru a rychlosti buď srazí nebo otáčejí okolo společného těžiště po uzavřených drahách, případně, že se od sebe začnou vzdalovat.   

Přiklad soustavy rovnic popisující systém tří těles

Jak už jsem uvedl výše, problém tří těles je složitý a obecně nemá jednoduché analytické řešení. Nicméně umíme zapsat pohybové rovnice pro každé z těles v systému, které vyjadřují vzájemné gravitační působení. Síly působící na každé těleso jsou výsledkem gravitační interakce s ostatními dvěma tělesy a pohybové rovnice pro každé těleso tedy můžeme zapsat následujícím způsobem:

Rovnice pohybu pro těleso m1:

F1 = G m1 m2|r2 - r1|3 (r2 - r1) + G m1 m3|r3 - r1|3 (r3 - r1)

Rovnice pohybu pro těleso m2:

F2 = G m2 m1|r1 - r2|3 (r1 - r2) + G m2 m3|r3 - r2|3 (r3 - r2)

Rovnice pohybu pro těleso m3:

F3 = G m3 m1|r1 - r3|3 (r1 - r3) + G m3 m2|r2 - r3|3 (r2 - r3)

Pohybové rovnice v diferenciálním tvaru:

m1d2r1dt2 = G m1m2 (r2 - r1)|r2 - r1|3 + m3 (r3 - r1)|r3 - r1|3

m2d2r2dt2 = G m2m1 (r1 - r2)|r1 - r2|3 + m3 (r3 - r2)|r3 - r2|3

m3d2r3dt2 = G m3m1 (r1 - r3)|r1 - r3|3 + m2 (r2 - r3)|r2 - r3|3

Soustava tří těles se narozdíl od té obsahující pouze dvě tělesa nechová pěkně, protože gravitační vliv třetího tělesa (v závislosti na poměru hmotností těles) do systému vnáší "chaos". Obecné a přesné analytické řešení podobné soustavy diferenciálních rovnic tedy nedokážeme najít, a proto se ke slovu dostávájí počítače a tak zvané numerické metody (neplést si s numerologií, pavědou pro nenapravitelné romantiky a idioty), které se k přibližnému výsledku (ne přesnému, ale dostatečně přesnému pro potřebu výpočtu) dostávají tak, že simulují vývoj systému krok za krokem. 

Kapesní simulátor problémů 3 těles

Pro lepší představu dynamiky systému tří těles jsem vám připravil jednoduchý simulátor, s jehož pomocí si můžete vyzkoušet, co se stane při změně různých parametrů, ať už hmotnosti, počáteční polohy nebo rychlosti a směru pohybu těles. V kódu jsem použil Eulerovu metodu pro numerickou integraci pohybu těles, která počítá pozice a rychlosti těles pomocí malých časových kroků.

Abyste se hned nelekli vzniklého chaosu, nastavil jsem počáteční podmínky tak, aby se tělesa chovala ukázněně, třeba jako v naší sluneční soustavě. Stačí ale udělat několik malých změn a předvídatelné chování se promění v chaos. Pár zajímavých konfigurací k vyzkoušení najdete pod simulátorem. 

PopisHmotnost (M)Poloha X (AU)Poloha Y (AU)Úhel pohybu (°)Rychlost (m/s)
Těleso 1
Těleso 2
Těleso 3

Parametry pro hvězdu, planetu a její měsíc

PopisHmotnost (M)Poloha X (AU)Poloha Y (AU)Úhel pohybu (°)Rychlost (m/s)
Těleso 1300001802
Těleso 210-0.750600
Těleso 30.00050-0,772400

Parametry pro dvě hvězdy obíhající spořádaně okolo o dva řády hmotnější hvězdy 

PopisHmotnost (M)Poloha X (AU)Poloha Y (AU)Úhel pohybu (°)Rychlost (m/s)
Těleso 13000000
Těleso 210-0.50750
Těleso 3201-180500

Chaotický taneček tří těles

PopisHmotnost (M)Poloha X (AU)Poloha Y (AU)Úhel pohybu (°)Rychlost (m/s)
Těleso 1400-0.7514015
Těleso 20.4-0.510150
Těleso 3250.51-4530

Další kombinace si může vyzkoušet sami, rychle zjistíte, že najít stabilní konfiguraci systému není snadné, a že se nevyhnete srážkám případně ztrátám těles vystřeleným gravitačním prakem únikovou rychlostí potřebnou k překonání gravitačního vlivu zbylých dvou těles.

Pro úplnost dodávám, že hmotnost se zadává v násobcích hmotností Slunce, poloha v astronomických jednotkách (1AU = 150 mil. km) přičemž střed má souřadnice x=0 a y=0, rychlost v tisících m/s.   

Proč to vlastně počítáme aneb základy planetární obrany

Než se z naší soustavy stal v podstatě nudný a zapadlý kousek galaxie, ve kterém dochází ke kataklyzmatickým událostem typu srážek velkých těles sotva jednou za desetiletí, bylo to tady docela peklo. Země i ostatní planety, respektive jejich zárodky se srážely, padaly na ně planetky, větší či menší šutry, o kometárních jádrech a kovových meteoritech nemluvě. Nakonec se stačí podívat na krátery posetý povrch Měsíce, a o pohnuté historii naší planetární soustavy budete mít jasno.

Dnes tady máme relativně klid, ale i tak jednou za pár miliónů let schytáme zásah kometou či skálou o velikosti krajského města, což zapříčiní, že skoro všechno chcípne a Zemi ovládne nějaký nový druh.

Je tedy logické, že se lidstvo snaží sledovat dráhy těles ve sluneční soustavě a předpovídat, jak budou vypadat v budoucnosti, případně identifikovat potenciálně nebezpečné křižiče zemské dráhy, které by nás mohly všechny ubezdušit a umést tak delfínům cestičku k ovládnutí planety. A to se neobejde bez simulací a numerických metod, díky kterým můžeme nahlédnout do budoucnosti.

Další použití numerických metod

Numerické metody jsou potřeba všude tam, kdy rovnice nemají přesné řešení nebo jsou příliš složité na řešení tradičními matematickými postupy. Bez numerických metod si na počítači například nespočítáte výši hypotéky nebo průsečík dvou funkcí, třeba y=sin(x) a y=x, o výpočtu soustavy lineárních rovnic nemluvě. Nakonec, pokud se k nám chystáte na pohovor na pozici vývojáře, a objevím se tam já, připravte se, že na jednu z níže uvedených numerických metod přijde řeč.

Metody pro řešení nelineárních rovnic:

  • Metoda dělení intervalu: Jednoduchá metoda pro hledání kořenů funkcí dělením intervalu na poloviny.
  • Newtonova metoda: Rychlá metoda využívající derivaci funkce k iterativnímu přiblížení kořene.

Metody pro řešení soustav lineárních rovnic:

  • Gaussova eliminace: Systématický postup pro řešení soustav lineárních rovnic převedením na trojúhelníkovou matici.
  • LU rozklad: Rozklad matice na součin dolní a horní trojúhelníkové matice pro snadnější řešení rovnic.

Interpolace a aproximace:

  • Lagrangeova interpolace: Metoda pro nalezení interpolujícího polynomu pro danou množinu bodů.
  • Metoda nejmenších čtverců: Technika pro aproximaci funkce minimalizací součtu čtverců odchylek mezi datovými body a aproximovanou funkcí.

Numerická integrace a derivace:

  • Lichoběžníková metoda: Jednoduchá metoda pro numerickou integraci rozdělením oblasti pod křivkou na lichoběžníky.
  • Simpsonova metoda: Přesnější metoda integrace využívající parabolické interpolace mezi body.

Řešení obyčejných diferenciálních rovnic (ODR):

  • Eulerova metoda: Základní metoda pro numerické řešení ODR pomocí postupného přibližování hodnoty funkce.
  • Runge-Kuttovy metody: Rodina metod pro řešení ODR, které poskytují vyšší přesnost než Eulerova metoda.

Řešení parciálních diferenciálních rovnic (PDR):

  • Metoda konečných diferencí: Diskretizace rovnic na mřížce bodů a následné řešení.
  • Metoda konečných prvků: Rozklad oblasti na malé části (prvky) a aproximace řešení pomocí variací.

A na závěr peknú pieseň

Nedivte se, že je naše generace tak odolná, když přežila i tohle...

Co si dále přečíst