Numerické riešenie diferenciálnych rovníc Jela Babušíková Faculty of Mathematics, Physics and Informatics Comenius University Bratislava
Klasifikácia diferenciálnych rovníc: obyčajné - počiatočná a okrajová úloha parciálne Faktory ovplyvňujúce numerické riešenie: chyba metódy - zjednodušenie matematického modelu na numericky riešitel ný chyby zaokrúhl ovania - chyby vznikajúce riešením na počítači
byčajné diferenciálne rovnice Najjednoduchší prípad - rovnica 1. rádu, počiatočná úloha y (x) = f(x, y(x)) x > x 0 (1) y(x 0 ) = y 0 (2) Diskretizačné metódy Jednokrokové metódy Máme problém (1) s počiatočnou podmienkou (2). Nech h > 0, x k = x 0 + kh, k = 1, 2, 3,... nech y k je označenie pre aproximáciu riešenia y(x k ) pre jednokrokovú metódu riešenie y k+1 závisí od riešenia v bode x k (resp. x k+1, x k )
Eulerova metóda napred (polygónová metóda) Prepíšeme rovnicu (1) v bode x = x k y (x) xk = f(x k, y(x k )). Nahradením derivácie na l avej strane doprednou diferenciou (diferenciou napred) y (x) xk y k+1 y k h dostaneme Eulerovu metódu napred (vid obrázok) y k+1 = y k + hf(x k, y k ) (3) Chyba metódy je O(h) - z nahradenia derivácie.
y(x) y(x k+1 ) y k+1 y k x k x k+1 Obr.: Euler napred graficky
Vylepšená polygónová metóda Najskôr spočítame hodnotu yk+1 1 Eulerovou metódou napred s krokom h yk+1 1 = y k + hf(x k, y k ). Ďalej spočítame hodnotu yk+1 2 dvomi krokmi Eulerovej metódy napred s krokom h 2 y 2 k+ 1 2 = y k + h 2 f(x k, y k ) y 2 k+1 = y 2 k+ 1 2 + h 2 f(x k + h 2, y 2 k+ 1 2). Novú hodnotu y k+1 dostaneme použitím Richardsonovej extrapolácie na hodnoty y 1 k+1 a y 2 k+1 tj. y k+1 = 2y 2 k+1 y 1 k+1 = y k + hf(x k + h 2, y k + h 2 f(x k, y k )). Chyba metódy je O(h 2 ) -zo zvýšenia rádu chyby pomocou Richardsonovej extrapolácie.
Algoritmom sa to zvykne zapisovat nasledujúcim spôsobom: k 1 = f(x k, y k ) k 2 = f(x k + h 2, y k + h 2 k 1) y k+1 = y k + hk 2. Eulerova spätná metóda Prepíšeme rovnicu (1) v bode x = x k+1, pričom deriváciu nahradíme spätnou diferenciou y (x k+1 ) y k+1 y k h Dostaneme spätnú Eulerovu metódu Chyba metódy je O(h). y k+1 = y k + hf(x k+1, y k+1 ). (4).
Poznámka: Spätná Eulerova metóda je implicitná metóda, to znamená, že neznámu hodnotu y k+1 treba na každom kroku určit iteračne (napr. Newtonovou metódou), tj. treba určit s z rovnice F(s) = 0, kde F(s) = s (y k + hf(x k+1, s)). Crank-Nicolsonova metóda Vznikne lineárnou kombináciou spätnej Eulerovej metódy a Eulerovej metódy napred y k+1 = y k + h 2 (f(x k, y k )+f(x k+1, y k+1 )), k = 0, 1, 2,... Crank-Nicolsonova metóda je opät implicitnou metódou, jej výhodou však je, že má vyšší rád chyby ( O(h 2 ).).
Runge-Kutta metódy Runge-Kutta metódy sú metódy, ktorých chyba pre h 0 ide rýchlejšie k 0 ako vyššie uvedené chyby Eulerových metód. RK metódy sú navrhnuté v tvare y k+1 = y k + w 1 K 1 + +w m K m, kde w i sú konštanty a K i = hf(x k +α i h, y k + i 1 j=1 β ijk j ), α 1 = 0. Odvodenie vychádza z Taylorovho rozvoja funkcie y (t) k a porovnaním koeficientov pri rovnakých mocninách h.
Niektoré z tejto triedy metód: metóda 2. rádu je známa ako Heunova metóda (modifikovaná Eulerova metóda) F 1 = f(x k, y k ) F 2 = f(x k+1, y k + hf(x k, y k ) y k+1 = y k + h 2 (F 1 + F 2 ) metóda 4. rádu - Runge-Kutta metóda F 1 = f(x k, y k ) F 2 = f(x k + h 2, y k + h 2 F 1) F 3 = f(x k + h 2, y k + h 2 F 2) F 4 = f(x k+1, y k + hf 3 ) y k+1 = y k + h 6 (F 1 + 2F 2 + 2F 3 + F 4 )
metóda 6. rádu - Hut ova metóda (prof. Hut a pôsobil na našej fakulte) F 1 = f(x k, y k ); F 2 = f(x k + h 9, y k + h 9 F 1); F 3 = f(x k + h 6, y k + h 24 (F 1 + 3F 2 )); F 4 = f(x k + h 3, y k + h 6 (F 1 3F 2 + 4F 3 )); F 5 = f(x k + h 2, y k + h 8 ( 5F 1 + 27F 2 24F 3 + 6F 4 )); F 6 = f(x k + 2 h 3, y k + h 9 (221F 1 981F 2 + 867F 3 102F 4 + F 5 )); F 7 = f(x k + 5 h 6, y k + h 48 ( 183F 1 + 678F 2 472F 3 66F 4 + 80F 5 + 3F 6 )); F 8 = f(x k+1, y k + h 82 (716F 1 2079F 2 + 1002F 3 + 834F 4 454F 5 9F 6 + 72F 7 )); y k+1 = y k + h 840 (41F 1 + 216F 3 + 27F 4 + 272F 5 + 27F 6 + 216F 7 + 41F 8 );
Poznámky k ODR: diskretizačné metódy dávajú diskrétne riešenie, ktoré sa dá previest na spojité pomocou interpolácie alebo splajnom pri výpočtoch je nutné zvolit vhodný krok h, pretože pre malé h sa môže riešenie znehodnotit zaokrúhl ovacími chybami ako vieme, že nám rišenie konverguje k presnému, ked presné riešenie nepoznáme, ako zvolit vhodné h? riešenie systémov ODR - analogicky, len miesto y : IR IR, f : IR 2 IR budú y : IR n IR, f : IR n+1 IR n (príklad korist -dravec) rovnice 2. a vyššieho rádu s počiatočnou podmienkou sa prevádzajú na systém ODR
Viackrokové metódy Máme problém y (x) = f(x, y(x)) x > x 0 y(x 0 ) = y 0 nech h > 0, x k = x 0 + kh, k = 1, 2, 3,... nech y k je označenie pre aproximáciu riešenia y(x k ) pre N + 1-krokovú metódu riešenie y k+1 závisí od riešení v bodoch x k, x k 1,..., x k N (resp. x k+1, x k, x k 1,..., x k N ) platí y(x k+1 ) y(x k ) = x k+1 x k y (x)dx = x k+1 x k f(x, y(x))dx kde p(x) je polynóm, ktorý interpoluje funkciu f x k+1 x k p(x)dx, (5)
ak (y k+1 ), y k, y k 1,..., y k N sú aproximácie riešenia v bodoch (x k+1 ), x k, x k 1,..., x k N a označíme f i := f(x i, y i ), i = (k + 1), k, k 1,...k N tak p(x i ) = f i, i = (k + 1), k, k 1,..., k N. Potom z (5) y k+1 = y k + x k+1 p(x)dx. x k Poznámka: Ked že p je polynóm, tak presne. x k+1 x k p(x)dx vieme spočítat Poznámka: Podl a toho, či interpolačný polynóm je zostrojený v bodoch x k, x k 1,..., x k N alebo x k+1, x k, x k 1,..., x k N rozlišujeme N + 1-krokovú explicitnú alebo implicitnú metódu (tak ako v prípade jednokrokových metód).
Explicitné viackrokové metódy (Adams-Bashforth metódy) interpolačný polynóm je zostrojený v bodoch x k, x k 1,..., x k N Pre N = 0 dostaneme Eulerovu metódu. Pre N = 1 interpolačný polynóm zostrojujeme z bodov (x k 1, f k 1 ),(x k, f k ) f p(x) = p 1 (x) = f k + x x k (f k 1 f k ) = f k x x k (f k 1 f k ) x k 1 x k h teda x k+1 x x k y k+1 = y k + (f k (f k 1 f k ))dx = y k +hf k f k 1 f k h h x k x k+1 x k (x x k )dx
Dostali sme Adams-Bashforth metódu 2. rádu (2-krokovú) y k+1 = y k + h 2 (3f k f k 1 ), (6) ktorá má chybu O(h 2 ). Ak označíme f k := f k 1 f k, potom (6) môžeme prepísat y k+1 = y k + hf }{{ k h } 2 f k Euler Pre N = 2-3. rádu (3-kroková metóda) y k+1 = y k + hf k h 2 f k + 5 6 h 2 f k = y k + h 12 (23f k 16f k 1 + 5f k 2 ). Pre N = 3-4. rádu (4-kroková metóda) y k+1 = y k + h 24 (55f k 59f k 1 + 37f k 2 9f k 3 ).
Poznámka: Kol ko krokov taká presnost. Poznámka: Štartovanie metód. Implicitné viackrokové metódy (Adams-Moulton metódy) interpolačný polynóm je zostrojený v bodoch x k+1, x k, x k 1,..., x k N Pre N = 0 dostaneme Crank-Nicholsonovu metódu tj. presnosti O(h 2 ) Pre N = 2 dostaneme metódu 4.rádu (presnost O(h 4 )) y k+1 = y k + h 24 (9f k+1 + 19f k 5f k 1 + f k 2 ). Poznámka: Adams-Moulton metódy sú implicitné, riešia sa iteračne.
Metódy typu prediktor-korektor - sú kombináciou explicitnej a implicitnej metódy. Označme P (predictor) - nejaká explicitná metóda na predikciu hodnoty, napr. Adams-Bashforthova metóda 4.rádu y (P) k+1 y (P) k+1 = y k + h 24 (55f k 59f k 1 + 37f k 2 9f k 3 ) E (evaluation) - vyčíslenie pravej strany f (P) k+1 = f(x k+1, y (P) k+1 ) C (corrector) - nejaká implicitná metóda na korekciu hodnoty y k+1, napr. Adams-Moultonova metóda 4.rádu y k+1 = y k + h 24 (9f(P) k+1 + 19f k 5f k 1 + f k 2 ) Poznámka: Používajú sa P(EC) M alebo P(EC) M E (M 2), najčastejšie PECE. Poznámka: Rád prediktora by mal byt taký istý (alebo o 1 menší) ako rád korektora.
Okrajová úloha v 1D - podmienky pre diferenciálnu rovnicu dané na hranici oblasti Zoberme si najjednoduchší prípad, ked oblast je z 1D, podmienky sú dané v krajných bodoch intervalu, tj. máme 2 podmienky. Majme teda rovnicu 2. rádu u (x) = f(x, u(x), u (x)) 0 < x < 1 s okrajovými podmienkami u(0) = α, u(1) = β (interval < 0, 1 > sme zobrali bez ujmy na všeobecnosti). Ak f je nelineárna v u(x) alebo u (x), potom okrajový problém je nelineárny.
Lineárna úloha Zoberme lineárny problém tvaru u (x) = b(x)u (x)+c(x)u(x)+d(x) 0 < x < 1, (7) kde b, c, d sú dané funkcie v x. Predpokladajme, že úloha má jediné riešenie, ktoré je 2x spojite diferencovatel né. Ako budeme numericky riešit takúto úlohu? Metóda konečných diferencií Zoberme n IN, h = 1 n+1, x 0 = 0, x i = x 0 + ih (x i sú uzlové body). Body x 0 a x n+1 sú krajné body intervalu < 0, 1 > a je v nich daná okrajová podmienka, body x i pre i = 1,..., n sú vnútorné body intervalu a riešenie v nich nepoznáme. Prepíšeme rovnicu (7) vo vnútornom bode x i, pričom na prepis derivácie u (x i ) použijeme konečné diferencie u (x i ) = u(x i+1) 2u(x i )+u(x i 1 ) h 2 + O(h 2 )
a na prepis u (x i ) použijeme tiež jednu z diferencii (dopredná, spätná - O(h) alebo symetrická - O(h 2 )). Označme b i = b(x i ), c i = c(x i ), d i = d(x i ) a na nahradenie u (x i ) použime napr. symetrickú diferenciu. Potom z rovnice (7) dostaneme pre i = 1,...,n 1 u(x h 2(u(x i+1) 2u(x i )+u(x i 1 )) b i+1 ) u(x i 1 ) i +c 2h i u(x i )+d i. Ďalej označme u i aproximáciu u(x i ). Potom treba nájst u 1,...,u n také, že 1 u h 2(u i+1 2u i + u i 1 ) = b i+1 u i 1 i + c i u i + d i, i = 1,...,n 2h (8) po úprave ( 1 h 2 b i)u i 1 +(2+c i h 2 )u i +( 1+ h 2 b i)u i+1 = h 2 d i, i = 1,...,n. kde u 0 = α, u n+1 = β.
Dostaneme systém lineárnych rovníc, zapíšme ho v maticovom tvare 2+c 1 h 2 1+ h 2 b 1 0 0...0 u 1 1 h 2 b 2 2+c 2 h 2 1+ h 2 b 2 0...0 u 2.......... 0...0 1 h 2 b n 1 2+c n 1 h 2 1+ h 2 b n 1 0...0 0 1 h 2 b n 2+c n h 2 }{{} označme A h 2 d 1 ( 1 h 2 b 1)α h 2 d 2 =. h 2 d n 1 h 2 d n ( 1+ h 2 b n)β. u n 1 u n =
Aby bol systém dobre riešitel ný je vhodné žiadat od matice A, aby bola diagonálne dominantná, tj. aby a ii n j=1,j i a ij i = 1, 2,...,n. Ak je matica diagonálne dominantná a n > 2, tak potom je aj regulárna. Pre našu maticu to znamená, že 2+c i h 2 1+ b ih 2 + 1+ b ih 2. Ak predpokladáme, že c i 0 tak dostaneme podmienku pre krok h b ih 2 1.
Ak na nahradenie u (x i ) miesto symetrickej diferencie použijeme doprednú alebo spätnú diferenciu dostaneme upwind resp. upstream schému u (x i ) { ui+1 u i tak i-ty riadok matice A má tvar h pre b i < 0 (upwind) u i u i 1 h pre b i 0 (upstrem) alebo 0...0 1 2+c i h 2 b i h 1+b i h 0...0 pre b 0...0 1 b i h 2+c i h 2 + b i h 1 0...0 pre b Je vidno, že pre c i 0 je matica diagonálne dominantná bez ohl adu na dĺžku kroku h. Poznámka: Strata presnosti schémy (je len rádu O(h)) je vyvážená lepšími vlastnost ami matice A.
Iné typy okrajových podmienok Okrem Dirichletových podmienok, o ktorých sme uvažovali vyššie, existujú aj Neumanove podmienky u (0) = α, u (1) = β alebo zmiešané podmienky, ktoré sú lineárnou kombináciou oboch η 1 u(0)+η 2 u (0) = α γ 1 u(1)+γ 2 u (1) = β. Uvažujme rovnicu (7) pre b = 0 a Neumanove podmienky. Napíšme si rovnicu po diskretizácii v bode x = x 1 tj. zoberme i = 1. Dostaneme u 0 + 2u 1 u 2 + c 1 h 2 u 1 = h 2 d 1. V bode x = 0 nepoznáme hodnotu u 0, ale môžme dodat novú rovnicu z okrajovej podmienky (ak predpokladáme, že rovnica platí aj v bode x = 0)
α = u (0) 1 2h (u 1 u 1 ) = u 1 = 2hα+u 1 = u (0) 1 h 2(u 1 2u 0 + u 1 ) = 1 h 2(2u 1 2u 0 2hα). Tu sme použili na nahradenie prvej derivácie symetrickú diferenciu. Dostaneme tak novú rovnicu 1 h 2(2u 1 2u 0 2hα) = c 0 u 0 + d 0. Máme teda n+1 lineárnych rovníc s n+1 neznámymi u 0,...,u n. Tým istým spôsobom získame novú rovnicu v bode x = x n+1.
Potom budeme mat n+2 rovníc pre n+2 neznámych u 0,...,u n+1 : 2+c 0 h 2 2 0 0...0 1 2+c 1 h 2 1 0...0......... 0...0 1 2+c n h 2 1 0...0 0 2 2+c n+1 h 2 h 2 d 0 + 2hα h 2 d 1 =. h 2 d n h 2 d n+1 + 2hβ Tento spôsob prepisu podmienok je presnosti O(h 2 ). u 0 u 1. u n u n+1 =
Existuje aj iný spôsob, ktorý má síce len presnost O(h), ale nemusíme pri ňom predpokladat, že diferenciálna rovnica je platná aj v bode x = 0 resp. x = 1. Pri tomto spôsobe okrajové podmienky prepíšeme nasledovne (pomocou doprednej resp. spätnej diferencie) α = u (0) u 1 u 0 h, β = u (1) u n+1 u n. h Dostaneme systém n + 2 lineárnych rovníc s n + 2 neznámymi 1 1 0 0...0 u 0 hα 1 2+c 1 h 2 1 0...0 u 1 h 2 d 1......... =. 0...0 1 2+c n h 2 1 0...0 0 1 1 Presnost tejto schémy je len O(h).. u n u n+1 h 2 d n hβ.
Metóda konečných prvkov Opät majme lineárnu diferenciálnu rovnicu (7) v tvare u (x)+c(x)u(x) = g(x) 0 < x < 1 (9) s okrajovými podmienkami. u(0) = α, u(1) = β Metóda konečných prvkov je špeciálny prípad Galerkinovej metódy. Nech V je konečnorozmerný priestor funkcií s bázou ϕ 1,,ϕ n. Teda v V : v(x) = n j=1 a jϕ j (x), a 1,, a n IR. Navrhnime aproximáciu riešenia rovnice (9) v tvare n u u n = a j ϕ j. j=1
Treba nájst koeficienty a 1,, a n tak aby n n a j ϕ j (x)+c(x) a j ϕ j (x) = g(x). j=1 Prenásobíme túto rovnicu vhodnou funkciou v, zintegrujeme cez interval a, b. n j=1 a j ( 1 0 ϕ j (x)v(x)dx + ) 1 0 c(x)ϕ j(x)v(x)dx = = 1 0 g(x)v(x). Na prvý integrál použijeme per partes a zoberieme v také, že v(0) = 0, v(1) = 0. Dostaneme n j=1 a ( ) 1 j 0 ϕ j (x)v (x)+c(x)ϕ j (x)v(x) dx = = 1 0 g(x)v(x). j=1
Ak zoberieme za v postupne funkcie ϕ 1,,ϕ n a označíme a c j,k = 1 0 ( ) ϕ j (x)ϕ k (x)+c(x)ϕ j(x)ϕ k (x) dx d k = 1 0 g(x)ϕ k (x)dx dostaneme, že koeficienty a = (a 1,, a n ) T získame z riešenia systému lineárnych rovníc Ca = d.
Špeciálne bázové funkcie - lineárne splajny= metóda konečných prvkov Nech h = 1 n+1 (n IN, x i = ih, i = 0,...,n+1. Bázové funkcie sú tvaru ϕ i (x) = 1 h (x x i 1) x i 1 x x i 1 h (x x i+1) x i x x i+1 i = 1,...,n. 0 x i 1 > x alebo x > x i+1 Ako je vidno na obrázku bázová funkcia ϕ i má nenulový nosič len na intervale < x i 1, x i+1 >. Prvky matice C sú teda také, že (C) jk = 0 ak j k > 1.
1 ϕ i 1 ϕ i ϕ i+1 x i 1 x i x i+1 Obr.: MKP-bázové funkcie
Prvá derivácia bázových funkcií je funkcia po častiach konštantná 1 ϕ i (x) = h x i 1 x x i 1 h x i x x i+1 i = 1,...,n 0 x i 1 > x alebo x > x i+1 a preto 1 0 ϕ i (x)ϕ i (x)dx = x i+1 x i ϕ i (x)ϕ i (x)dx = 1 h, 1 0 ϕ i (x)ϕ i+1 (x)dx = x i+1 x i ϕ i (x)ϕ i+1 (x)dx = 1 h. Prvky matice C a pravej strany d potom sú (C) ii = 1 h 2 (2h+ x i x i 1 c(x)(x x i 1 ) 2 dx + x i+1 x i c(x)(x x i+1 ) 2 ), i = 1,...,n
(C) i,i+1 = 1 ( h+ x i+1 h 2 x i c(x)(x x i )(x x i+1 )dx) i = 1,...,n 1 (C) i,i 1 = 1 ( h+ x i h 2 x i 1 c(x)(x x i 1 )(x x i )dx) i = 2,...,n ( d i = 1 xi h x i 1 g(x)(x x i 1 )dx + x i+1 x i g(x)(x i+1 x)dx i = 1,...,n. Poznámka: Presnost metódy s takýmito bázovými prvkami je O(h 2 ). Ak by sme použili hladšie splajny s väčším nosičom (napr. kubické splajny) dostaneme aj vyššiu presnost. )