Nebudu se tady zabývat tím, co to jsou Hamiltonovy rovnice, na to je teoretická mechanika. Pro tento účel je to soustava diferenciálních rovnic, převedených do tvaru $$ \dot q_1 = f_1 (q_1, p_1, ..., q_i, p_i) $$ $$ ... $$ $$ \dot q_i = f_i (q_1, p_1, ..., q_i, p_i) $$ $$ \dot p_1 = g_1 (q_1, p_1, ..., q_i, p_i) $$ $$ ... $$ $$ \dot p_i = g_i (q_1, p_1, ..., q_i, p_i) $$ kde $ \dot q_i, \dot p_i $ jsou derivace zobecněných souřadnic a hybností podle času. Celkově je to tedy sudý počet rovnic 2*i. Tyto rovnice zapíšeme jednoduše ve správném pořadí a se správným pořadím proměnných ve tvaru, který používá javascript, stanovíme 2*i počátečních podmínek a stanovíme co se má vykreslit. Osy to nemá, každý graf jde od minima do maxima, je to jen pro představu, jak funkce vypadá. Objekt, vstupující do rovnic má tvar {t:t, w:[q1, q2 ... qn, p1, p2, ... pn]}, t značí čas. Default příklad je harmonický oscilátor, lze použít i nelineární oscilátor nebo pro příklad Lorenzův atraktor a nakonec railgun s disipací energie. Stačí kliknout na zvýrazněný text a stisknout tlačítko Submit. Parametry simulace lze jednoduše měnit. Připadá mi to o hodně jednodušší popsat takto problém textem než vymýšlet celé IDE s mnoha parametry. Parametry funkce solve (krok, počet_kroků, počáteční_podmínky, seznam_funkcí), plot (výsledek_ze_solve, popis_os, barva). Objekt popis_os má tvar {x:[list], y:[list]}, přičemž list je buď 't' nebo 'w', číslo_proměnné.
Vlastní solver používá metodu Runge-Kutta 4.řádu, je poměrně přesná a není to o moc složitější než prostý Euler. Pokud hledáte ty Hamiltonovy rovnice, pomůže tento skript, jeho výstup je pak zhruba tento. A to je vše.