Numerické řešení diferenciálníc rovnic Mirko Navara ttp://cmp.felk.cvut.cz/ navara/ Centrum strojovéo vnímání, katedra kybernetiky FEL ČVUT Karlovo náměstí, budova G, místnost 104a ttp://mat.feld.cvut.cz/nemecek/nummet.tml 4. prosince 010 Omezení: obyčejné (nikoli parciální) diferenciální rovnice, Caucyo počáteční úloa, pouze jedna diferenciální rovnice 1. řádu Úloa: Na intervalu x 0, x n máme řešit diferenciální rovnici s počáteční podmínkou kde f je funkce dvou reálnýc proměnnýc a y 0 R. y (x) = f(x, y(x)) y(x 0 ) = y 0, Poznámka: Pokud f nezávisí na y, tj. f(x, y) = g(x), dostáváme numerickou integraci jako speciální případ řešení diferenciální rovnice y (x) = g(x) Existence a jednoznačnost řešení Není obecně zaručena: Příklad: Uvažujme diferenciální rovnici s počáteční podmínkou: y (x) = 3 y(x), y(0) = 0, kde třetí odmocninu považujeme za reálnou funkci definovanou i pro záporný argument. Má řešení např. y(x) = 0 a y(x) = ± ( 3 x) 3. Věta: Necť funkce f je definovaná a spojitá na x 0, x n R (tj. pro všecna x x 0, x n, y R). Necť je splněna Lipscitzova podmínka L R x x 0, x n y 1, y R : f(x, y 1 ) f(x, y ) L y 1 y. Pak řešení naší úloy na intervalu x 0, x n existuje a je jednoznačné. Postačující podmínka: f y spojitá a omezená na x 0, x n R. Interpretace úloy a princip řešení Poznámka: Ekvivalentní formulace úloy: řešení y(x) = y 0 + x x 0 f(t, y(t)) dt lze cápat jako integrál (neznámé) funkce g(t) = f(t, y(t)) jedné proměnné nebo křivkový integrál známé funkce f přes (neznámou) křivku s parametrizací (t, y(t)), t x 0, x n. Interval x 0, x n rozdělíme na n dílčíc intervalů délky = (x n x 0 )/n. Získáme uzlové body = x 0 + i, i = 0,..., n. Správné odnoty řešení v uzlovýc bodec, y( ), naradíme odady y i. 1
Hodnoty derivace: f i = f(, y i ). Obecný postup řešení Generujeme posloupnost y i, i = 0,..., n. V kroku i + 1 počítáme z odadů y 0,..., y i odad y i+1. Přesné řešení: odadujeme pomocí y(+1 ) y( ) = y i+1 y i Jednotlivé metody se liší pouze odadem y i. y i+1 = y i + y i. f(t, y(t)) dt f(t, y(t)) dt. Rungovy-Kuttovy metody 1: Eulerova metoda Je zobecněním metody levéo odadu; funkci f(t, y(t)) narazujeme její odnotou f(, y i ) v bodě f(, y i ) dt = f(, y i ), y i+1 = y i + f(, y i ) = y i + f i. Geometrický význam: f i = f(, y i ) je směrnice úsečky vedené body (, y i ), (+1, y i+1 ). Odad cyby Taylorův rozvoj funkce y se středem v x 0 vyodnotíme v bodě x 1 : y(x 1 ) = y(x 0 ) + y (x 0 ) + y (ξ), kde ξ x 0, x 1. y(x 1 ) = y(x 0 ) + f(x 0, y 0 ) + }{{} y (ξ), y 1 y(x 1 ) y 1 = y (ξ). Cyba na konci prvnío kroku je úměrná. V dalšíc krocíc vycázíme z počáteční podmínky, která není přesná. Přesto lze za jistýc podmínek odvodit, že cyba je zruba úměrná a počtu kroků n = xn x0. Cyba na konci danéo intervalu je úměrná 1 = metoda 1. řádu. Rungovy-Kuttovy metody : První modifikace Eulerovy metody Je zobecněním obdélníkové metody; funkci f(t, y(t)) v ní naradíme opět odnotou v bodě xi+xi+1 = +. Jako druý argument funkce f použijeme výsledek pomocnéo kroku poloviční délky (Eulerovou metodou): η i = y i + f i. f(t, y(t)) f( +, η i) Metoda. řádu. f( +, η i) dt = f( +, η i). Rungovy-Kuttovy metody 3: Druá modifikace Eulerovy metody (Heunova metoda) Je zobecněním licoběžníkové metody integrace; funkci f(t, y(t)) naradíme lineární funkcí, proloženou odnotami v krajníc bodec intervalu:
v : f i = f(, y i ), v +1 : neznalost y-ové souřadnice řešíme pomocným krokem (délky Eulerovou metodou): θ i = y i + f i. Funkci f(t, y(t)) naradíme lineární funkcí, jejíž graf procází body (, f(, y i ) ), ( +1, f(+1, θ i ) ). Metoda. řádu. (f(, y i ) + f(+1, θ i )). Rungovy-Kuttovy metody 4: Rungova-Kuttova metoda 4. řádu Je zobecněním Simpsonovy metody; nejprve vypočteme pomocné body a odnoty derivace v nic, k i,1 = f(, y i ), Integrál naradíme lineární kombinací těcto odnot: k i, = f( +, y i + k i,1), k i,3 = f( +, y i + k i,), k i,4 = f( +, y i + k i,3 ). 6 (k i,1 + k i, + k i,3 + k i,4 ). Rungovy-Kuttovy metody 5: Obecné Rungovy-Kuttovy metody Odadují integrál +1 f(t, y(t)) dt z několika odnot funkce f v bodec, získanýc z výcozíc odnot, y i a pomocnýc kroků. Tyto odnoty jsou zkombinovány tak, aby se vykompenzovaly cyby nejnižšíc řádů. Metody Vícekrokové metody jednokrokové: využívají, y i a f i = f(, y i ) (např. Rungeovy-Kuttovy), vícekrokové: využívají i výsledky předcázejícíc kroků, tj. x j, y j a f j = f(x j, y j ), j = i, i 1,..., i s + 1 (pro s-krokovou metodu). Vícekrokové metody dovolují zvýšit řád metody bez pomocnýc kroků. Nicméně k nastartování s-krokové metody potřebujeme s odnot y 0, y 1,..., y s 1. Ty získáváme startovací metodou (některou z jednokrokovýc metod). Adamsovy-Basfortovy metody (explicitní) s odnotami derivace f i, f i 1,..., f i s+1 v uzlovýc bodec, 1,..., s+1 proložíme interpolační polynom ϕ i a ten integrujeme místo f(t, y(t)): Není potřeba počítat ϕ i, neboť ϕ i (t) dt. w j f i j, kde w j jsou předem známé koeficienty. Polynomem aproximujeme derivaci y (t) = f(t, y(t)), nikoli řešení, y(t)! Pro s = 1: ϕ i = f i je konstantní Eulerova metoda. 3
Pro s = : ϕ i je lineární polynom proložený body (, f i ), ( 1, f i 1 ), Pro s = 3: Pro s = 4: ϕ i (t) = f i + f i f i 1 (t ) ϕ i (t) dt = f i + (f i f i 1 ) = (3f i f i 1 ). 1 (3f i 16f i 1 + 5f i ), 4 (55f i 59f i 1 + 37f i 9f i 3 ). Řád metody je s=počet bodů použitýc v aproximaci. Výoda: jednoducost Nevýody: různá znaménka koeficientů ( zaokroulovací cyby) cyba metody způsobená extrapolací polynomem snaa vynout se extrapolaci Adamsovy-Moultonovy metody (implicitní) Pravou stranu f(t, y(t)) aproximujeme interpolačním polynomem ϕ i proloženým odnotami f i, f i 1,..., f i s+1 a odnotou v bodě +1, tj. f i+1 = f(+1, y i+1 ). Opět se redukuje na tvar y i+1 y i = j= 1 w j f i j, kde w j jsou předem vypočtené koeficienty (zde jiné). Dostáváme rovnici y i+1 = y i + w 1 f(+1, y i+1 ) + w j f i j pro neznámou odnotu y i+1, která je tímto určena implicitně. Pro s = 1: ϕ i je lineární polynom proložený body (, f i ), (+1, f i+1 ), tj. ϕ i (t) = f i + f i+1 f i (t ). ϕ i (t) dt = (f i+1 + f i ), po dosazení f i+1 = f(+1, y i+1 ) y i+1 y i = ( ) f(xi+1, y i+1 ) + f i. Pro s = : ( ) 5f(xi+1, y i+1 ) + 8f i f i 1, 1 Pro s = 3: ( ) 9f(xi+1, y i+1 ) + 19f i 5f i 1 + f i. 4 Řád metody je s + 1=počet bodů použitýc v aproximaci. Výoda: 4
vyšší přesnost Nevýody: obtížné řešení implicitní rovnice (zřídka možné exaktně, numerické řešení zvyšuje složitost) i cyba metody způsobená interpolací polynomem může být značná Metody prediktor-korektor Základem je korektor, což je některá z implicitníc metod, v níž se příslušná rovnice řeší numericky. V j-té iteraci z ní vypočítáme odad y i+1,j odnoty y i+1, přičemž na pravé straně použijeme odad y i+1,j 1 získaný v předcozí iteraci: y i+1,j = y i + w j f i j + w 1 f(+1, y i+1,j 1 ). Počáteční odad y i+1,0 najdeme z výsledků předcozíc kroků (event. z počátečníc podmínek) jinou metodou, zvanou prediktor, např. některou z explicitníc metod. P = prediktor (Predictor) C = korektor (Corrector) E = vyodnocení derivace (Evaluation) Nejčastější možnosti: Řídicí mecanismus cyklus korektoru provádět tak dlouo, dokud není rozdíl y i+1,j y i+1,j 1 dostatečně malý, konstantní počet k opakování korektoru, P(EC) k E, jediný průcod korektorem, PECE. Adamsovy metody Prediktor: Adamsova-Basfortova metoda Korektor: Adamsova-Moultonova metoda Příklad: Nejjednodušší varianta Adamsovy metody, s = 1: Prediktor: Eulerova metoda (1. řádu) y i+1,0 = y i + f i. Korektor: Adamsova-Moultonova metoda. řádu Volba startovací metody (jejío řádu) Volba kroku y i+1,j+1 = y i + ( fi + f(+1, y i+1,j ) ). Ricardsonova extrapolace při řešení diferenciálníc rovnic ỹ(x, )... numerické řešení v bodě x, získané s krokem ỹ(x, )... numerické řešení v bodě x, získané s krokem (zde q = ) Cyba odadu ỹ(x, ) bude zruba p menší než cyba odadu ỹ(x, ) odad cyby výsledku ỹ(x, ) metodou polovičnío kroku: ỹ(x, ) y(x) 1 p (ỹ(x, ) ỹ(x, )). 1 Odad výsledku zpřesněný Ricardsonovou extrapolací: Ricardsonova extrapolace pasivní aktivní y(x) ỹ(x, ) + 1 p (ỹ(x, ) ỹ(x, )). 1 5