Numerické metody pro řešení počátečních úloh pro ODR jednokrokové metody Formulace: Hledáme řešení y = y() rovnice () s počáteční podmínkou () y () = f(, y()) () y( ) = y. () Smysl: Analyticky lze spočítat jen velmi malou skupinu počátečních úloh pro ODR. Proto je tak důležité numerické řešení. Princip: Základem metod je diskretizace proměnných. Přibližné řešení se nekonstruuje jako spojitá funkce, ale nagenerujeme body,,,... a určujeme čísla y, y, y,..., která aproimují y( ), y( ), y( ),.... Poznámka: Body sítě,,,... nemusí být ekvidistantní: i+ = i + h i. Platí-li: h i = h i mluvíme o metodě s konstantním krokem (ekvidistantní síť) Neplatí-li: h i = h i mluvíme o metodě s proměnným krokem Poznámka: Aproimace y n hodnoty přesného řešení y( n ) v bodě n se počítá z hodnot přibližného řešení v předchozích uzlech. Počítáme-li y n+ pouze pomocí hodnoty y n mluvíme o jednokrokové metodě. Počítáme-li y n+ pomocí více předchozích hodnot y n, y n,... mluvíme o vícekrokové metodě.
Jednokrokové metody Nejjednodušší metodou je Eulerova metoda. Princip: y... je dáno (počáteční podmínka) y... počítáme etrapolací z hodnoty y, přičemž se na intervalu, řešení aproimuje přímkou, která prochází bodem [, y ] a má směrnici y = f(, y ). Ta má rovnici y = y + ( )f(, y ). Tj. pro dostáváme: y = y + ( ) }{{} h f(, y ). Obecně dostaneme rekurentní vztah: Geometricky: y n+ = y n + h n f( n, y n ), n =,,,... 6 y přesné řešení... y() y( ) y( ) y y( ) y y( ) y y y 6 7 8
Poznámky:. Eulerovu metodu můžeme chápat také tak, že hodnotu y( n+ ) = y( n + h n ) aproimujeme pomocí Taylorova polynomu stupně pro funkci y v bodě n : y( n+ ) y( n ) + h n y ( n ) = y( n ) + h n f( n, y( n )).. Také ji lze chápat tak, že diferenciální rovnici y = f(, y) nahradíme diferenční rovnicí y n+ y n h n = f( n, y n ) n =,,,...
Příklad: Řešte úlohu y = y, y() = Řešení: Použijeme rekurentní vztah: na intervalu ;,6 s konstantními kroky h =, a h =,. (Přesné řešení: y() = e + ). y n+ = y n + h f( n, y n ). h =, h =, n přesné {}}{ y( n ) y n e n y n e n,,,,,,,9,9,,,87,8,7,8,7,,78,78,,,7,68,6,7,9,,7,68,,6,698,6,7,66,. y... přesné řešení... řešení pro h =,... řešení pro h =,........6.7.8 Poznámka: ) Vidíme, že je chyba úměrná h, ) Chyba s rostoucím vzrůstá.
Obecná jednokroková metoda Eulerova metoda je sice velmi jednoduchá, ale k dosažení určité přesnosti musíme používat velmi malé kroky h i. Chceme-li jednokrokovou metodu vyššího řádu, musíme se zříci linearity, tj. y n+ = y n + \h n Φ( n, y n, h n, f) n =,,,... Metody Taylorova typu: Hodnotu y( n+ ) budeme aproimovat pomocí Taylorova rozvoje vyššího řádu (. řádu = Eulerova metoda), tj. y( n+ ) = y( n + h n ) = y( n ) + h n y ( n ) + h n! y ( n ) +... + hp n p! y(p) ( n ) () Derivace y v bodě n lze určit postupným derivováním funkce f. y = f(, y()) y = f + f y y }{{} =f(,y()) ( f = }{{} f + f y }{{} f y. dy ) }{{} d y Obecně lze odvodit rekurenci: y = f(, y()) y (r+) = f (r) (, y()) = f (r ) (, y()) + f y (r ) (, y()) f(, y()) r =,,... () Zbývá jen dosadit () za derivace v ().
Příklad: Odvoďte metodu Taylorova typu.řádu pro řešení úlohy: y = y, y() = na intervalu ;, 6 s konstantním krokem h =,. (Přesné řešení: y() = e + ). Řešení: f(, y) = y f (, y) = f + f y f = + ( ) f(, y) = + y. Dostáváme rekurentní vztah: y n+ = y n + h n ( n y n ) + h n( n + y n ) n přesné {}}{ y( n ) y n h( n y n ) h ( n + y n ) e n,, -,,,,,87,8 -,8, -,,,7,7 -,69,7 -,,6,698,7 -, Poznámka: Vidíme, že metoda Taylorova typu. řádu pro h =, dává přesnější výsledky než Eulerova metoda s h =,.
Metody Runge-Kuttova typu Univerzálnější metody než metody Taylorova typu. Vychází také z Taylorova polynomu, ale nepoužívá se ho přímo, aby nebylo nutné eplicitně vyjadřovat derivace funkce f = f(, y()) a počítat jejich hodnoty. Hledaná aproimace je kombinací několika hodnot funkce f vypočítaných v několika strategicky volených bodech (, y) na intervalu n, n+. Poznámka: Těchto metod je velké množství! Ukážeme si odvození dvou metod tohoto typu s geometrickou interpretací. Použijeme následující úvahy: 6 y M P M + 6 7 8 Věta: Nechť oblouk M M je částí paraboly. Potom platí:. Tečna v bodě P je rovnoběžná s tětivou M M.. Směrnice tětivy M M je aritmetickým průměrem směrnic tečen v M a M.
Důkaz: Rovnice paraboly (polynomu.stupně): y b = c( a) 6 y y b = c( a) y = c( a) + b y = c( a) b a 6 8. Směrnice tečny v bodě P : Směrnice tětivy M M je: y ( + ) = c( + a) = c( + a) y( ) y( ) = c( a) + b c( a) b = = c ac + a c + b c + ac a c b = ( = c ) a( ) = c( + a).. Směrnice tečny v bodě M je: y ( ) = c( a) Směrnice tečny v bodě M je: y ( ) = c( a) Jejich aritmetický průměr: y ( ) + y ( ) = c( a) + c( a) = = c( a + a) = c( + a).
Nyní použijeme vlastnost ) Známe souřadnice bodu M. Jestliže bychom znali y-souřadnici bodu P, pak stačí udělat tečnu a bodem M vést rovnoběžku a dostaneme y-souřadnici bodu M. My ale y-souřadnici bodu P neznáme (obecně funkce y = y() nemusí být parabola, to je jen naše aproimace), takže ji vyjádříme přibližně. Bod P nahradíme bodem P, který má stejnou -ovou souřadnici a leží na tečně k M. 6 y P P M P má souřadnice: + h, y + h f(, y ) }{{} y ( ) M + 6 7 8 Tečna v bodě P má směrnici: y ( + h ), tj. y ( + h )= f( + h, y + h k {}}{ f(, y )). Stejnou směrnici by však měla mít i tětiva M M souřadnice bodu M jsou: = + h y = y + h Tyto vztahy lze přepsat do tvaru (obecně) k {}}{ y ( + h ) k = f( n, y n ) k = f( n + h n, y n + h n k ) Této metodě se říká modifikovaná Eulerova metoda. y n+ = y n + h n k
Nyní použijeme vlastnost ) Známe souřadnice bodu M. Protože neznáme y-souřadnici bodu M, nahradíme ho bodem M, který má stejnou -souřadnici a leží na tečně procházející bodem M. 9 8 7 6 y M M M má souřadnice: ozn. = k {}}{ + h }{{, y } + h f(, y ) = } {{ } =y ( ) M 6 7 8 Směrnice tečny v M je: ozn. = k {}}{ f( + h, y + h f(, y )) Bod M dostaneme z podmínky, že směrnice tětivy M M je aritmetickým průměrem směrnic tečen v M a M, tj. M má souřadnice: = + h y = y + h (k + k ) Obecně: k = f( n, y n ) k = f( n + h n, y n + h n k ) y n+ = y n + h n (k + k ) Této metodě se říká Heunova metoda Poznámka: Obě tyto metody jsou.řádu (aproimovali jsme parabolou). Poznámka: Nejvíce se používá tzv. klasická Runge-Kuttova metoda, která je. řádu.
Numerické metody pro řešení počátečních úloh pro ODR vícekrokové metody Myšlenka: V jednokrokových metodách se y n+ počítá pouze s využitím y n (a hodnot n, h n ). Je rozumné počítat y n+ s využitím více předchozích hodnot y n, y n, y n,..., y n k+, dosáhneme tím větší přesnosti. Pro jednoduchost se omezíme na metody s konstantním krokem h (h n = h, Poznámka: Je třeba si uvědomit, že si lze vymyslet nepřeberné množství metod. Jedna z možností je použít metody numerického derivování (špatně podmíněné). Další z možností je použít metody numerické integrace Rovnici y = f(, y) zintegrujeme od n do n+ : y( n+ ) y( n ) = n+ n n). f(, y()) d () }{{} =F () Je zřejmé, že funkci F () = f(, y()) neznáme. Známe-li ale hodnoty y v bodech,,..., n, můžeme vypočítat numerické hodnoty: F = F ( ) = f(, y( )) F = F ( ) = f(, y( )). F n = F ( n ) = f( n, y( n )) Pomocí těchto hodnot lze interpolovat funkci F () funkcí P () a integrál v () nahradit n+ n P () d. Interpolace, etrapolace funkce F () ( postupy): ) F () můžeme etrapolovat na intervalu n, n+ pomocí hodnot F, F,..., F n eplicitně dostaneme y( n+ ) =.... ) F () můžeme interpolovat pomocí hodnot F, F,..., F n a F n+ = F ( n+ ) = f( n+, y( n+ )) ve výpočtu integrálu vystoupí y n+ = y( n+ ) a dostaneme tak implicitní rovnici s neznámou na obou stranách, tuto rovnici řešíme postupnými aproimacemi.
Adams-Bashfortovy metody Poznámka: Metody získáné postupem ). Postup: Vezmeme posledních k hodnot F n, F n,..., F n k+ a sestrojíme P k () interpolační polynom (k ) stupně. Tímto polynomem potom aproimujeme funkci f(, y()) na intervalu n, n+, tj. počítáme: y n+ = y n + n+ n P k () d. Příklad: Odvoďte vzorec Adams-Bashfortovy metody pro k =. 7 6 F F n F n P () P () můžeme vyjádřit například pomocí Langrangeova interpolačního polynomu: P () = F n l n () + F n l n (), n n n+ 6 7 8 n+ l n () = n n n }{{} h l n () = n n n }{{} h P () = F n [ ] [ ] h ( n) + F n h ( n ) = = h ( n) = h ( n ) = [ ] (Fn F n ) + n F n n F n h P () d = ( ) [ (Fn F n ) n+ n +(F n n F n n )( n+ n ) ] = n h }{{}}{{} h (( n +h) n) = [ ] (F n F n )( n h + h h ) + F n n F n n = = F n n F n n + h F n h F n + F n n F n n = = F n ( n n ) + h }{{} F n h ( F n = h F n ) F n. h y n+ = y n + h (F n F n )
Poznámka: Samozřejmě potřebujeme znát prvních k hodnot F i. (Ty můžeme vypočítat nějakou jednokrokovou metodou). Poznámka: Podobně bychom mohli odvodit vzorec Adams-Bashfortovy metody pro k =. F P () F n n F n n F n n n+ Opět bychom museli najít interpolační polynom P () (. stupně) a poté zintegrovat přes n, n+. Výsledkem je (dcv.): 6 7 8 y n+ = y n + h (F n 6F n + F n )
Adams-Moultonovy metody Poznámka: Metody získáné postupem ). Postup: Vezmeme posledních k hodnot a přidáme ještě neznámou F n+, tj. F n+, F n, F n,..., F n k+. Sestrojíme Q k () interpolační polynom k-tého stupně. Tímto polynomem aproimujeme funkci f(, y()) na intervalu n, n+, tj. počítáme: n+ y n+ = y n + Q k () d. Příklad: Odvoďte vzorec Adams-Moultonovy metody pro k =. n 7 6 F jako bychom F n ji znali Q () F n+ Q () můžeme vyjádřit opět např. pomocí Lagrangeova interpolačního polynomu: Q () = F n+ l n+ () + F n l n () l n+ () = n n+ n = h ( n) n n+ l n () = n+ n n+ = h ( n+) 6 7 8 n+ n Q k () d = h [ ] [ Q () = F n+ h ( n) + F n ] h ( n+) = [ = h [(F n+ F n ) + F n n+ F n+ n ] ( ) n+ n (F n+ F n ) + ( n+ n ) (F n n+ F n+ n ) ] = }{{}}{{} h ( n+ n) ( n+ + n) } {{ } h = ( n+ + n )(F n+ F n ) + F n n+ F n+ n = = n+f n+ n+f n + nf n+ nf n + n+ F n F n+ n = ( n+ = F n+ + ) ( n n + F n n+ n+ ) n = = h (F n+ + F n ) y n+ = y n + h (F n+ + F n ), kde F n+ = f( n+, y n+ ). Pozor! y n+ = y n + h ( f(n+, y n+ ) + F n ). Tuto rovnici řešíme iterační metodou např. metodou prosté iterace a tak dostaneme y n+.
Poznámka: Podobně můžeme odvodit vzorec např. pro k = F F n+ Q () F n n F n n n+ Opět bychom museli najít interpolační polynom Q () (. stupně). Poté integrovat přes n, n+ a dostat (dcv.) 6 7 8 y n+ = y n + h ( Fn+ }{{} +8F n F n ) y n+ = y n + h Opět vyřešíme iterační metodou y n+. F n+ =f( n+,y n+ ) ( f(n+, y n+ ) + 8F n F n )
Algoritmus prediktor-korektor Poznámka: Jde o obecné schéma výpočtu. Princip: Předpokládejme, že máme dostatečně přesně vypočítány hodnoty y, y,..., y k nějakou eplicitní metodou. Nyní chceme počítat y k. jako vstupní hod- ) nejprve nějakou eplicitní metodou určíme nultou iteraci y [] k notu pro další výpočet (PREDIKTOR). ) vypočteme hodnotu pravé strany F [s] k ) vypočteme lepší aproimaci y [s+] k =: f k (KOREKTOR). F [s] k = f( k, y [s] k ). pomocí nějaké implicitní metody s využitím Pomocí kroků ) a ) určíme N iterací y [] k, y[] k,..., y[n] k (N dáno). Na závěr přiřadíme y k = y [N] k. Stejný postup opakujeme pro y k+, y k+,.... Poznámka: Dané schéma lze použít na různé metody. Je žádoucí použít eplicitní a eplicitní metodu stejného řádu (pro zachování přesnosti). Volba konkrétních metod je na nás. Poznámka: Označíme-li operaci: a) P... prediktor b) E... vyčíslení (evaluation) c) C... korektor Můžeme toto schéma zapsat ve tvaru: P (EC) N případně P (EC) N E, vyčíslujeme-li ještě F k = f( k, y [N] k ) (což je lepší). Dostaneme pak různé varianty tohoto schématu: P EC, P ECE P (EC), P (EC) E P (EC), P (EC) E.,.
Příklad: Řešte algoritmem prediktor-korektor založeném na Adamsových metodách druhého řádu na intervalu ;, 6 počáteční úlohu: Přesné řešení: y = e ( ). Použijeme algoritmus typu P EC. Vzorec prediktoru má tvar: y = y + e, tj. f(, y()) = y + e y() = y [] n+ = y n + h (F n F n ) Korektor: Volte krok h =,. y n+ = y n + h [] (F n+ + F n ) n n přesné {}}{ y( n ) y n [] F n [] y n e n,,977,,9789,8,,89 P,96 E,87 C,896,, 6,788 P,7 E,776 C,796,8 Pro určení hodnoty y použijeme např. jednokrokovou modifikovanou Eulerovu metodu (. řádu): k = f(, y ) = y + e = = + = k = f( + h/, y + h/ k ) = = + e,. =,. y = y + h k =. = +,, =,9789 Určíme hodnoty F a F.