PA081: Programování numerických výpočtů 6. Simulace dynamických dějů jaro 2015 Něco, co se hýbe PA081: Programování numerických výpočtů objekty reálného světa kolem nás ► velká část počítačových her vesmírná tělesa plyn a kapaliny ► předpověď počasí ► simulace požárů, povodní, ... elektrický proud interakce atomů a molekul Dynamické systémy Diferenciální rovnice Příklady Dopfediiá metoda Zpětná metoda Semiimplicitní Metody vyšších Výpočet integrálu Komplexní příklad se to hýbe fyzikální zákony ► postihují principy chování reálného světa ► jejich dodržení v simulaci dodává důvěryhodnost Jak se to hýbe PA081: Programování numerických výpočtů fyzikální zákony ► postihují principy chování reálného světa ► jejich dodržení v simulaci dodává důvěryhodnost Newtonovy 1. setrvačnosti 2. síly - F = ma 3. akce a reakce termodynamické 1. Celková energie izolovaného systému zůstává konstantní. 2. Entropie izolovaného systému nikdy neklesá. Dynamické systémy Diferenciální rovnice Příklady Dopfediiá metoda Zpětná metoda Semiimplicitní Metody vyšších Výpočet integrálu Komplexní příklad 2. termodynamický zákon energie má snahu rovnoměrně se rozptýlit. psychologické vnímání času je souhrn zkušeností s jeho projevy. ► pozpátku pustený film poznáme na první pohled. ► nelze zcela snadno vyjádřit proč. Dynamické systémy Diferenciální rovnice Příklady Dopředná metoda Zpětná metoda Semiimplicitní Metody vyšších Výpočet integrálu Komplexní příklad 2. termodynamický zákon energie má snahu rovnoměrně se rozptýlit. psychologické vnímání času je souhrn zkušeností s jeho projevy. ► pozpátku pustený film poznáme na první pohled. ► nelze zcela snadno vyjádřit proč. dovoluje uchovávat energii (palivo/potrava + kyslík) ► de-facto podmínka existence života ► ale také příčina smrti Dynamické systémy Diferenciální rovnice Příklady Dopfediiá metoda Zpětná metoda Semiimplicitní Metody vyšších Výpočet integrálu Komplexní příklad 2. termodynamický zákon ► energie má snahu rovnoměrně se rozptýlit. ► psychologické vnímání času je souhrn zkušeností s jeho projevy. ► pozpátku puštěný film poznáme na první pohled. ► nelze zcela snadno vyjádřit proč. ► dovoluje uchovávat energii (palivo/potrava + kyslík) ► de-facto podmínka existence života ► ale také příčina smrti ► příčina Murphyho zákonů ► více viz http://secondlaw.oxy.edu Stavba simulace stavové proměnné ► popisují, v jakém stavu se systém nachází ► poloha, rychlost, ... jejich změny v čase ► jak na sebe stavové proměnné působí vzájemně (rychlost změna polohy) ► jak se projevují vnější impulsy (síla mění rychlost) diferenciální rovnice (obyčejné) ► vztah stavových proměnných a jejich časových derivací ► postupným řešením (integrací) získáme vývoj systému v čase Dynamické systémy Diferenciální rovnice Příklady Dopfediiá metoda Zpětná metoda Semiimplicitní Metody vyšších Výpočet integrálu Komplexní příklad 5/46 Řešení diferenciálních rovnic ► analytické ► jen speciální případy ► i tak komplikované metody ► dopředná (explicitní) Eulerova metoda ► použita v následujících příkladech ► v praxi téměř nepoužitelná (viz dále) ► zpětná (implicitní) Eulerova metoda ► semiimplicitní metody ► komplexnější metody Padající kulička ► stavové proměnné: výška z, rychlost pádu v ► změna výšky odpovídá rychlosti: dz = -vdt ► změna rychlosti - gravitační síla: drv = gdt ► korektní zápis systému rovnic dz/dt = -v dv/dt = g ► v kódu přímočará náhrada dt konečným krokem Dynamické systémy Diferenciální rovnice Příklady Dopfediiá metoda Zpětná metoda Semiimplicitní Metody vyšších Výpočet integrálu Komplexní příklad Pružinový oscilátor hmotný bod na pružine, pohyb jen v jednom směru ► vše ostatní zanedbáno změna polohy y odpovídá rychlosti, tj. hybnost/hmotnost dy = —dt m změna hybnosti odpovídá působící síle, ta je úměrná vychýlení pružiny dP = F -kydt Dynamické systémy Diferenciální rovnice Příklady Dopředná metoda Zpětná metoda Semiimplicitní Metody vyšších Výpočet integrálu Komplexní příklad Pružinový oscilátor float k = 1.3, m = 0.2, dt = 0.001; while (...) { float pi = p - k*y*dt, yl = y + p/m*dt; t += dt; p = pl; y = yl; Průlet komety ► poloha x, nenulová počáteční rychlost v ► pro zjednodušení vektory ve 2D ► změna polohy odpovídá rychlosti: dx = vdt ► změna rychlosti dána gravitačním působením Slunce x mkms dv = -G— dt x x 2 Jednoduchý elektrický obvod ► vstupním napětím U nabíjíme kondenzátor přes odpor —c C u výstupní napětí je úmerné kapacitě a náboji: u = q/C změna náboje je velikost proudu: dq/dt = i proud podle Ohmová zákona: i = (U - u)/R Dynamické systémy Diferenciální rovnice Příklady Dopředná metoda Zpětná metoda Semiimplicitní Metody vyšších Výpočet integrálu float u = 0, U = 14, R = 22e3, C = le-6, dt = 0.00001; while (...) { float dq = (U-iO/R * dt; u += dq/C; } Komplexní příklad stejně i pro proměnlivý vstup, např. U = sin(2TT -10 s ■ t Problémy dopředně metody nejvíce se projeví na pružinovém oscilátoru Dynamické systémy Diferenciální rovnice Příklady Dopfediiá metoda Zpětná metoda Semiimplicitní Metody vyšších Výpočet integrálu Komplexní příklad □ 5 10 15 20 25 40 45 50 Ař = 0.0001 (zelená), Ař = 0.01 (červená) ■O0.O 12/46 Problémy dopředně metody řešíme rovnici (resp. systém rovnic) &-/«.*'» počítáme posloupnost yn+i = yn + At — at výsledná sin x je ideálně nešikovná funkce ► pro x G [0, tt] je sinx > 0 a je konkávni, pro x G [tt, 2tt] je sinx < 0 a je konvexní ► použitá derivace vždy nadhodnocuje ► výpočet do systému "přidává energii" Zpětná Eulerova metoda použijeme derivaci až v bodě tn+i yn+i = yn + ^t dy dosazením vede na řešení rovnice yn+i = yn + At/(t n+11 yn+1)) implicitní metoda ► pro výpočet dalšího kroku musíme řešit rovnici nebo systém rovnic ► obecně nemusí být triviální □