UČEBNÍ TEXTY VYSOKÝCH ŠKOL Vysoké učení technické v Brně Fakulta strojního inženýrství Doc. RNDr. Libor Čermák, CSc. Numerické metody Ústav matematiky FSI VUT v Brně Obsah 1 Úvod do problematiky numerických metod 6 1.1 Chyby v numerických výpočtech ........................... 7 1.2 Reprezentace čísel v počítači ............................. 9 1.3 Podmíněnost úloh a stabilita algoritmů........................ 12 2 Řešení soustav lineárních rovnic 15 2.1 Přímé metody...................................... 15 2.1.1 Gaussova eliminační metoda.......................... 15 2.1.2 Výběr hlavního prvku.............................. 20 2.1.3 Vliv zaokrouhlovacích chyb........................... 27 2.1.4 Podmíněnost................................... 29 2.2 Iterační metody..................................... 34 2.2.1 Klasické iterační metody............................ 34 2.2.2 Další iterační metody.............................. 40 2.2.2.1 Zobecněná metoda minimálních reziduí................ 41 2.2.2.2 Metoda sdružených gradientů..................... 47 3 Metoda nejmenších čtverců 56 3.1 Formulace........................................ 56 3.2 Použití QR transformace................................ 59 3.3 Použití singulárního rozkladu............................. 61 3.4 QR algoritmy...................................... 64 3.4.1 Householderův Q R algoritmus......................... 65 3.4.2 Givensův QR algoritmus............................ 69 3.4.3 Gramův-Schmidtův QR algoritmus ...................... 70 4 Aproximace funkcí 72 4.1 Interpolace ....................................... 72 4.1.1 Polynomická interpolace ............................ 72 4.1.2 Interpolační splajny............................... 84 4.1.3 Trigonometrická interpolace .......................... 93 4.1.4 Interpolace funkcí více proměnných...................... 101 4.2 Metoda nejmenších čtverců.............................. 103 5 Numerický výpočet derivace a integrálu 110 5.1 Numerické derivování ............. .................... 110 5.2 Richardsonova extrapolace............................... 112 5.3 Numerické integrování................................. 116 5.3.1 Základní vlastnosti kvadraturních formulí................... 116 5.3.2 Newtonovy-Cotesovy kvadraturní formule................... 120 5.3.3 Gaussovy kvadraturní formule......................... 125 5.3.4 Adaptivní integrace............................... 131 5.3.5 Numerický výpočet vícerozměrných integrálů................. 132 2 6 Řešení nelineárních rovnic 140 6.1 Určení počáteční aproximace ............................. 140 6.2 Zpřesňující metody................................... 141 6.3 Soustavy nelineárních rovnic............ .................. 150 7 Výpočet vlastních čísel a vlastních vektorů 157 7.1 Základní vlastnosti................................... 157 7.1.1 Existence a jednoznačnost ........................... 157 7.1.2 Násobnost a diagonalizovatelnost ....................... 158 7.1.3 Lokalizace vlastních čísel............................ 159 7.1.4 Podmíněnost................................... 159 7.1.5 Transformace................................... 161 7.1.6 Diagonální, trojúhelníkové a blokově trojúhelníkové matice......... 162 7.2 Metody výpočtu .................................... 164 7.2.1 Mocninná metoda................................ 164 7.2.2 Inverzní iterace ................................. 165 7.2.3 Redukce ..................................... 167 7.2.4 Simultánní iterace................................ 167 7.2.5 QR metoda.................................... 168 7.2.6 Metoda iterací v podprostorech ........................ 172 7.2.7 Arnoldiho metoda................................ 173 7.2.8 Jacobiho metoda................................. 175 7.2.9 Metoda bisekce ................................. 176 7.2.10 Metoda rozděl a panuj.......... ................... 177 7.2.11 Zobecněný problém vlastních čísel...................... 180 7.2.12 Výpočet singulárních čísel a vektorů..................... 181 8 Obyčejné diferenciální rovnice: počáteční úlohy 184 8.1 Formulace, základní pojmy .............................. 184 8.2 Eulerovy metody.................................... 186 8.3 Explicitní Rungovy-Kuttovy metody......................... 192 8.4 Lineární mnohokrokové metody............................ 199 8.4.1 Obecná lineární nmohokroková metoda.................... 200 8.4.2 Adamsovy metody................................ 201 8.4.3 Metody zpětného derivování.......................... 206 8.5 Tuhé problémy..................................... 208 9 Obyčejné diferenciální rovnice: okrajové úlohy 217 9.1 Metoda střelby.....................................218 9.2 Diferenční metoda...................................219 9.3 Metoda konečných objemů...............................225 9.4 Metoda konečných prvků ...............................226 10 Parciální diferenciální rovnice 235 10.1 Úloha eliptického typu.................................236 10.1.1 Formulace úlohy................................236 10.1.2 Diferenční metoda...............................237 10.1.3 Metoda konečných objemů ..........................243 10.1.4 Metoda konečných prvků...........................248 3 10.2 Úloha parabolického typu...............................255 10.3 Úloha hyperbolického typu ..............................260 10.4 Hyperbolická rovnice prvního řádu..........................263 Literatura 271 4 Předmluva Skripta Numerické metody jsou věnována tradičním tématům numerické matematiky: zdroje chyb a jejich šíření, řešení soustav lineárních rovnic, metoda nejmenších čtverců, aproximace funkcí, numerické derivování a integrování, řešení nelineárních rovnic, výpočet vlastních čísel a vlastních vektorů, řešení počátečních a okrajových úloh pro obyčejné diferenciální rovnice a řešení parciálních diferenciálních rovnic, ř Do skripta jsou ke každému tématu zařazeny klasické metody, standardně uváděné v každém úvodním kurzu numerické matematiky, které slouží především k pochopení a ilustraci dané problematiky. Klasické metody jsou dnes již často překonány efektivnějšími postupy. Potíž s moderními, v současnosti používanými algoritmy, je však v tom, že bývají často poměrně komplikované, takže porozumět jim nebývá snadné. Některé z nich jsou přesto do textu zařazeny. Při zpracování skript jsem vycházel z osvědčených učebnic numerické matematiky, jakými jsou např. knihy [10], [55], [42], [21], [37], [31], [58] a z vynikajících monografií, mezi nimi zejména [26], [50], [51], [29], [18], [5], [61]. Pokud jde o české zdroje, nejvíce podnětů jsem čerpal z knih [41], [34], [22], [58], [59] a ze skript [36], [9] a [35]. Moderní česky psaná monografie numerických metod v současnosti není k dispozici. Kromě výše uvedených knih lze však v češtině číst také [43], vybrané kapitoly věnované numerickým metodám v [44] a [58]. Brno, leden 2020 Libor Čermák 5 1. Uvod do problematiky numerických metod Při řešení problémů reálného světa se stále častěji setkáváme s potřebou popsat zkoumanou skutečnost pomocí věrohodného matematického modelu a ten pak uspokojivě vyřešit. Žijeme v době počítačů a tak je přirozené, že k realizaci matematického modelu počítač využijeme. Počítače umí pracovat velmi rychle s informacemi kódovanými pomocí čísel. A právě zde je místo pro numerickou matematiku (v angličtině numerical analysis) jakožto vědní disciplínu, která vyvíjí a analyzuje metody, jejichž „technologickým jádrem" jsou manipulace s čísly. V posledních letech se v anglicky psané literatuře místo termínu „numerical analysis" stále častěji používá termín scientific computing (odpovídající český termín nám bohužel není znám). Když chceme metodami numerické matematiky vyřešit daný problém popsaný obecným matematickým modelem, musíme takový model nejdříve „digitalizovat", to jest formulovat ho ve tvaru numerické úlohy, jejíž vstupní i výstupní data jsou čísla. Numerická metoda je postup řešení numerické úlohy. Přesný popis kroků realizujících numerickou metodu označujeme jako algoritmus numerické metody. Lze ho vyjádřit jako posloupnost akcí (proveditelných na počítači), které k danému (přesně specifikovanému konečnému) souboru vstupních čísel jednoznačně přiřadí odpovídající (přesně specifikovaný konečný) soubor výstupních čísel. Příprava rozsáhlých souborů vstupních dat bývá označována jako preprocessing. Rozsah souboru výsledných údajů je často ohromný, pro člověka „nestravitelný", a proto je třeba výsledky vhodně zpřístupnit tak, aby je zadavatel výpočtu byl vůbec schopen vyhodnotit. Metodám, které to provádějí, se říká postprocessing. Jednou z forem post-processingu je vizualizace výsledků. Jako příklad „problému ze života" uvažujme předpověď počasí. Pohyb vzduchu v atmosféře dovedeme alespoň přibližně popsat pomocí soustav parciálních diferenciálních rovnic a vhodných doplňujících podmínek. Metodami numerické matematiky dokážeme tyto rovnice přibližně řešit. Potřebná vstupní data se získávají pomocí družic a pozemních meteorologických stanovišť. Výsledky numerických výpočtů zpracované do animovaných meteorologických map pak sledujeme v televizní předpovědi počasí. Při řešení reálných problémů téměř nikdy nezískáme přesné řešení, musíme se spokojit jen s řešením přibližným, které je zatíženo chybami. Naším cílem je organizovat výpočet tak, aby celková chyba byla co nej menší. Především se musíme vyvarovat hrubých lidských chyb, které vyplývají z nepochopení problému a z nepozornosti nebo nedbalosti člověka při jeho řešení. Chyba matematického modelu. Při vytváření matematického modelu reálného problému provádíme vždy jisté idealizace. Rozdíl mezi řešením idealizovaného problému a řešením problému reálného nazýváme chybou matematického modelu. Do této kategorie chyb zahrnujeme také chyby ve vstupních údajích. Příklad. Máme určit povrch zemského pláště. K výpočtu použijeme vzorec S = Airr2 pro povrch koule o poloměru r. Chyba modelu spočívá v předpokladu, že Země je koule. Chyba numerické metody. Jestliže k řešení (numerické) úlohy použijeme numerickou metodu, která nám neposkytne přesné (teoretické) řešení dané úlohy, pak chybu, které se dopustíme, nazýváme chybou numerické metody. Důležitou součástí návrhu numerické 6 metody je odhad chyby numerické metody. Příklad. Máme spočítat hodnotu funkce sin 1 sečtením konečného počtu členů Taylorovy řady Qls Qls Qls Qls - \ sinx = x--- H--- - — H--------h (-1) 3! 5! 7! 9! v ' (2n + l)! pro x = 1. Je známo, že sečtením prvních tří členů řady se dopustíme chyby velikosti nejvýše 1/7!, obecně sečtením prvních n členů se dopustíme chyby nejvýše l/(2n + 1)!. Zaokrouhlovací chyby. Při práci na počítači můžeme k reprezentaci čísel použít jen konečný počet cifer. Pracujeme proto s přibližnými hodnotami čísel, které dostaneme zaokrouhlením přesných hodnot. Zaokrouhlovací chyby vznikají už při vkládání dat do počítače, další pak vznikají při číselných výpočtech. Při špatně organizovaném výpočtu může dojít v důsledku nahromadění zaokrouhlovacích chyb k naprostému znehodnocení výsledku, viz příklad 1.7. Příklad. Číslo 7r neumíme do počítače vložit přesně. Také výsledek operace, při níž číslo 2 dělíme číslem 3, nezobrazíme na standardním počítači pracujícím s binárními čísly přesně. Je třeba mít na paměti, že při řešení reálného problému vystupují obvykle všechny chyby současně. 1.1. Chyby v numerických výpočtech Absolutní a relativní chyba. Ve výpočtech jsme často nuceni nahradit přesné číslo x přibližným číslem x. Číslo x potom nazýváme aproximací čísla x. Rozdíl x — x = Ax nazýváme absolutní chybou aproximace x a číslo Ax x — x — = —— , Xy^O, nazýváme relativní chybou aproximace x. Pro | Ax\ < e se používá také symbolický zápis x = x ± e a míní se tím, že x — s < x < x + s. Podobně se pro |Arr/rr| < ô používá zápis x = x(l ± ô). Absolutní hodnota relativní chyby se často uvádí v procentech. Nyní posoudíme chybu, které se dopustíme při výpočtu hodnoty f(xi, X2, ■ ■ ■, xn) funkce /, když přesné hodnoty Xi nahradíme přibližnými hodnotami ž« = Xi + Axí. Z Taylorova rozvoje /(x) okolo bodu x dostaneme /,*)-/,x, + t^ + it^^ + .... i=l *ii = l Považujeme-li součiny chyb AxíAxj za malé, máme pro absolutní chybu |A/(x)| := |/(x) - /(x) dx 1=1 ^11 i=l 9/(x) dxi \Ax,\ (1.1) 7 a pro chybu relativní A/(x) Xi <9/(x) Axj <9rr,- <9/(x) Arr,: (1.2) Při praktických odhadech se hodnota funkce / a hodnoty jejích derivací df/dxi na pravých stranách přibližných nerovností (1.2) a (1.1) počítají v bodě x. Chyby základních aritmetických operací. Zvolíme-li f(x,y) = x±y, dostaneme pro absolutní a relativní chybu součtu a rozdílu A(x±y) = Ax± Ay A(x ± y) x Ax y Ay x±y x±y x x±y y Pro vyjádření chyby součinu volíme f(x,y) = xy a obdržíme a / \ • a a A(xy) . Ax Ay A(xy) = yAx + xAy , - =--1-- xy x y a pro chybu podílu dostaneme volbou f(x,y) = x/y A -Ax x Ay A{x/y) . Ax Ay x (1.3) (1.4) (1.5) y y x/y x y Všimněte si, že relativní chyba součtu resp. rozdílu může být výrazně větší než relativní chyby operandů v případě, když \x ± y\ je podstatně menší než |rr| nebo \y\. Při dělení malým číslem je (díky druhé mocnině y ve jmenovateli) významná chyba absolutní. Platné dekadické cifry. Nechť x je aproximace čísla x, kterou zapišme v mocninném dekadickém rozvoji jako +l-fc 1 ^ ine-fc x = ± [ di • 10e + d2 ■ 10e-L + • • • + dk ■ I0e+Í-K + dk+1 ■ 10 Řekneme, že k—tá dekadická cifra dk aproximace x je platná, jestliže di ^ 0. \x x\ < 5 • 10 e—k (1.6) tj. když se x liší od x nejvýše o 5 jednotek řádu příslušného následující cifře. Platí-li nerovnost (1.6) pro k < p, ale pro k = p + 1 už neplatí, říkáme, že x má p platných cifer. Číslo x = ±d1}d2d3 .. .dp ■ 10e, které má všech p cifer platných, je správně zaokrouhlenou hodnotou čísla x. Platná desetinná místa. Řekneme, že aproximace x čísla x má k-té desetinné místo platné, jestliže \x x\ < 5 • 10 -fc-i (1.7) tj. když se x liší od x nejvýše o 5 jednotek řádu příslušného následujícímu desetinnému místu. Platí-li nerovnost (1.7) pro k < p, ale pro k = p + 1 už neplatí, říkáme, že x má p platných desetinných míst. Ve správně zaokrouhleném čísle je tedy každé desetinné místo platné. V následující tabulce uvádíme několik příkladů: 8 x x platné cifry platná desetinná místa 284 -45,8472 100,002 99,9973 -0,003728 1,841 • 10 -6 290 -45,798 99,9973 100,002 -0,0041 2,5 • 10~6 1 3 4 5 1 0 1 2 2 3 5 Při odečítání dvou blízkých čísel dochází ke ztrátě platných cifer, jak o tom svědčí Příklad 1.1. Je-li Ax x = 4,998949 • 101, x = 4,999 • 101, \Ax\ = 5,10 • 10~4, y = 5,001848 • 101, y = 5,002 • 101, |Ay| = 1,52 • 10~3, pak pro rozdíly z = y — x, ž = y — x dostáváme z = 2,899 • 10~2, ž = 3-10~2, \Az\ = 1,01 • 10~3, x Ay = 1,020 • 10 -5 y = 3,039 • 10 -5 Az = 3,484 • 10 -2 takže z má jen jednu platnou cifru, zatímco x i y mají čtyři platné cifry. □ Příklad 1.2. Nechť x = 1,3262 ± 5 • 10~5, y = -6,5347 ± 5 • 10~5, z = 13,235 ± 5 • 10~4. Máme určit aproximaci funkční hodnoty / = xy/z, absolutní a relativní chybu a počet platných cifer výsledku. Spočteme / = xy/ž = —6,548031 ... • 10_1. Podle (1.1) pak přibližně platí -i A/ < V-Ax x \ -Ay z xy A z1 xy Ax x Ay Az ,31-10" Odtud I A/l = 8,31 • 10~5 • |/| = 5,44 • 10~5 < 5 • 10"1"3 , takže (se třemi platnými ciframi) / = -0,6548 ±0,0001. □ 1.2. Reprezentace čísel v počítači Reálná čísla jsou v počítačích reprezentována v systému čísel s pohyblivou řádovou čárkou (v angličtině floatíng point numbers). Základní myšlenka je podobná semílogarít-míckému zápisu (v angličtině scientific notation), v němž např. číslo 245700 píšeme jako 2,457 • 105 a číslo 0,0005768 jako 5,768 • 10~4. V tomto formátu se desetinná čárka pohybuje (v doslovném překladu „plave") v závislosti na dekadickém exponentu. Formálně lze systém F normalizovaných čísel pohyblivé řádové čárky charakterizovat čtyřmi celými čísly: ß základ číselné soustavy {ß > 2), p přesnost (p > 1), [L, U] rozsah exponentu (L < 0 < U). 9 Každé číslo x G F má tvar x = ±m ■ p , kde m = d1 + —+ —+ ■■■ + je normalizovaná mantísa, d,i G {0,1,..., /3 — 1}, i = 1,2,... ,p, jsou cifry mantisy, p je počet cifer mantisy a e G (L, U) je celočíselný exponent. Normalizace mantisy znamená, že pro x ý 0 Je prvá cifra mantisy nenulová, tj. platí d\ > 1, takže 1 < m < j3. Když x = 0, pak je nulová mantisa i exponent, tj. m = e = 0. Většina počítačů používá binárni aritmetiku, kdy /3 = 2. Pro stručnější zápis binárních čísel se běžně používá hexadecimální soustava, v níž /3 = 16 (cifry 10 až 15 zapisujeme pomocí písmen A,B,C,D,E,F), a někdy rovněž oktalová soustava, kdy /3 = 8. Výsledky výpočtů se zpravidla uvádějí v běžné dekadické soustavě, tj. pro /3 = 10. Množina F čísel pohyblivé řádové čárky je konečná, počet čísel v ní je 2(/3-l)/3p-1(U-L + l) + l, neboť můžeme volit dvě znaménka, /3 — 1 možností pro první cifru mantisy, /3 možností pro zbývajících p — 1 cifer mantisy a U — L + 1 možných hodnot exponentu. Poslední jednička odpovídá číslu nula. Nejmenší kladné číslo v F je číslo UFL = j3L (podle anglického UnderFlow Level), které má první cifru mantisy rovnu jedné, zbývající cifry mantisy nulové a exponent nejmenší možný. Nej větší číslo v F je číslo OFL = (j3 — j3ľ~p) j3u (podle anglického OverFlow Level), které má všechny cifry mantisy rovné /3 — 1 a exponent největší možný. Zaokrouhlování. Reálná čísla, která jsou přesně zobrazitelná v systému F, se nazývají strojová čísla. Pokud dané reálné číslo x ^ F, musíme ho aproximovat „blízkým" strojovým číslem, které značíme í\(x) (podle anglického floating). Standardní způsob je zaokrouhleni: í\(x) je strojové číslo nejbližší k x (když máme na výběr ze dvou možností, pak vybereme to strojové číslo, které má poslední cifru sudou). Strojová přesnost. Číslo em = j3ľ~p se nazývá strojové epsilon nebo také strojová přesnost (anglicky „machine epsilon", označované jako £mach)- Význam čísla em dokládá několik jeho charakteristických vlastností: a) v intervalu (j3e,j3e+1) jsou strojová čísla rozmístěna rovnoměrně s krokem smj3e; b) největší možná relativní chyba, která vznikne při aproximaci reálného čísla v systému F pohyblivé řádové čárky, nepřesáhne \em, tj. platí |fl(rr) — x\ < ^sm\x\; c) sm je největší z kladných čísel e, pro která f 1(1 + = 1. Je dobré uvědomit si, že em G F, jen když 1 — p > L. Příklad 1.3. Prozkoumejme, jaká čísla můžeme zobrazit v modelovém binárním systému F v případě, že mantisa má p = 4 cifry a exponent e je omezen zdola číslem L = —3 a shora číslem U = 2, tj. —3 < e < 2. Umístění kladných strojových čísel na číselné ose je patrné z obrázku 1.1: nejmenší z nich UFL = 2~3 = 1/8 a největší OFL= (2-2~3) -22 = 8-1/2. Všimněte si, že v každém binárním intervalu 2e < x < 2e+1 jsou čísla rozložena rovnoměrně 10 1/8 1/2 1 2 4 8-1/2 Obr. 1.1: Strojová čísla s krokem em2e. Tak třeba mezi 1 a 2, tj. pro e = 0, je vzdálenost dvou sousedních čísel rovna em = 1/8. Systém F obsahuje 48 kladných čísel, 48 záporných čísel a nulu, tj. celkem 97 čísel. □ Standard IEEE. V počítačích vyvinutých po roce 1985 se reálná čísla zobrazují prakticky výhradně podle standardu IEEE, a to zpravidla v těchto přesnostech: a) Jednoduchá přesnost. Použijí se 4 bajty, tj. 32 bitů, z toho 23 bitů pro mantisu, 8 bitů pro exponent a 1 bit pro znaménko mantisy. Protože mantisa je normalizovaná, pro x ý 0 je di = 1. Tato cifra se neukládá, takže počet cifer mantisy p = 24. Rozsah exponentu je —126 < e < 127. Zobrazit lze dekadická čísla s absolutní hodnotou v rozsahu UFL = 2~126 = 1,2 x 1(T38 až OFL = (2 - 2~23) x 2127 = 3,4 x 1038 a nulu (má všechny bity nulové). Strojová přesnost em = 2~23 = 1,2 x 10~7. Říkáme, že mantisa má zhruba 7 dekadických cifer přesnosti. b) Dvojnásobná přesnost. Použije se 8 bajtů, tj. 64 bitů, z toho 52 bitů pro mantisu, 11 bitů pro exponent a 1 bit pro znaménko mantisy. První bit mantisy se neukládá (pro x ^ 0 je d± = 1), takže mantisa má p = 53 cifer. Rozsah exponentu je — 1022 < e < 1023. Zobrazit lze dekadická čísla s absolutní hodnotou v rozsahu UFL = 2~1022 = 2,2 x 10~308 až OFL = (2 - 2~ 52) x 21023 = 1,8 x 10308 a nulu (má všechny bity nulové). Strojová přesnost a, potom f(x) —> f {a). Velkou třídu nekorektních úloh tvoří nejednoznačné řešitelné úlohy. Nekorektní úlohy se nedají rozumně řešit a proto se jimi nebudeme vůbec zabývat. Podmíněnost úloh. Budeme říkat, že korektní úloha je dobře podmíněná, jestliže malá změna ve vstupních datech vyvolá malou změnu řešení. Je-li y + Ay resp. y řešení úlohy odpovídající vstupním datům x + Ax resp. x, potom číslo |Aí/|/|í/| |relativní chyba na výstupu| |Arr|/|rr| |relativní chyba na vstupu| (kde místo absolutních hodnot jsou obecně normy, viz kap. 2) nazýváme číslo podmíněností úlohy y = f {x). Je-li Cp malé číslo, je úloha dobře podmíněná, pro velká Cp je úloha špatně podmíněná. Místo o dobré nebo špatné podmíněnosti mluvíme někdy o malé nebo velké citlivosti vzhledem ke vstupním datům. Příklad 1.4. Odhadněte číslo podmíněnosti úlohy: stanovit funkční hodnotu (diferencovatelné) funkce y = f {x). Z (1.2) plyne, že Cp xf'(x) /(*) (1.9) Konkrétně pro funkci f(x) = tg x dostaneme Cp = \2x/ sin2rr|. Výpočet tg x je velmi citlivý pro x blízké celočíselnému násobku 7r/2. Třeba pro x = 1,57079 je Cp = 2,48 • 105. Výsledek můžeme ověřit také přímým výpočtem podle vzorce (1.8), pro Ax = 10~9 dostaneme opět Cp = 2,48 • 105. □ Číslo podmíněnosti definované podle (1.8) se někdy označuje jako relativní číslo podmíněnosti. Většinou je to vhodné měřítko citlivosti, je-li však x nebo y rovno nule, použít 12 ho nelze. V takových případech lze zkusit absolutní číslo podmíněností definované jako Čp = \Ay\/\Ax\. Příklad 1.5. Posoudíme citlivost výpočtu funkční hodnoty f(x) = x2 — 1. Pro kořeny xip = ±1 není relativní číslo podmíněnosti definováno. Stejný závěr potvrzuje vyjádření Cp = \2x2/(x2 — 1)| odvozené podle (1.9). Absolutní číslo podmíněnosti je Cp f(x + Ax) - f(x) Ax = \f'(x)\ tj. pro f(x) = x2 — 1 je Cp = \2x\ a speciálně pro x = ±1 dostaneme Cp = 2. □ Stabilita algoritmu. Při realizaci numerické metody na počítači vznikají zaokrouhlovací chyby, nejdříve ve vstupních datech a pak v průběhu výpočtu při provádění aritmetických operací. Chceme-li se při výpočtech vyvarovat nesmyslných výsledků, musíme si vybírat tzv. stabilní algoritmy, které jsou k šíření zaokrouhlovacích chyb málo citlivé. Aby byl algoritmus stabilní, musí být 1) dobře podmíněný, tj. málo citlivý na poruchy ve vstupních datech, 2) numericky stabilní, tj. málo citlivý na vliv zaokrouhlovacích chyb vznikajících během výpočtu. Příklad 1.6. Kvadratická rovnice x2 — 2bx + c = 0 má pro b2 > c dva různé reálné kořeny x1)2 = b±d, (Aľ) kde d = \/b2 — c. Jestliže |6| = pak se při výpočtu jednoho z kořenů budou odečítat dvě přibližně stejně velká čísla téhož znaménka, což vede, jak už víme, ke vzniku velké relativní chyby (viz (1.3) a příklad 1.1). Výpočet podle algoritmu (A±) tedy obecně stabilní není. Existuje však snadná pomoc: protože x±x2 = c, můžeme postupovat takto: / b + d, je-li 6 > 0, Xl = \b-d, je-li b <0, X2 = C/Xl- {Á2) Algoritmus (A2) nedostatek algoritmu (A±) odstraňuje, tj. je stabilní. □ Příklad 1.7. Počítejme integrál En= i xnex~1áx pro n = 1,2,... Jo Integrací per-partes dostaneme 1 nl xnex-L dx = [xnex-% - / nxn-Lex~L dx , o Jo neb o-li En = l- nEn_x. (F) 13 Protože Ei = 1/e, můžeme při výpočtu En postupovat podle algoritmu E1 = l/e, En = l-nEn-U n = 2,3,... (Ai) Výpočet jsme provedli na počítači v jednoduché přesnosti (tj. cca na 7 platných cifer), a pro n = 12 jsme dostali E12 = —4,31. To je ale zcela nepřijatelný výsledek, neboť pro kladný integrand nemůžeme dostat zápornou hodnotu integrálu! Tento jev je způsoben tím, že při výpočtu En se chyba obsažená v En_i násobí n—krát, takže celková chyba roste podobně jako n\. Algoritmus(A1) je tedy nestabilní. Vzniká otázka, zda můžeme vypočítat E12 užitím rekurentní formule (F) tak, aby výsledek měl všech 7 cifer platných. Možné to je, musíme ale použít jiný algoritmus. Přepíšeme-li formuli (F) na tvar _ 1 - En ■&n-l ~ n bude se chyba vstupující do každého kroku dělit n. Z odhadu E„ = I xnex-1 dx< xn dx 10 Jo n + l vyplývá, že En —> 0 pro n —> 00. Při výpočtu proto budeme postupovat podle algoritmu EN = 0, En_1 = ^^, n = N,N-l,..., (A2) n kde N je dostatečně velké. Zvolíme-li N = 20, dostaneme E12 = 7,177325 • 10~2, což je hodnota, která má 7 cifer platných. Jestliže výpočet provádíme ve dvojnásobné přesnosti (cca 16 platných cifer), dostaneme obdobné výsledky. Rozdíl je pouze v tom, že výpočet algoritmem (Ai) se „pokazí" až pro větší n; pro n = 20 už ale vyjde nesmyslná hodnota £"20 = —30,19. Stabilním algoritmem (A2) pro = 35 dostaneme E20 = 4,554488407581805 • 10~2 s 16-ti platnými ciframi. □ Další příklady věnované podmíněnosti problémů a stabilitě algoritmů uvedeme postupně v následujících kapitolách. 14 2. Řešení soustav lineárních rovnic Jednou z nejčastěji se vyskytujících úloh výpočetní praxe je úloha vyřešit soustavu lineárních rovnic. Takové soustavy bývají často velmi rozsáhlé, současná výpočetní technika umožňuje v přijatelných časech vyřešit soustavy s několika milióny neznámých. Metody řešení dělíme na přímé a iterační. Přímé metody jsou takové metody, které dodají v konečném počtu kroků přesné řešení za předpokladu, že výpočet probíhá bez zaokrouh-lovacích chyb, tedy zcela přesně. Iterační metody poskytnou jen řešení přibližné. To ale vůbec nevadí, pokud je přibližné řešení dostatečně dobrou aproximací řešení přesného. Počet kroků iterační metody závisí na požadované přesnosti. Budeme se tedy zabývat řešením soustavy lineárních rovnic (stručně SLR) CL\\ X\ 0-21 xl 012 x2 &22 x2 ^ln xn @J2n xn b2 (2.1) &n2 x2 -\- CL-nn xr, Soustavu (2.1) můžeme psát ve tvaru aijxj—^ % i i 1) 2,..., n, (2.2) nebo v maticovém tvaru Ax = b (2.3) kde A / třu d\2 0-21 0,22 \a>nl 0>n2 aln 0>2n 7 (xľ\ x2 \xn j b b2 \bnJ Matici A nazýváme matici soustavy, h je vektor pravé strany a x vektor neznámých. Budeme předpokládat, že matice soustavy je regulární, takže řešená soustava má jediné resem. 2.1. Přímé metody 2.1.1. Gaussova eliminační metoda Základní přímou metodou řešení SLR je Gaussova eliminační metoda, stručně GEM. Skládá se ze dvou částí. V přímém chodu GEM se soustava (2.1) převede na ekvivalentní soustavu Ux = c, (2.4) 15 kde U je tzv. horní trojúhelníková matice, což je matice, která má pod hlavní diagonálou všechny prvky nulové, tj. U = {ii>íj}™j=1 a Uij = 0 pro i > j, Uln \ 0 0 • • • 0 un_i,n_i un_i,n \ 0 0 0 • • • 0 unn ) Ve zpětném chodu se pak řeší soustava (2.4). Protože A je regulární, je také U regulární, což znamená, že diagonální prvky ua ^ 0, i = 1, 2,..., n. Díky tomu vypočteme z poslední rovnice xn, z předposlední xn_\ atd. až nakonec z první rovnice vypočteme x\. Přímý chod GEM. Pro usnadnění popisu přímého chodu GEM položíme A^0^ = A, = b, prvky matice matice označíme af^ = a prvky vektoru označíme bf"' = 6j. Přímý chod GEM popisuje následující algoritmus GEMz (základní, bez výběru hlavního prvku): for k := 1 to n — 1 do begin A(fc) ;= A(fc-i) . b(fc) ;= b(fc-i) . for i := k + 1 to n do begin (k) , (k) nuk := a\k'/a>kk' ; for j := k + 1 to n do a[f := a[f - mikakk- ; úk) úk) úk) bl '■= bl - mikbk ; end end Přímý chod má n—1 kroků. V k-tém kroku se soustava rovnic A^^x = b^-1) transformuje na soustavu A^x = h^. Prvních k rovnic se už nemění. Tato skutečnost je v algoritmu GEMz vyjádřena příkazy := A^-1) a := b^-1). Smyslem transformace je vyloučit neznámou Xk z rovnic i > k, tj. vynulovat poddiagonální koeficienty v k-tém sloupci matice A^. Dosáhneme toho tak, že od i-té rovnice odečteme násobek k-té rovnice. Multiplikátory m-ik musejí zajistit, aby v pozici (i, k) matice A^ vznikla nula: (k) (k) n _. (k) i (k) a\k> - mika\> =0 =^ mik = a\k>/a>kk> . Číslo akkk se nazývá hlavní prvek nebo také pivot. Při výpočtu multiplikátoru mik může al- (k) goritmus GEMz zhavarovat v případě, že akk = 0. Tomuto problému bychom se mohli vyhnout, kdybychom fc-tou rovnici prohodili s některou z dalších rovnic, která má u proměnné xk nenulový koeficient. Postup založený na této myšlence se nazývá GEM s výběrem hlavního prvku. Podrobně se jím budeme zabývat v následujícím odstavci. GEMz je tedy algoritmus GEM bez výběru hlavního prvku. U / Mu Ul2 Ul3 0 u22 u23 0 0 U33 u2,n-l u3,n-l 16 V tomto odstavci budeme předpokládat, že A je taková matice soustavy, pro kterou jsou všechny hlavní prvky afj^ nenulové. Programování. Prvky matic uchováváme v dvourozměrném poli A a prvky vektorů v jednorozměrném poli b. Příkazy := A^-1) a := b^-1) se proto ve skutečnosti neprovádějí. Protože v pozici (i, k) pole A vznikne nula, lze prvek A(i,k) využít pro „uskladnění" multiplikátoru mik. LU rozklad. Po ukončení přímého chodu je horní trojúhelníková matice U v rovnici (2.4) určena diagonálními a naddiagonálními prvky matice A^n_1\ tj. u, 0 pro j = 1,2,... ,i - 1 (n-l) • • • . 1 ah pro j = + n . 1,2,. ..,n. (2.5) Vektor c v rovnici (2.4) je transformovanou pravou stranou b^n 1\ tj. dn-l) 1,2,. ..,71. (2.6) Multiplikátory z přímého chodu umístíme do dolní trojúhelníkové matice / 1 0 0 ••• 0 o\ m21 1 0 ••• 0 0 m3i m32 1 • • • 0 0 Pak mn-l,l mn-l,2 mn-l,3 \ mnl mn2 mn3 1 0 Tfl"n,n—1 ly (2.7) A = LU. (2- Důkaz. Nechť 0 0 0 o Vo 1 o o o 0 0 0 0 0 0 1 o o -mfc+i,fc 1 0 -mk+2,k 0 1 -mnfc 0 0 0 o o o 1/ kde I je jednotková matice, mk = (0,..., 0, mk+hk,..., mnk)T, mik = a^/a^, ek je k-tý sloupec jednotkové matice. Protože e^m^ = 0, dostaneme (I - mkel)(I + mfce mkel mkel mkelmkel 17 Vidíme tedy, že pro matici L& inverzní k matici platí Lfc = Mfc =I + mkei. k-tý krok LU rozkladu, ve kterém se nulují poddiagonální prvky v k-tém sloupci, lze vyjádřit zápisem = M^A^-1), k = 1, 2,..., n — 1, přičemž = A. Proto Mn_1Mn_2...M1A = U je horní trojúhelníková matice. Odtud A = M^1M2 1... M~\U = LU, kde L = LXL2 ... Ln_i. □ Vyjádření matice A jako součinu dolní trojúhelníkové matice L a horní trojúhelníkové matice U se nazývá LU rozklad matice A. Ten je možné použít k pozdějšímu řešení soustavy rovnic se stejnou maticí soustavy A, avšak s jinou pravou stranou. To je užitečné zejména při řešení posloupnosti úloh Ax« = bj, kdy se nová pravá strana b« může sestavit až poté, co se vyřešily předchozí soustavy Ax^ = b^ pro k < i. V MATLABu lze pro LU rozklad použít funkci lu. Ukažme si, jak lze soustavu LUx = b efektivně vyřešit. Když si označíme Ux = y, vidíme, že y je řešení soustavy Ly = b. Určíme tedy nejdříve y jako řešení soustavy Ly = b a pak x jako řešení soustavy Ux = y, tj. Ly = b, Ux = y. (2.9) Zřejmě y = b^n_1^ je transformovaná pravá strana získaná algoritmem GEMz. Soustavu Ly = b vyřešíme snadno, z první rovnice vypočítáme y\, ze druhé rovnice í/2 atd. až nakonec z poslední rovnice vypočítáme yn. Soustavu Ux = y řešíme pozpátku, tj. z poslední rovnice vypočteme xn, z předposlední xn_\ atd. až nakonec z první rovnice vypočteme x\. Při řešení soustav rovnic bývá LU rozklad označován také jako eliminace nebo přímý chod a výpočet řešení podle (2.9) bývá označován jako zpětný chod. Kdy lze algoritmus GEMz použít? Jak jsme již uvedli, slabým místem algoritmu GEMz může být výpočet multiplikátoru m^, neboť obecně nelze vyloučit, že v průběhu (k) s s eliminace vznikne akk = 0. V aplikacích se však poměrně často řeší soustavy rovnic, pro které nulový pivot v algoritmu GEMz vzniknout nemůže. Abychom takové soustavy mohli popsat, zavedeme si několik nových pojmů. Řekneme, že matice A = {ajj}™J=1 je ryze diagonálně dominantní, jestliže n \au\> la^'l' i = l,2,...,n, (2.10) i = i nebo-li slovy, v každém řádku je absolutní hodnota diagonálního prvku větší než součet absolutních hodnot zbývajících prvků tohoto řádku. I když matice A soustavy rovnic Ax = b diagonálně dominantní není, lze někdy vhodným „přeskládáním" rovnic docílit 18 toho, že matice Ä takto vzniklé ekvivalentní soustavy rovnic Äx = b už diagonálně dominantní je. V aplikacích se také poměrně často setkáváme s tzv. pozitivně definitními maticemi. Takové matice lze specifikovat pomocí řady navzájem ekvivalentních definic. Jednu z nich si teď uvedeme: řekneme, že matice A = {a^}™J=1 je pozitivně definitní, jestliže je symetrická a pro každý nenulový sloupcový vektor x = (x\,X2, ■ ■ ■, xn)T platí crAx (2.11) Ověřit přímo tuto podmínku není snadné. Je-li však A regulární, pak z (2.11) okamžitě plyne, že ATA je pozitivně definitní. (Dokažte to!) Vynásobíme-li tedy soustavu rovnic Ax = b zleva maticí AT, dostaneme ekvivalentní soustavu ATAx = ATb s pozitivně definitní maticí soustavy. Tento postup se však pro praktické řešení soustav rovnic nehodí (operace ATA vyžaduje velký objem výpočtů, u iteračních metod se navíc významně zhoršuje rychlost konvergence). Při řešení konkrétních praktických úloh bývá obvykle už předem známo (z povahy řešeného problému a ze způsobu jeho diskretizace), zda matice vznikajících soustav lineárních rovnic jsou (resp. nejsou) pozitivně definitní. Uveďme si však přesto alespoň jednu často uváděnou (nutnou a postačující) podmínku pozitivní definitnosti, známou jako {aij}?j=i Je pozitivně definitní, právě když jsou kladné determinanty všech hlavních rohových submatic {a^'}^=1, Sylvesterovo kritérium. Čtvercová symetrická matice A když jsou kladne n, tj. když platí k 1,2, <2ll > 0 all a12 0-21 a22 an 0.12 a.13 >0, 0-21 a22 >0, ... , 0-31 %2 a33 dni din > 0 □ Dá se ukázat, že algoritmus GEMz lze použít pro řešení soustav, jejichž matice je buďto ryze diagonálně dominantní nebo pozitivně definitní. Úspěšné použití algoritmu GEMz lze zaručit také pro další typy matic, které se při řešení praktických úloh často vyskytují (viz např. [17], [33]). Výpočtová náročnost GEM. Přímý chod GEM vyžaduje |n3 + 0(n2) operací násobičích (tj. násobení nebo dělení) a |n3 + 0(n2) operací sčítacích (tj. sčítání nebo odečítání). Symbolem 0(n2) jsme přitom vyjádřili řádově méně významný počet operací řádu n2 (tvaru a2n2 + ain + «o, kde «2, cti, «o Jsou čísla nezávislá na n). Člen |n3 souvisí s transformací matice soustavy. Počet operací souvisejících s transformací pravé strany je o řád nižší a je tedy zahrnut do členu 0(n2). Zpětný chod GEM je výpočetně podstatně méně náročný. Řešení soustavy rovnic s trojúhelníkovou maticí vyžaduje |n2 + 0(n) operací násobičích a + 0(n) operací sčítacích. Přitom 0(n) reprezentuje počet operací řádu n (tvaru ct\n + «o, kde cti, cto jsou čísla nezávislá na n). „GEM zpětný chod", tj. výpočet x ze soustavy (2.4), proto vyžaduje + 0(n) operací a „LU zpětný chod", tj. výpočet y a x ze soustav (2.9), vyžaduje dvojnásobný počet operací, tj. n2 + 0(n). 19 Pro velký počet rovnic, tj. pro velké n, proto můžeme tvrdit, že eliminace vyžaduje přibližně |n3 operací a GEM resp. LU zpětný chod přibližně resp. n2 operací (násobičích a stejně tak sčítacích). Choleského rozklad. Pozitivně definitní matici A lze vyjádřit ve tvaru A = LLT, (2.12) kde L je dolní trojúhelníková matice, jejíž nenulové prvky jsou postupně pro k = 1, 2,..., n určeny předpisem -fcfc N fc-i 1 / k^ ik ~g I dík ^ ^ ^íj^-kj k + 1, k + 2,... ,n Soustavu rovnic řešíme podle (2.9) pro U = LT. Vyjádření matice A ve tvaru (2.12) se nazývá Choleského rozklad matice A. Choleského rozklad vyžaduje přibližně poloviční výpočtové náklady oproti obecnému LU rozkladu, tedy přibližně operací násobičích a zhruba stejný počet operací sčítacích (výpočet odmocnin nemá na celkový počet operací podstatný vliv). Choleského algoritmus (2.13) lze použít k efektivnímu posouzení pozitivní definitnosti matice A: je-li A symetrická a platí-li akk — Sj=i > 0 Pro k = 1,2,... ,n, pak A je pozitivně definitní. V MATLABu lze pro Choleského rozklad použít funkci chol. 2.1.2. Výběr hlavního prvku Začneme příkladem. Příklad 2.1. Máme vyřešit soustavu rovnic na hypotetickém počítači, který pracuje v dekadické soustavě s pětimístnou mantisou. Přesné řešení je V prvním kroku eliminujeme poddiagonální prvky v prvním sloupci a dostaneme '10 0 0 Prvek v pozici (2,2) je ve srovnání s ostatními prvky matice malý. Přesto pokračujme v eliminaci. V dalším kroku je třeba ke třetímu řádku přičíst řádek druhý násobený 2400: (4,8 + 6 • 2400) • x3 = 2,4 + 6,001 • 2400 . 20 Na levé straně je koeficient 4,8 + 6-2400 = 14404,8 zaokrouhlen na 14405. Na pravé straně výsledek násobení 6,001 • 2400 = 14402,4 nelze zobrazit přesně, musí být zaokrouhlen na 14402. K tomu se pak přičte 2,4 a znovu dojde k zaokrouhlení. Poslední rovnice tak nabude tvaru 14405 x3 = 14404 . Zpětný chod začne výpočtem 14404 ^H4Ô5=0'99993- Přesný výsledek je x3 = 1. Zdá se, že chyba není nijak vážná. Bohužel, x2 je třeba určit z rovnice -0,001 x2 + 6 • 0,99993 = 6,001, což dává, po zaokrouhlení 6 • 0,99993 = 5,9996, 0,0014 1 , x2 =- = —1,4. -0,001 Nakonec vypočteme X\ z první rovnice lOari - 7 - (-1,4) = 7 a dostaneme x\ = —0,28. Místo přesného řešení x jsme dostali přibližné řešení Kde vznikl problém? Nedošlo k žádnému hromadění chyb způsobenému prováděním tisíců operací. Matice soustavy není blízká matici singulární. Potíž je jinde, působí ji malý pivot ve druhém kroku eliminace. Tím vznikne multiplikátor —2400 a v důsledku toho má poslední rovnice koeficienty zhruba 1000 krát větší než koeficienty původní rovnice. Zaokrouhlovací chyby, které jsou malé vzhledem k těmto velkým koeficientům, jsou nepřijatelné pro koeficienty původní matice a také pro samotné řešení. Snadno se prověří, že když druhou a třetí rovnici prohodíme, nevzniknou žádné velké multiplikátory a výsledek je zcela přesný. Ukazuje se, že to platí obecně: jestliže jsou absolutní hodnoty multiplikátorů menší nebo nejvýše rovny 1, pak je numericky spočtené řešení vyhovující. □ Částečný výběr hlavního prvku je modifikace GEM zajišťující, aby absolutní hodnota multiplikátorů byla menší nebo rovna jedné. V k-tém kroku eliminace se jako pivot vybírá prvek s největší absolutní hodnotou v zatím neeliminované části fc-tého sloupce matice A^-1), tj. mezi prvky a\k ^ pro i > k. Nechť tedy r je takový řádkový index, pro který \a%-»\=max\at1)\. (2.14) k (k-1) • • &rn X'2 Xk I Ák-1) dk-1) Obr. 2.1: GEM s částečným výběrem hlavního prvku (v kroužku) Úplný výběr hlavního prvku je postup, který může absolutní hodnoty multiplikátorů zmenšit ještě výrazněji. Dociluje se toho tím, že v k-tém kroku eliminace se jako pivot vybírá prvek s největší absolutní hodnotou v dosud neeliminované části matice A^fc_1\ tj. v řádcích i > k a sloupcích j > k. Nechť tedy r je řádkový a s sloupcový index vybraný tak, že \at1)\= max \a^1)\. (2.15) k■ LUx = Pb . Proto nejdříve určíme vektor z = Pb, tj. prvky vektoru b pravé strany proházíme stejně, jako jsme prohazovali řádky matic A (k-i) a p(fc-i) y algoritmu LUp. Označíme-li Ux = y, vidíme, že y je řešení soustavy Ly = z. Vyřešením této soustavy dostaneme y. Zbývá ještě vyřešit soustavu Ux = y a řešení x je nalezeno. Shrneme-li to, počítáme postupně z, y a x z rovnic z = Pb, Ly = z, Ux = y. (2.17) Uchovávat historii prohazování řádků v matici P je zřejmé plýtvání paměťovým místem, vždyť z celkového počtu n2 prvků matice P je jich pouze n nenulových. Proto místo s maticí P stačí pracovat jen s vektorem řádkových permutací p. Na začátku položíme p(0) = (l,2,...,n)T a ve zbytku algoritmu pak prohazujeme prvky vektoru p^-1). Matice P byla zapotřebí jen pro sestavení vektoru z. To ale dokážeme s pomocí vektoru p také: do i-té složky vektoru z vložíme p^-tou složku vektoru b, postupně pro i = 1,2,... ,n. Příklad 2.2. Provedeme LU rozklad matice A = í- -0,4 -0,95 -0,4 -7,34 \ 0,5 -0,3 2,15 -2,45 -2 4 1 -3 -1 5,5 2,5 3,5 ) 24 V prvním sloupci najdeme jako pivota číslo —2 ve třetím řádku. Proto prohodíme první a třetí řádek. Pak eliminujeme poddiagonální prvky v prvním sloupci a na jejich místa zapíšeme použité multiplikátory. Prohození řádků vyznačíme také v permutačním vektoru. Tak dostaneme / -2 4 1 -3\ V -0,25 0,2 0,5 4 0,7 -1,75 3,5 2,4 -0,6 2 -3,2 -6,74 P (i) /3\ 2 1 w První řádek se už měnit nebude. Ve druhém kroku najdeme pivota ve druhém sloupci. Je to číslo 3,5 ve čtvrtém řádku. Proto prohodíme druhý a čtvrtý řádek jak v matici A*^ tak ve vektoru p^. Pak eliminujeme prvky v pozicích (3,2) a (4,2) a na jejich místa zapíšeme použité multiplikátory. Výsledkem je A(2) -2 4 1 -3\ 0,5 3,5 2 5 0,2 -0,5 0,4 -4,24 v- -0,25 0,2 2 -4,2/ P (2) /3\ 4 1 w p (3) První dva řádky už zůstanou bez změny. Pivot ve třetím sloupci je číslo 2 ve čtvrtém řádku. Prohodíme tedy třetí a čtvrtý řádek v matici A^2^ i ve vektoru p(2). Pak eliminujeme prvek v pozici (4,3) a na jeho místo vložíme použitý multiplikátor. Tak dostaneme /3\ 4 2 w u Permutační vektor p = p^3^. Pokud bychom chtěli vytvořit permutační matici P, stačí vzít jednotkovou matici a přeuspořádat ji tak, že původně Pi-tý řádek se stane řádkem 2-tým. Když to provedeme, dostaneme pro permutační vektor permutační matici P ( ~2 4 1 -3\ 0,5 3,5 2 5 -0,25 0,2 2 -4,2 ^ 0,2 -0,5 0,2 -3,4/ Dostali jsme tedy 1 0 0 0\ T _ 0,5 1 0 0 Li — — 0,25 0,2 1 0 1 0,2 - -0,5 0,2 1/ í- -2 4 1 -3\ 0 3,5 2 5 0 0 2 -4,2 V 0 0 0 -3,4/ P (o 0 1 o\ 0 0 0 1 0 1 0 0 V 0 0 v 4 2 w Snadno se ověří, že LU = PA. Ukažme si ještě řešení soustavy rovnic pro volenou pravou stranu. Zvolme třeba /-13,14\ / 9\ 2,15 _ 27,5 9 ' Pak Z~ 2,15 V 27,5/ \-l3,Uj b 25 a dále řešením soustav Ly = z a pak Ux = y dostaneme /3\ 4 2 ' w Výpočet determinantu. Je známo, že determinant det(A) matice A a) se nezmění, když k řádku matice A přičteme násobek jiného řádku matice A; b) změní znaménko, když prohodíme dva jeho (různé) řádky nebo sloupce. Provádíme-li tedy GEM podle algoritmu GEMz, tj. bez výběru hlavních prvků, pak det(A) = det(U) = «11^22 • • -unn dostaneme jako součin diagonálních prvků matice U. Pokud provádíme částečný nebo úplný výběr hlavních prvků, pak stačí, když si poznamenáme, třeba do proměnné q, celkový počet prohození řádků (pro částečný výběr) nebo řádků i sloupců (pro úplný výběr). Je-li q sudé, pak det(A) = det(U), a je-li q liché, je det(A) = -det(U). Platí tedy det(A) = (-l)qullU22 ■■■unn. (2.18) V MATLABu lze pro výpočet determinantu použít funkci det. Řešení soustavy rovnic s více pravými stranami nepředstavuje žádný problém, místo s jednou pravou stranou pracujeme současně s m pravými stranami. Vzorce (2.9) a (2.17) zůstávají v platnosti, jediný rozdíl je v tom, že teď b = (b1; b2,..., bm) je matice pravých stran, takže také y, x a případně z jsou matice téhož typu jako b. Zejména tedy 2-tý sloupec matice x = (xi, X2,..., xm) je řešení příslušné i-té pravé straně. Případ úplného výběru hlavních prvků zde rozebírat nebudeme. Pokud jde o počet operací, tak pro každou pravou stranu je třeba započítat přibližně n2 operací násobičích a stejný počet operací sčítacích, takže celkem jde o mn2 + 0(n) operací. Je-li počet m pravých stran malý ve srovnání s počtem n rovnic, jsou náklady na provedení LU rozkladu výrazně převažující. Výpočet matice inverzní lze provést tak, že řešíme soustavu rovnic Ax = b s n pravými stranami pro b = I, kde I je jednotková matice. Když úlohu řešíme buďto bez výběru hlavních prvků nebo s částečným výběrem hlavních prvků, pak dostaneme x = A-1, tj. matici inverzní. Vzhledem ke speciální pravé straně b = I lze jak přímý tak zpětný chod GEM provést pomocí |n3 + 0(n2) operací, takže celkem potřebujeme n3 + 0(n2) operací. Řídká matice soustavy. Řekneme, že matice je řídká, když počet jejích nenulových prvků je výrazně menší než počet všech jejích prvků. Takové matice vznikají při řešení řady významných aplikací. Častý je případ, kdy počet nenulových koeficientů v rovnici nepřevýší malé číslo m, které vůbec nezávisí na počtu n rovnic, takže s růstem n dostáváme stále řidší matice soustav. Řídké matice jsou v paměti počítače účelně reprezentovány jen pomocí svých nenulových koeficientů. Pro řešení soustav s řídkými maticemi existují velice efektivní algoritmy. Jedním z hlavních cílů, které tyto algoritmy sledují, je provádění elimi-načních kroků v takovém pořadí, aby vznikalo co nejméně nových nenulových koeficientů. 9\ 23 0,2 V-3,4/ 26 Pásová matice soustavy. Speciálním případem řídké matice je pásová matice, která má nenulové koeficienty jen v pásu okolo hlavní diagonály. Přesněji, matice A = {a^}™J=1, pro kterou existují celá nezáporná čísla p, q taková, že a,ij = 0 když i > j + p nebo j'• > i + q, se nazývá pásová matice s pásem o šířce w = p+q+1 (má p poddiagonál a q naddiagonál). Číslo s = max(p, q) se nazývá poloviční šířka pásu. Pro matici s poloviční šířkou pásu s tedy zřejmě platí a,ij = 0 pro \i — j\ > s. Při eliminaci pásových matic mohou nenulové koeficienty vznikat jen uvnitř pásu. Toho lze využít a docílit znatelnou úsporu jak v reprezentaci matice soustavy v paměti počítače, tak v počtu potřebných operací. Pro matici s poloviční šířkou pásu s = p = q = 0(1) potřebuje LU rozklad bez výběru hlavních prvků ns2 + 0(l) operací a zpětný chod ns + 0(l) operací. Symbol 0(1) přitom reprezentuje číslo nezávislé na n. Soustava rovnic s třídiagonální maticí. V případě s = 1 hovoříme o třídiagonální matici. Algoritmus GEM pro řešení soustavy rovnic s třídiagonální maticí je velmi jednoduchý. Bez výběru hlavních prvků pro soustavu / ai Cl 0 0 . .. 0 0 0 \ ( Xl \ í dl \ a2 c2 0 . .. 0 0 0 x2 d2 0 b2 a3 c3 • .. 0 0 0 d3 0 0 0 0 b-n-2 O-n-1 Cn-1 •En—l d-n-l 0 0 0 0 b-n-1 an / \ xn ) \dn ) v přímém chodu počítáme bi-.= bi/ai, ai+1 := ai+1 - biCi, di+1 := di+1 - bidi, i = 1, 2,..., n - 1, a ve zpětném chodu určíme Xn'-=dn/a>n a dále Xi := (di — CíXí+i)/clí , i = n — 1, n — 2,..., 1. Transformovaná matice soustavy obsahuje koeficienty LU rozkladu původní matice. 2.1.3. Vliv zaokrouhlovacích chyb Při řešení SLR téměř vždy působí zaokrouhlovací chyby. Jejich vliv prozkoumáme v následujícím příkladu. 27 Příklad 2.3. Předpokládejme, že na hypotetickém počítači s třímístnou mantisou máme vyřešit soustavu 3,96 l,0l\ íxt\ _ /5,03 1 0,25y) \x2) ~ V 1,25 Přibližné řešení budeme značit x = (xi,X2)T. Protože 3,96 > 1, nemusíme rovnice prohazovat a multiplikátor m2i = 1/3,96 = 0,253. Od druhé rovnice odečítáme m2i-násobek první rovnice, tj. (0,25 - 0,253 • 1,01) • x2 = 1,25 - 0,253 • 5,03 . Při zaokrouhlování na 3 platné cifry dostaneme 1,01 • 0,253 = 0,256 a 5,03 • 0,253 = 1,27, takže -0,02 Xo =-= 3,33 . 2 -0,006 Z první rovnice pak vypočteme x\ = (5,03 — 1,01 • 3,33)/3,96 = 0,422 . Dostali jsme tedy přibližné řešení 0,422\ 3,33 J ' Spočteme-li (přesně) reziduum r = b — Ax, obdržíme 5,03 - 3, 96 • 0,422 - 1,01 • 3,33 \ _ /-0,00442\ 1,25 - 1 • 0,422 - 0,25 • 3,33 J ~ ^-0,00450J ' To by nás mohlo svádět k domněnce, že získané řešení x je prakticky přesné. Tak tomu ale není, přesné řešení je 0,25 4 takže x\ a x2 nemají ani jednu cifru platnou! Pro zajímavost uvádíme, že pro p = 4, 6,... cifer mantisy dostaneme přesné řešení a pro p = 5, 7,... řešení, jehož složky mají p — 3 platných cifer. □ Přestože příklad 2.3 je značně umělý, je jednoduchou ilustrací obecně platného tvrzení: Gaussova eliminace s částečným výběrem hlavních prvků zaručuje vznik malých reziduí. K tomuto tvrzení je třeba připojit několik vysvětlujících poznámek. Slovem „zaručuje" se míní, že lze dokázat přesnou větu, která (za splnění jistých technických předpokladů týkajících se výpočtů v pohyblivé řádové čárce) uvádí nerovnosti omezující velikost jednotlivých složek rezidua. Dále slovem „malých" míníme „v řádu zaokrouhlovacích chyb relativně vzhledem ke třem veličinám": k velikosti prvků původní matice koeficientů A, k velikosti prvků matic A^^ vznikajících v průběhu eliminace a k velikosti prvků řešení x. Konečně je třeba dodat, že i když je reziduum malé, tvrzení neříká nic o velikosti chyby 28 x — x. K posouzení vztahu mezi velikostí rezidua a velikostí chyby se používá veličina známá jako číslo podmíněnosti matice. 2.1.4. Podmíněnost Abychom mohli určit podmíněnost úlohy „najít řešení x SLR Ax = b", potřebujeme posoudit, jak moc se změní řešení x, když trochu změníme data, tj. matici soustavy A a vektor pravé strany b. Zatímco k měření velikosti čísel používáme absolutní hodnotu, podobný nástroj pro měření velikosti vektorů a matic si teprve musíme zavést. Norma vektoru je nezáporné číslo, které reprezentuje jeho velikost. Třída vektorových norem, známá jako lp, závisí na parametru 1 < p < oo: llxllp — Nejčastěji se používá p = 1, p = 2 nebo limitní případ pro p —> oo: n / n \ V2 llxlli = 1^1 ' Ilxll2= Xľ^2) ' llxlloo = max . i=l \i=l / 1 /i-norma je známa také jako Manhattan norma, neboť odpovídá vzdálenosti mezi dvěma místy v pravoúhlé mříži městských ulic. /2-norma je běžná Euclidova vzdálenost neboli délka vektoru, /^-norma je známa také jako Cebyševova norma. V MATLABu lze vektorové normy || • ||p určit pomocí funkce norm. Konkrétní hodnota p je často nepodstatná, normu pak jednoduše značíme ||x||. Vektorová norma splňuje následující základní vlastnosti, typické pro pojem vzdálenosti: 1. ||x|| > 0, když x/o a ||o|| = 0, 2. ii c xii = |c| • ||x|| pro každé číslo c, 3. ||x + y|| < ||x|| + ||y|| (trojúhelníková nerovnost). Symbolem o jsme přitom označili nulový vektor, tj. vektor, jehož všechny složky jsou rovny nule. Norma matice je nezáporné číslo, které reprezentuje velikost matice. Normu matice A značíme ||A||. Norma definovaná předpisem ||Ax|| A = max-—— = max Ax (2.19) x^o ||x|| ||x||=l se nazývá přirozená maticová norma přidružená k vektorové normě, pomocí níž je definována. Přirozená maticová norma přidružená k vektorové £p-normě ii A||p = max—= max ||Ax||p. x^o ||x||p ||x||p=l 29 Není těžké ověřit, že n ||A||i = max y \a,ij\ (maximum sloupcových součtů) 1 < i \a,ij\ (maximum řádkových součtů) . 1 ' S Ki0, když A^O a ||0|| = 0, 2. ||cA|| = |c| • ||A|| pro každé číslo c, 3. ||A + B|| < ||A|| + ||B|| (trojúhelníková nerovnost), 4. ||AB|| < || A|| • ||B|| pro čtvercové matice A, B (submultiplikativnost). 30 Symbolem O jsme si přitom označili nulovou maticí, tj. matici, jejíž všechny prvky jsou rovny nule. Připomeňme, že obecná norma matice je definována jako reálná funkce splňující jen první tři z výše uvedených podmínek. Číslo podmíněnosti. Pro posouzení podmíněnosti úlohy „najít řešení x soustavy lineárních rovnic Ax = b" hraje klíčovou roli tzv. číslo podmíněností k(A) matice A, k(A) = ||A|| • HA-1!. (2.22) Konkrétní hodnota čísla podmíněnosti závisí na použité vektorové normě. Pro maticovou p-normu budeme značit kp(A) = ||A||P • ||A_1||P, podobně Kp(A) = ||A||,p • ||A_1||,p. Všimněme si některých vlastností čísla podmíněnosti. 1. kp(A) > 1. 2. Pro jednotkovou matici kp(1) = 1. 3. Je-li A singulární, pak kp(A) = oo. 4. Když matici A vynásobíme číslem c / 0, pak kp(cA) = kp(A). 5. Pro diagonální matici D = diag{di,d2,... ,dn} je kp(D) = max|cřj| /min|dj|. i i Poznamenejme, že vlastnosti 1-4 platí pro každou přirozenou maticovou normu. Z vlastností 4 a 5 plyne, že kp(A) je lepším měřítkem blízkosti matice A k matici singulární než její determinant det(A). Jako extrémní příklad uvažujme diagonální matici řádu 100, která má na diagonále čísla 0,1. Pak det(A) = 10~100, což lze považovat za velmi malé číslo, avšak kp(A) = 1. Soustava rovnic s takovou maticí se chová spíše jako soustava s jednotkovou maticí než jako soustava s maticí téměř singulární. V MATLABu lze čísla podmíněnosti matice Ki(A), /í2(A), /^(A) a Kp(A) určit pomocí funkce cond. K analýze podmíněnosti SLR budeme potřebovat následující Lemma 2.1. Nechť ||X|| < 1. Pak ||(I - X)"1]] < Důkaz. Pro matici X = {xke}ke=i na základě ekvivalence norem || • || a max^^^n |rr^| platí \xki\ < c||X||, 1 < k,l < n, kde c je konstanta. Tedy |(X*)H| < c||Xl|| < c||X||l, což znamená, že každá složka řady Y2i=i X* Je niajorizována konvergentní geometrickou řadou cY^Li ||X||\ Proto Sn = Yľi=i X* konverguje k matici S = Y2i=i X*. Dále (I - X)(I + X + X2 + • • • + Xn) = I - Xn+1 I, (i-x)-1. (I - x)- X neboť ||Xn+1|| < ||X||n+1 -> 0. Tedy oo (I-X)S = I => s = ^x* 1=1 Konečně i=l X* < IXI i=l i=l IXI □ 31 Analýza podmíněnosti. Nechť A = A + A A je pozměněná matice soustavy a b = b + b je pozměněná pravá strana. Řešení x soustavy Ax = b vyjádřeme ve tvaru x = x + Ax. Z rovnic Ax = b, (A + A A) (x + Ax) = b + Ab dostaneme (A A)x + (A + A A) Ax = Ab. Odtud Ax =(A + AA)_1(-(AA)x + Ab) = [A(I + A_1AA)]^ (-(AA)x + Ab) = (I + A-1AA)-1A-1(-(AA)x + Ab). Předpokládejme, že porucha AA je tak malá, že ||A_1AA|| < || A_1|| • ||AA|| < 1. Užitím lemmatu 2.1 pak postupně dostaneme ^IKI + A^AA)-1!! • HA-1! • (\\AA\\ + ^f] < IA 11| /„ a A ,, IIAbl. . AA < (A-1!) • ||AA|| VIlx| HA-1!! • HAII /IIAAII IIAbl IA-1!! • IIA| AA|| V HAII IIAI IA| Celkem tedy |Ax|| k(A) /||AA|| ||Ab|. . «(A)- |A| Číslo podmíněnosti k (A) > 1 tedy působí jako zesilovač relativních chyb ||AA||/||A| a ||Ab||/||b||. Z (2.23) pro AA = O dostaneme IIAxII . , IIAblI . , ||r|| M -K(A) M = K(A)M' ("4) kde r = b — A (x) je reziduum (Ab = Ax — b = —r, takže ||Ab|| = ||r||). Nerovnost (2.24) potvrzuje zkušenost, kterou jsme udělali v příkladu 2.3, totiž že malé reziduum nezaručuje malou relativní chybu. Na pravé straně nerovnosti (2.24) je totiž norma rezidua ||r || násobena číslem podmíněnosti k(A) matice A, takže i když je reziduum malé, může být přesto relativní chyba řešení velká, když k(A) je velké. Příklad 2.4. Soustava rovnic Ax = b, kde A=(io io°i)' b=(m)' mářešení x=(! Použijeme /oo-normu a spočteme HbH^ = 111, \\^\\oo = 1 • Když pravou stranu změníme na r / 11,11\ , , , ~ ( 13,21 " = i m on > dostaneme resem x = I V 11U,o9 / V —U,21 32 Označíme-li Ab = b — b, Ax = x — x, pak ||Ab||oo = 0,11 a ||Ax||oo = 12,21. Vidíme, že pomerne malá změna pravé strany zcela změnila řešení. Relativní změny jsou IIAblU _ . _ , IIAxI Ibl 100 - 9,909 • 1(T4, "„ ,n°° = 12,21. 00 Podle (2.24) odhadneme 12,21 Koo A > -^=^-= 12321. v ' ~ 9,909 • ÍO-4 Ve skutečnosti je b a Ab zvoleno tak, že /^(A) = 12321. To se snadno ověří, neboť (ini —10\ J , takže IIA^Hoo = 111 = HA^ a /^(A) = lil2 = 12321. Ukažme si ještě, že vztah (2.24) platí jako rovnost: HAxIU 12,21 11l20,ll HAblIoo n n = —— = m ttv = «oo(A)" " = 111 - Hrlloo. □ x U 1 111 bL K určení k(A) potřebujeme znát || A_1||. Avšak výpočet A-1 vyžaduje přibližně třikrát tolik práce jako celé řešení soustavy rovnic. Naštěstí přesnou hodnotu k(A) obvykle nepotřebujeme, vystačíme s dostatečně dobrým odhadem k (A). Spolehlivé a poměrně velmi rychlé odhady čísla podmíněnosti matic patří v současné době ke standardnímu vybavení programů pro řešení SLR. Jestliže program zjistí, že číslo podmíněnosti je příliš velké, vydá varování nebo dokonce výpočet přeruší. V MATLABu lze k rychlému posouzení podmíněnosti matice použít funkci rcond. Shrnutí. Soustava lineárních rovnic je dobře {špatně) podmíněná, právě když je matice soustavy dobře (špatně) podmíněná. Podmíněnost matice soustavy A měříme pomocí čísla podmíněnosti k(A). Je-li číslo k(A) malé (velké), je matice A je dobře (špatně) podmíněná. Špatně podmíněnou soustavu rovnic lze obvykle jen velmi obtížně řešit. Pomoci může výpočet s vícemístnou mantisou (je vhodné použít dvojnásobnou nebo ještě větší přesnost). Existují však výjimky: je-li například A diagonální matice, ve které au = 10*, pak je k(A) = 10n_1, což je pro velké n velké číslo, a přesto řešení x,i = 10^*6« získáme bez problémů pro libovolně velký počet rovnic. Předpokládejme, že matice soustavy je dobře podmíněná. Pak je GEM s částečným (nebo úplným) výběrem hlavního prvku stabilní algoritmus: protože velikost multiplikátorů nepřesahuje jedničku, vznikající zaokrouhlovací chyby se dalším výpočtem „nezesilují". Když naopak výběr hlavních prvků neprovádíme, můžeme dostat multiplikátory, jejichž absolutní hodnota je větší než jedna, což má za následek zvětšování dříve vzniklých zaokrouhlovacích chyb. GEM bez výběru hlavních prvků je tedy obecně nestabilní algoritmus. Výjimku z tohoto pravidla představuje řešení soustav se speciální maticí soustavy, např. když je matice soustavy ostře diagonálně dominantní nebo pozitivně definitní, pak je i GEM bez výběru hlavních prvků stabilní algoritmus. 33 2.2. Iterační metody Mnoho praktických problémů vyžaduje řešení rozsáhlých SLR, jejichž matice soustav jsou řídké, tj. mají relativně málo nenulových prvků. Standardní eliminační metody studované v předchozí kapitole 2.1 nejsou pro řešení takových soustav vhodné, neboť v průběhu eliminace dochází postupně k zaplňování původně nenulových pozic v matici soustavy, což vede k velkým nárokům na počet aritmetických operací a klade také vysoké nároky na paměť počítače. To je důvod, proč se pro řešení takových soustav používají iterační metody. Zvolí se počáteční vektor x0 a generuje se posloupnost vektorů x0 —> xx —y x2 ..., která konverguje k hledanému řešení x*. Společným rysem běžných iteračních metod je fakt, že každý jednotlivý iterační krok X& —y x^+i vyžaduje objem výpočtů srovnatelný s násobením matice A vektorem, což je pro řídké matice objem nevelký (pokud je v každém řádku matice A řádu n nejvýše m nenulových prvků, jde o nm operací násobení a sčítání). Přijatelný objem výpočtů lze proto dosáhnout i pro poměrně velký počet iterací. Na obhajobu přímých metod je však třeba dodat, že pro soustavy s řídkými maticemi existují velmi efektivní algoritmy eliminačního typu. Přesto, pro extrémně rozsáhlé soustavy rovnic se speciální strukturou matice soustavy jsou vhodně zvolené iterační metody efektivnější a jsou často jedinou prakticky realizovatelnou metodou řešení. 2.2.1. Klasické iterační metody. vycházejí z rozkladu matice soustavy A = M —N , kde M je regulární matice. Posloupnost Xfc je pak definována předpisem Mxfc+1 = Nxfc + b, (2.25) přičemž počáteční aproximace Xo je daná. Matici M, definující konkrétní metodu, volíme tak, aby řešení SLR (2.25) „nebylo příliš nákladné" a přitom aby konvergence x^ —y x* byla „rychlá". Konvergence. Metodu (2.25) lze ekvivalentně zapsat ve tvaru xfc+1 = Txfc + c, (2.26) kde T = M_1N, c = M_1b. Metoda (2.26) je známa jako metoda prosté iterace. Je-li x* = A_1b přesné řešení, pak e^ = X& — x* je chyba v k-tém kroku metody. Konvergence Xfc —y x* metody (2.26) nastane, právě když e^ —y o. Odečteme-li od rovnice (2.26) rovnici x* = Tx* + c, dostaneme ek+1 = Tek = T2efc_x = • • • = Tfc+1e0. (2.27) Proto ek -> o Tk -> O. (2.28) Matice A s vlastností Ak —y O pro k —y oo se nazývá konvergentní matice, anglicky convergent matrix. Nutnou a postačující podmínku pro to, aby matice A byla konvergentní, odvodíme pomocí Jordánova rozkladu matice A. 34 Jordánův rozklad. Ke každé čtvercové matici A existuje regulární matice X taková, že X_1AX = J, kde /Ji V \ 3t) je blokově diagonální matice, známá jako Jordánův kanonický tvar matice A, a A i \ V 1 1 2 t 1, Z,, . . . , L, jsou Jordánovy bloky. Mimo hlavní diagonálu a první naddiagonálu jsou prvky matic Jj nulové. Důkaz existence Jordánova rozkladu viz [53]. Protože horní trojúhelníková matice A je s maticí T podobná, diagonální prvky A« Jordánových bloků J« jsou vlastní čísla matice A, viz kapitola 7.1.5. Věta (o konvergentní matici). Matice A je konvergentní, právě když spektrální poloměr g(A) matice A je menší než 1, tj. ==> q(A) < 1. (2.29) A —y O pro k —y oo Důkaz. Snadno ověříme, že A = X.TX X /Jí v J2 X -1 takže Afc —y O, právě když —y O, i = 1, 2,..., t. Matici J« lze zapsat ve tvaru Ji = Xdi + Ni, kde Ij je jednotková matice řádu rti a /O 1 \ 0 '•• N, V 1 0/ Není těžké ověřit, že pro 1 < k < rti je horní trojúhelníková s jedničkami v /c-té naddiagonále a že pro k > rti je matice = O nulová. Proto J? = (AťIi + N,)fc = A?Iť + J2 ( • ) Ni Pro fc ^ ni- .7 = 1 35 (a) Jestliže —y O, pak nutně \\\ < 1. (b) Nechť |Aj| < 1. Protože řada 'k k=l IA konverguje, IA —> 0 pro k —> oo. □ Odtud —>• O pro k —> oo. Dokázali jsme tedy nutnou a postačující podmínku konvergence: metoda prosté iterace (2.26) konverguje, pravé když g(T) < 1. (2.30) Je-li x vlastní vektor matice A a A je odpovídající vlastní číslo, tj. když Ax = Ax, pak |A|||x|| = ||Ax|| < ||A|| • ||x||, odtud g(A) < ||A||. (2.31) Můžeme tedy vyslovit postačující podmínku konvergence: jestliže ||T|| < 1, pak metoda prosté iterace (2.26) konverguje. (2.32) Pro dále uvedené konkrétní iterační metody vyslovíme postačující podmínky konvergence v jiné, snadněji ověřitelné formě. Kritéria pro ukončení iterací. Jde o to, jak rozhodnout, zda x^+i je už dostatečně dobrá aproximace řešení x. Řešení x neznáme, takže se bez něj musíme obejít. Nabízí se zkoumat velikost změny x^+i — X& nebo velikost rezidua r^+i = b — Ax^+i. Postupuje se tak, že uživatel zadá malé kladné číslo e jako požadovanou přesnost a v každém kroku metody se testuje, zda je splněna některá z následujících podmínek 1. ||xfc+i - xjfeH < e||xfc|| , 2. ||rfc+i|| < e(||A|| • ||xfc+i| 3- Ilrfc+i|| < £llro|| • Ib| Je-li podmínka na ukončení iterací splněna, výpočet přerušíme a x^+1 považujeme za přibližnou hodnotu řešení x. Jacobiova metoda. Předpokládejme, že A = L + D + U, kde D je diagonální matice, která má stejnou diagonálu jako A, a kde L resp. Uje ryze dolní resp. horní trojúhelníková část A, tj. D / 0 0-21 (a\\ o 0 a22 0\ 0 o \ o Ojnn /o u ^n,n—1 0 J au 0 aln 0 Q>n—l,n 0 36 Nejjednodušší rozklad A dostaneme pro M = DaN = —(L + U). Metoda (2.32) je pak tvaru Dxfc+1 = b - (L + U)xfc (2.33) a je známa jako Jacobíova metoda. Soustava (2.33) s diagonální maticí se řeší snadno. c+l)> Zapíšeme-li (2.33) po složkách (složky vektoru X& jsou značeny x\k\ podobně pro x^H dostaneme = — í bi - ^2 aíjxf^ ) > i = 1,2,... ,n . 3 + i Analýzou vlastností iterační matice T = — D_1(L + U) lze dokázat, že Jacobíova metoda konverguje, když A je ryze diagonálně dominantní. Gaussova-Seidelova metoda. Všimněte si, že Jacobíova metoda používá X& k výpočtu všech složek x^+i. Protože (alespoň na sériových počítačích) prvky vektoru x^+i počítáme postupně jeden za druhým, vznikl přirozený nápad využít ihned ty složky x^+i, které jsou už k dispozici. Tak dostáváme Gaussovu-Seidelovu metodu: / i—l n — U-j2a*3x?+1)- 11V j=i j=i+i i = L, z,. . . ,n . j=l j=i+l Vyjádříme-li tuto metodu v maticovém tvaru, máme (D + L)xfc+1 = b - Uxfc . (2.34) Je dokázáno, že Gaussova-Seidelova metoda konverguje, když A je ryze diagonálně dominantní nebo pozitivně definitní. Poznámky. Následuje několik poznatků o vzájemném vztahu Jacobiovy a Gaussovy-Seidelovy metody. 1. Konvergence Gaussovy-Seidelovy metody je pro mnohé matice A rychlejší než konvergence Jacobiovy metody. Tak je tomu třeba v případě, když A je ryze diagonálně dominantní. 2. Existují matice, pro které Gaussova-Seidelova metoda konverguje a Jacobíova metoda nekonverguje a naopak, pro které konverguje Jacobíova metoda a Gaussova-Seidelova metoda nekonverguje. 3. Jacobíova metoda umožňuje paralelní výpočet (všechny složky xf^ mohou být počítány současně, každá na jiném procesoru), zatímco Gaussova-Seidelova metoda je ze své podstaty sekvenční (x[k+1^ lze vypočítat až po té, co byly spočteny všechny složky x^k+1^ pro j < i). Pro speciální typy matic A jsou však vypracovány postupy umožňující paralelizovat i Gaussovu-Seidelovu metodu. 37 Relaxační metody. Bezprostředně poté, co jsme základní metodou (Jacobiovou nebo Gaussovou-Seidelovou) spočetli i-tou složku x\k+1\ provedeme její modifikaci O+i) a \ (fc) (fc+i) a:- := (1 - uj)x\ + wií , kde uj > 0 je tzv. relaxační parametr. Volíme ho tak, abychom vylepšili konvergenci základní metody. Pro uj = 1 dostáváme původní metodu. Zvolíme-li uj < 1, hovoříme o do/m' relaxací, v případě w > 1 jde o horní relaxací. Efektivní volba relaxačního parametru uj závisí na zvolené základní metodě a na matici soustavy A. Praktické zkušenosti potvrzují, že dolní relaxace může zajistit konvergenci v případě, když základní metoda nekonverguje. Vhodnou volbou relaxačního parametru lze rychlost konvergence původní metody podstatně zrychlit. Pro zvolenou metodu a speciální tvar matice A jsou známy vzorce pro optimální hodnotu ujopt relaxačního parametru. Tyto vzorce však mají význam spíše teoretický, neboť výpočet podle nich je příliš náročný. Proto se pracuje s proměnným relaxačním faktorem, v k-té iteraci s ujk, a jeho hodnota se v každé iteraci zpřesňuje tak, aby se postupně blížila k optimálnímu ujovt- Konkrétní metody lze najít ve specializované literatuře. Relaxace Jacobiho metody. Dá se ukázat, že když konverguje Jacobiho metoda, tak konverguje také relaxovaná Jacobiho metoda pro 0 < uj < 1. Relaxace Gaussovy-Seidelovy metody je v literatuře známa jako SOR metoda (podle anglického „Successive Over Relaxation"). O konvergenci SOR metody máme zejména následující poznatky: 1. Pokud SOR metoda konverguje, pak je 0 < uj < 2. 2. SOR metoda konverguje, když A je ryze diagonálně dominantní a 0 < uj < 1. 3. SOR metoda konverguje, když A je pozitivně definitní a0 - uj(L + U)] xfc + ujb. (2.36) Symetrická horní relaxace je v literatuře známa jako SSOR metoda (podle anglického „Symmetric Successive Overrelaxation"). Jeden krok metody je definován pomocí dvou x- (fc+i) i-l E i=i (fc+l) 38 půlkroků, z nichž první je SOR krok a druhý je zpětný SOR krok: (i—l n \ t (fc+1/2) (k)\ . 1 0 bi - a,ij x) - aijx) I , t = 1,2,... ,n , j=i j=i+i J x?+V) =(l-UJ)xik+1/2) + ^[bt-J2^xf+1/2)-J2 ^xf+1) \,í = n,n-l,...,l. 3=1 j=i+l (2.37) Maticový zápis SSOR metody je tvaru (D + wL)xfc+i/2 = [(1 - w)D - wU]xj; + Lub, (D + wUjx^i = [(1 - u)~D - wL]xfc+i/2 + ub. Vyloučením Xfc+1/2 dostaneme předpis Mxfc+1 = Nxfc + b, kde M = — (±V + l) D 1 f-D + U 2 — LU \LU J \LU 2 — y \ u J \lo J \ lu ) Postačující podmínky konvergence jsou stejné jako pro SOR metodu: A ryze diagonálně dominantní a 0 < to < 1 nebo A pozitivně definitní a0 y) v fž a u(x, y) = g(x, y) na hranici díl, (funkce / a g jsou dané, neznámá je funkce u) metodou sítí vzniká SLR s maticí soustavy K uvažovanou v tomto příkladu 2.5. 39 pro devět rovnic vypadá takto: ( 4 -1 0 -1 0 0 0 0 -1 4 -1 0 -1 0 0 0 0 0 -1 4 0 0 -1 0 0 0 -1 0 0 4 -1 0 -1 0 0 0 -1 0 -1 4 -1 0 -1 0 0 0 -1 0 -1 4 0 0 -1 0 0 0 -1 0 0 4 -1 0 0 0 0 0 -1 0 -1 4 -1 K 0 0 0 0 0 -1 0 -1 Obecně je K složena z čtvercových submatic řádu n (tzv. bloků) B, —I, O, které jsou ve čtvercové matici řádu n2 rozmístěny ve třech diagonálách K = ( B -I O O -1 B -I O o o -I B O o o O O B -I O O -I Matice I je jednotková matice, O je čtvercová matice s nulovými prvky a B je třídiagonální matice 4 -1 0 •• 0 o\ 1 4 -1 •• 0 0 0 -1 0 •• 0 0 0 0 0 •• 4 -1 0 0 0 •• • -1 Na matici K se často testuje účinnost numerických metod pro řešení SLR s řídkou maticí. Na obrázku 2.3 je vidět závislost počtu iterací (potřebných pro dosažení zvolené přesnosti) na počtu rovnic n2. Při metodě SOR bylo zvoleno optimální u. 2.2.2. Další iterační metody. Klasické iterační metody se současnosti používají už jen zřídka. Do učebního textu jsme je zařadili hlavně proto, že jsou poměrně jednoduché a přitom na nich lze dobře ukázat, jak iterační metody fungují. V této kapitole uvedeme dvě typické, v aplikacích standardně používané, iterační metody: zobecněnou metodu minimálních reziduí pro SLR s libovolnou regulární maticí soustavy a metodu sdružených gradientů pro SLR s pozitivně definitní maticí soustavy. Řadu dalších metod lze najít třeba v [33]. 40 1600 1400 1200 1000 800 600 400 200 0 1 1 > Jacobi A Gauss-Seidel wpun1 cti i li *T m-- - 0 100 200 300 400 500 600 700 Rovnic Obr. 2.3: Srovnání klasických iteračních metod 2.2.2.1. Zobecněná metoda minimálních reziduí Máme najít řešení x* soustavy lineárních rovnic Ax = b, kde A je obecná regulární matice. Začneme tím, že si vysvětlíme, jak pracuje Metoda minimálních reziduí. Přibližné řešení x^+1 hledáme ve tvaru xfc+i = xfc + akrk (2.39) kde rk = b — Axj, ^ o je reziduum (je-li r*; = o, pak x^ = x*) a ak je koeficient určený tak, aby délka ||rfc+1||2 vektoru nového rezidua rk+1 = b — Ax^+1 byla minimální. V dalším budeme používat označení (u, v) = uTv pro skalární součin vektorů u a v, takže 11u.112 = (u, u)1/2. Dolní index 2 v 11tí112 budeme vynechávat, tj. ||u|| = 11tt112- Koeficient ak dostaneme minimalizací funkce |b - A(xfc + ark) Protože x*, například tehdy, když A je pozitivně definitní. Metodu MR proto zobecníme tak, aby konvergence nastala pro každou regulární matici. V dalším budeme pracovat s pojmem Krylovova podprostoru. Nejdříve připomeňme, že span(vi, V2,..., vm) je vektorový prostor generovaný vektory Vi, v2, • • •, vm, tj. m span(vi,v2,...,vm) = {v | v = '^a,jyhai eR,i = 1,2,... ,m}. Prostor 3Cm(C, v) = span(v, Cv,..., Cm_1v) je tzv. Krylovův podprostor (pro dané přirozené číslo m, matici C a vektor v). %m(C, v) je podprostor IRn, kde n je řád matice C, dimenze %m(C,\) je nejvýše rovna menšímu z čísel man. Zobecněná metoda minimálních reziduí (anglicky „generalized minimal residual", zkratka GMRES). Přibližné řešení xm soustavy Ax = b hledejme ve tvaru Xm = Xo + Ôm , kde ôm G %m = %m(A,r0) vybereme tak, aby norma ||rm|| rezidua rm = h — Axm byla minimální, tj. aby ||rm||2 = ||r0- Aôm\\2 < ||r0- A<5||2 Wô e Xm . (2.41) Předpokládejme, že %m je dimenze m. Protože přirozená báze {r0, Ar0,..., Am_1r0} prostoru %m je špatně podmíněná, sestrojíme v něm ortonormální bázi {v1; v2,..., vm} a xm hledáme ve tvaru xm = x0 + Vmym , kde Vm = (vi, v2,..., vm) a ym E Rm , (2.42) přičemž ym určíme v souladu s (2.41) tak, aby ||rm||2 = ||r0 - AVmym||2 < ||r0 - AVmy||2 VyGlm. (2.43) Navržená metoda je m-kroková, neboť k sestrojení xm potřebujeme vektory {vfc}^-,^. Sestrojení ortonormální báze v %m(A, v). Nejdříve uvedeme základní verzi Gramovy-Schmidtovy ortonormalizace jako Algoritmus AGS (Arnoldi-Gram-Schmidt) 1. vi:=v/||v|| 2. for fc := l,2,...,m do 3. for i := 1, 2,..., k do hik := (Av^, Vj) end 4. wfc := Avfc - Y,ki=i híkví 5. hk+itk '■= ||wfc|| 42 6. if hk+i^k = O then stop 7. Vfc+i := v?k/hk+i,k 8. end Tvrzení 1. Předpokládejme, že algoritmus AGS neskončí dříve než v m-tém kroku. Pak vektory Vi, v2,..., vm tvoří ortonormální bázi Krylovova podprostoru %m = %m(A, v). Důkaz. Vektory V&, k = 1,2,... ,m, jsou ortonormální (podle řádků 3 a 4 je (w^, v,-) = 0, j = 1,2,..., k, a podle řádku 7 je ||vfc+i|| = "Wk/hk+i,k = 1, k = 2,3, ...,m). Zbývá dokázat, že span(v1; v2,..., v^) = %m. a) Nejdříve dokážeme, že \j = gJ_1(A)v1, kde qj-i(t) = Yji=o a^í ^P^1^1 je polynom stupně j — 1 s koeficientem ^ 0. Důkaz provedeme indukcí. Pro j = 1 je vi = 9o(A)vi pro qo(t) = = 1. Předpokládejme, že tvrzení platí pro j < k. Pak k k hk+i,kVk+i = wfc = Avfc - ^ híkví = Agfc_i(A)vi - ^ ^»fc?»-i(A)vi, í=i í=i takže Vfc+i = gfc(A)vi, kde qk(t) je polynom stupně k a = a[,fc 0. Dokázali jsme tedy, že span(v1; v2,..., vm) ^ lXm. b) Dokážeme, že AJ'_1Vi G span(v1; v2,..., v,). Pro j = 1 tvrzení platí. Předpokládejme, že tvrzení platí pro j < k. Pak z rovnice k k-1 k frfc+i,fcvfc+i = Avfc - ^2 hikVi = af~1]Ak\i + ^2 af~1]Ak~\i - ^ hikVi, i=l i=l i=l a protože ^ 0, tvrzení platí i pro j = k + 1. Proto lXm ^ span(vi, v2,..., vm). Dokázali jsme tedy, že %m = span(v1; v2,..., vm) a důkaz je hotov. □ Tvrzení 2. Označme Vm matici typu (n,m), jejíž sloupce jsou vektory v1; v2,..., vm, a dále nechť Hm je horní Hessenbergova matice typu (m + l,m), jejíž nenulové prvky /z,^ jsou definovány algoritmem AGS, tj. tt _ j7 "i _ J h"ík i i 1,2,..., k -\- 1, , _ 10 Hm-|ftífc}- I 0; i = fc + 2,jfc + 3,...,m + l, Dále nechť Hm je matice, kterou dostaneme z Hm vypuštěním jejího posledního řádku. Pak AVm = VmHm + wme^= (2.44) = Vm+1Hm, (2.45) V^AVm = Hm. (2.46) Přitom em je m—tý sloupec jednotkové matice řádu m. Důkaz. (2.45) a (2.44) plyne z řádků 4, 5 a 7 algoritmu AGS, podle kterých k+l m Avfc = hjkVj, k = 1,2,...,m, Avm = him\j + wm . (2.47) í=i í=i 43 (2.46) dostaneme z (2.44), neboť V^wm = /im+i,m(vi, v2,..., vm)Tvm+i = o. □ Praktickou implementaci algoritmu AGM představuje Algoritmus AGSM (Arnoldi-Gram-Schmidt modified) 1. vi := v/||v|| 2. for fc := l,2,...,m do 3. wfc := Avfc 4. for i := 1,2,..., fc do 5. hik := (wfc, Vi) 6. wfc := wfc - hikVi 7. end 8. hk+itk '■= ||wfc|| 9. if hk+i,k = 0 then stop 10. vfc+i := wk/hk+i,k 11. end Protože (Avfc — X^'=i ^jfcvj> v«) = (Av^, Vj) = /ijfc, jsou algoritmy AGS a AGSM ekvivalentní. Při reálném výpočtu je však algoritmus AGSM stabilnější. Algoritmus metody GMRES. Ze vztahu (2.43) plyne, že vektor ym minimalizuje funkci 0. Protože r*; = — V^(xfc), minimum x^+1 hledáme ve směru největšího spádu funkce ip, což vysvětluje název metody. Zobecněním metody největšího spádu je Metoda ortogonální projekce, stručně FOM podle anglického „full ortogonalization method", viz např. [46], která počítá xm tak, aby X/n Xq £ a I"m _l 0Cm . Přibližné řešení hledáme stejně jako v metodě GMRES ve tvaru xm = x0 + Vmym , (2.42) zvolíme vi = /3_1ro, kde /3 = ||ro||, v2, V3,..., vm vypočteme algoritmem AGSM a ym určíme tak, aby o = V^rm = V^(b - A(x0 + Vmym)) = V^r0 - V^AVmym = (5ex - Hmym . Využili jsme toho, že V^ro = V^/3vi = /3ei, kde ei je první sloupec jednotkové matice řádu m, a dále také vztahu (2.46). Vektor ym je proto řešením soustavy m lineárních rovnic Hmym = /3ei. (2.51) Je-li hm)Tn+i = 0, pak xm = x*. Skutečně, pomocí (2.42), (2.44) a (2.51) dostaneme ii b — Axm|| = ii ro — AVmym|| = ||r0 — VmHmym|| = ||r0 — Vm/5ei|| = 0. Pro pozitivně definitní matici A je rovnice V^rm = o ekvivalentním vyjádřením toho, že xm minimalizuje funkci ^(x) = |||x — x*||A na množině x0 + %m nebo-li že ym minimalizuje funkci 0 pomocí vztahů (2.42), (2.44) a (2.51), v nichž za m dosadíme k, dostaneme rk = b - Axfc = b - A(x0 + Vkyk) = r0 - AVfcyfc = = Vfc(/3ei) - (VfcHfc + wkel)yk = = Vk(f3e1 - Hfcyfc) - wkelyk = -wfce^yfc . Protože podle AGSM je = hk+ltkvk+1 = /3k+1vk+1, odvodili jsme, že rk = o-fcVfc+i, kde ak = -f3k+1elyk, k = 1, 2,..., m - 1. □ 2. Vektory {pj}™ x jsou sdružené vzhledem k maticí A, jinými slovy jsou A—ortogonální, tj. platí (pj, Pj)a = 0 pro i ^ j. {pi}™=l je tedy A—ortogonální báze v %m(A, r0). Důkaz. Pro m > 0 pomocí (2.55), (2.46) a (2.53) zjistíme, že matice PTAP — TT~TVTAV TT_1 — TT~TH TT_1 — TT~TT, je dolní trojúhelníková (U"1 je horní trojúhelníková, takže UmT je dolní trojúhelníková a UmTLm je proto také dolní trojúhelníková), a protože je symetrická, musí být diagonální. Pro p« ^ o jsou diagonální prvky pf Ap« 7^ o, neboť A je pozitivně definitní. □ Metoda sdružených gradientů. Vektory p^ očíslujeme od nuly, takže podle (2.59) Xfc+i = xfc + Cfc+iPfc, k = 0,1,... ,m - 1. (2.61') Pomocí (2.57) a (2.60) dostaneme fc+1 ^iO"oPo = r0, ^fc+20"fc+iPfc+i = rfc+i--r]k+1akpk, k = 0,1,..., m - 2. Označíme-li pfc = r]k+1akpk, J3k = -f3k+2-\Ľ> + uL)T, LUyZ — LU) kterou jsme poznali při popisu SSOR metody, viz (2.38). Řešení zk SLR Mz^ = r^ dostaneme řešením dvou SLR (D + wL)y = rfc, (D + cuL)Tzk = u{2 - w)Dy s dolní trojúhelníkovou maticí D + wL a horní trojúhelníkovou maticí (D + wL)T. 3. Volíme M = LLT, kde L je dolní trojúhelníková matice získaná tzv. neúplným Choleského rozkladem matice A (takové metody se označují zkratkou IC podle anglického „incomplete Cholesky"). Algoritmus označovaný jako IC(0) (podle anglického íncomplete Cholesky with zero-fill) postupuje stejně jako standardní Choleského rozklad s tím rozdílem, že pro = 0 klademe 1^ = 0. Algoritmus IC(0). Postupně pro k = 1, 2,..., n vypočteme Jfe-l \ V2 vkk = I akk - ^2 °2 1 / -íjikj ) pro aik Ý 0, pro aik = 0, k + l,k + 2,... ,n . Algoritmus IC(0) může zhavarovat, pokud akk — X^^=i — 0- Tato situace nenastane například tehdy, když A je ryze diagonálně dominantní nebo když mimodia-gonální prvky A jsou nekladné, viz [33]. Níže uvedený algoritmus IC-MJ podle Jenningse a Malika nezhavaruje pro žádnou pozitivně definitní matici, viz [33]. 54 Algoritmus IC-MJ. 1. for k := 1 to n do dk := end 2. for k := 1 to n do 3. 4:=4-Etí^ 4. for i := fc + 1 to n do 6. if aífc = 0 7. dfc := dfe + Kífcl, 4 := dj + |^.|, tik '■= 0 8. end 9. end 10. íkk ■= Vďk 11. for i := fc + 1 to n do := íikjíkk end 12. end Pokud v řádku 7 vypustíme příkazy dk := dk + \tik\, d{ := dŕ; + dostaneme algoritmus IC(0). Řadu dalších algoritmů založených na principu neúplného Cho-leského rozkladu lze najít v [33] a [46]. Řešení soustavy rovnic LLTZfc = r k je snadné: nejdříve určíme y jako řešení soustavy Ly = rk a pak vypočteme zk jako řešení soustavy LTzfc = y. V MATLABu je neúplný Choleského rozklad implementován jako funkce ichol. 55 3. Metoda nejmenších čtverců Úlohu metody nejmenších čtverců (stručně MNČ) lze formulovat velmi obecně, viz [25]. Stručně takovou formulaci uvedeme. Nechť X je separabilní Hilbertův prostor s ortonormální bází {ipi}^, Xk je k-roz-měrný podprostor s bází {y?j}^=1 a / G X je daný prvek. Úloha MNC zní: určit s*k G Xk splňující: ||/ — s*k\\ < \\f — s\\ Ws G Xk. (3.1) Řešení s£ je k—tý částečný součet Fourierovy řady prvku / vzhledem k systému ťJ- sl = EÍ=i(/>^)^- Navíc / = lim^oo s*k = YliíiifiViíVi' viz t25]' t62]- V této kapitole se zaměříme na MNC pro přibližné řešení soustav lineárních rovnic, a to v případech, kdy tyto soustavy řešení nemají, tj. když jde o tzv. přeurčené SLR, ale také v případech, kdy SLR mají nekonečně mnoho řešení, tj. když jde o tzv. nedourčené SLR. V kapitole 4.2 pak ukážeme použití MNC při aproximaci funkcí. 3.1. Formulace Zabývejme se řešením soustavy m lineárních rovnic s n neznámými Ax = b. (3.2) Matice soustavy A je tedy typu (m,n), vektor b pravé strany je typu (m, 1) a vektor řešení x je typu (n, 1). Nechť A' = (A, b) je rozšířená matice soustavy a r = h(A) je hodnost matice A. Pak z Frobeniovy věty plyne, že soustava lineárních rovnic má řešení, právě když h(A) = h(A'). Je-li navíc r = n, má SLR jediné řešení, zatímco v případě r < n existuje nekonečně mnoho řešení Xq + N (A), kde Xq je nějaké (partikulární) řešení SLR (3.2) a N (A) = {x G Rn | Ax = o} (3.3) je podprostor dimenze n — r známý jako jádro matice A. Pokud h(A) < h(A'), SLR (3.2) řešení nemá. Můžeme však minimalizovat rozdíl mezi levou a pravou stranou SLR, tedy minimalizovat nějakou normu rezidua r = b — Ax jako funkci x. Zvolíme-li euklidovskou normu (tj. délku vektoru), dostaneme metodu nejmenších čtverců: za řešení považujeme vektor x*, který minimalizuje součet čtverců rozdílů navzájem si odpovídajících složek na levé a pravé straně SLR. Abychom vyjádřili ztrátu přesné rovnosti, budeme úlohu „řešit SLR (3.2) ve smyslu metody nejmenších čtverců" zapisovat ve tvaru Ax = b (3.4) a budeme tím rozumět tento problém: určit x* G Rn splňující: ||b - Ax*|| < ||b - Ax|| Vx G Rn. (3.4') Řešení x* úlohy (3.4') budeme nazývat řešením SLR (3.2) ve smyslu metody nejmenších čtverců, stručně MNC řešením SLR (3.2). Všimněte si, že každé „klasické" řešení SLR 56 (3.2) je vždy také jejím MNČ řešením, tj. je řešením úlohy (3.4'). Opak obecně neplatí: jestliže pro MNČ řešení x* je ||b — Ax*|| > 0, pak nemůže platit Ax* = b. Vektorové normy použité ve formulaci (3.4'), a všude dále v této kapitole, jsou euklidovské, tj. ||v|| = 11v112 = (v^V)1/2. Také maticové normy, které budeme v této kapitole používat, jsou euklidovké, tj. ||A|| = ||A||2 = maxXjr0 ||Ax||2/||x||2 • Existence a jednoznačnost. V dalším budeme používat označení R(A) = {y G Rm | y = Ax, x G Rn} pro obor hodnot matice A. Jestliže span(vi, V2, • • •, vr) = {X^=i xíví I xiixz> ■ ■ ■ ,xr G IR} je vektorový prostor generovaný vektory v1; v2,..., vr, pak -R(A) = span(a1; a2,..., an), kde A = (a1; a2,..., an). Proto se také používá zápis span(A) = -R(A) = {Ax | x G IRn}. Ukážeme, že úloha určit y* G R(A) splňující: ||b - y*|| < ||b - y|| Vy G R(A) (3.5) má jediné řešení. Všimněte si, že úloha (3.5) je speciálním případem obecné úlohy (3.1). Důkaz. Nechť r = h(A) je hodnost matice A a {vj}[=1 je báze v R(A). Pak každý vektor y G -R(A) lze zapsat ve tvaru y = Vx, kde V = (v1; v2,..., vr) a x G IRr. Ukážeme, že funkce V?(x) = ||b - Vx||2 = (b - Vx)T(b - Vx) = bTb - 2xTVTb + xTVTVx má jediné minimum. Spočteme gradient V n = h(A). V tom případě z normálních rovnic AT(Ax — b) = o plyne (Ax)T(b — Ax) = (PJ4b)T(b — P^b) = 0, takže pro úhel 9 vektorů b a P^b platí |cos0|- KP^b>b)l _ |(PAb,b-(b-PAb))| _ ||PAb|| HP^blI • ||b|| ||P,ib|| • ||b|| ||b|| Pro jednoduchost se omezíme na malou změnu Ab pravé strany a její vliv na změnu Ax řešení normálních rovnic, tj. zabývejme se úlohou ATA(x + Ax) = AT(b + Ab). 58 Protože ATAx = ATb, máme ATAAx = ATAb, takže Ax = (ATA)_1ATAb = A+Ab, a tedy ||Ax|| < ||A+|| • ||Ab||. Podělíme-li obě strany ||x||, dostaneme IIAxII ... ...IIAblI . líbil IIAblI /íN líbil IIAblI k(A) IIAblI \r^r < \\A+\\\—f- = k(A) " " < k(A)-_ v ; n n JA|| • ||x|| ||b|| HP^blI ||b|| | cos^| ||b|| Číslo podmíněnosti úlohy Ax = b vyvolané změnou pravé strany závisí nejen na k(A), ale také na úhlu 9 mezi vektorem b a jeho ortogonální projekcí P^b do R{A). Číslo podmíněnosti je přibližně rovno k(A), když je reziduum r = b — P^b malé, tj. když cos# 1, avšak číslo podmíněnosti může být libovolně horší než k(A), když je reziduum velké, tj. když cos# »2 0. Změníme-li matici soustavy A o A A, tj. když řešíme normální rovnice (A + AA)T(A + AA)(x + Ax) = (A + AA)Tb, pak lze pro malé A A odvodit „přibližnou nerovnost" < [k2(A)|tg£| + K(A)]J^1 A viz [21]. Tady je závislost na úhlu 9 ještě výraznější: zatímco pro malé reziduum je podmíněnost přibližně k(A), pro velké reziduum je podstatně větší, přibližně k2(A)|tg#|. Shrnutí. Ukázali jsme, že podmíněnost úlohy „najít řešení přeurčené soustavy rovnic Ax = b metodou nejmenších čtverců" závisí jak na čísle podmíněnosti k(A) matice A, tak na úhlu 9, který svírá vektor b se svou ortogonální projekcí P^b do R(A): podmíněnost je tím horší, čím je k(A) a |tg(0)| větší. 3.2. Použití QR transformace Minimalizace normy rezidua založená na řešení normálních rovnic má jeden velký nedostatek: číslo podmíněnosti matice ATA je kvadrátem čísla podmíněnosti matice A (viz (3.15) v kapitole 3.3), tj. pro velké k(A) je řešení normálních rovnic špatně podmíněný problém. Proto se běžně používá jiný postup, založený na tzv. QR transformaci. Ten si nyní popíšeme. Matici A typu (m,n) lze vyjádřit ve tvaru součinu ortonormální matice Q řádu m a horní trojúhelníkové matice R typu (m,n), tj. A = QR. Připomeňme, že ortonormální matice je regulární a platí pro ni QTQ = QQT = I, kde I je jednotková matice. Horní trojúhelníkovou maticí se pak rozumí matice s nulovými prvky pod hlavní diagonálou, tj. pro R = {r i j} je = 0 když i > j. Vyjádření A = QR se nazývá QR rozklad matice A a konstrukce QR rozkladu se nazývá QR transformace nebo také QR algoritmus. Konkrétním QR algoritmům je věnována kapitola 3.4. Předpokládejme tedy, že matice Q a R máme k dispozici. Protože ||r||2 = rTr = rTQQTr = [QTr]TQTr = ||QTr||2 , 59 je minimalizace ||r|| ekvivalentní minimalizaci ||QTr||. Úpravou obdržíme ||QTr|| = ||QT(b-Ax)|| = ||QT(b-QRx)|| = ||Rx-QTb||. Označme R Ri R2 d = QTb di d2 (3.8) Rix- di Rix — di R2x- d2 -d2 kde Ri je čtvercová matice řádu n , R2 je nulová matice typu (m — n,n), dx je sloupcový vektor typu (n, 1) a d2 je sloupcový vektor typu (m — n, 1). Pak IIQTr|| nabývá minima pro x* splňující Rix* = di. Přitom mm r mm |QTr| (3.9) (3.10) Jestliže matice A má plnou sloupcovou hodnost, tj. h(A) = n, pak matice Ri je regulární a rovnice (3.9) má jediné řešení. Je-li d2 = o, je x* klasické řešení, tj. Ax* = b. Ve zbytku této kapitoly prozkoumané případ, kdy matice A nemá plnou sloupcovou hodnost. Nechť tedy r = h(A) < n je počet lineárně nezávislých sloupců matice A. Jejich přeskládáním lze jistě docílit toho, aby lineárně nezávislých bylo prvních r sloupců. Nechť je tedy P permutační matice taková, že matice AP má prvních r sloupců lineárně nezávislých, a nechť AP = QR je QR rozklad matice AP. Několik QR algoritmů, které kromě matic Q a R dodají také permutační matici P, je uvedeno v kapitole 3.4. Předpokládejme proto, že matice Q, R a P s vlastností AP = QR už máme k dispozici. Protože permutační matice je ortonormální, podobně jako dříve odvodíme |QTr| IQT(b APPr) Q1 (b-QRP^x) |RPT3 QTb Matici R a vektor d = QTb opět vyjádříme ve tvaru (3.8), kde však nyní Ri je obdélníková matice typu (r,n) hodnosti r, R2 je nulová matice typu (m — r,n), dx je sloupcový vektor typu (r, 1) a d2 je sloupcový vektor typu (m — r, 1). Optimální řešení x* dostaneme tak, že místo rovnice (3.9) vyřešíme rovnici RiPJ x* = di. Pro příslušné minimální reziduum opět platí (3.10). Označíme-li u* Riu* = di P x*, stačí určit u* jako řešení rovnice (3.9') 60 a položit x* = Pu*. Zaveďme si označení R1 = (S,T), u=(^ kde S je regulární matice řádu r (s nulovými prvky pod hlavní diagonálou), T je matice typu (r, n — r), y je sloupcový vektor typu (r, 1) a z je sloupcový vektor typu (n — r, 1). Každé řešení rovnice (3.9'), tj. rovnice Sy + Tz = dx, dostaneme tak, že zvolíme z a dopočítáme y = S_1di — S_1Tz. Zvolíme-li z = o, dostaneme řešení u=l o 1, x=Pu, které má nejvýše r nenulových prvků. Toto řešení bývá označováno jako základni řešeni (v angličtině „basic solution"). V MATLABu dostaneme základní řešení, když použijeme příkaz x=A\b. Jinou konkrétní volbou je řešení u*, které má minimální euklidovskou normu ||u*|| (anglicky „minimum-norm solution"). V tom případě má také x* = Pu* minimální normu, neboť permutační matice P je ortonormální, a proto ||Pu*|| = ||u*||. Ukažme si, jak můžeme řešení s minimální euklidovskou normou určit. Využijeme toho, že u je rezidum přeurčené soustavy n rovnic s:;Xôd1)' (3.n> kde I je jednotková matice řádu n — r a o je nulový vektor typu (n — r, 1). Protože sloupce matice soustavy (3.11) jsou lineárně nezávislé, existuje jediné řešení z* minimalizující euklidovskou normu rezidua u soustavy rovnic (3.11). z* určíme opět metodou nejmenších čtverců. Položíme-li pak y* = S_1d! — S_1Tz*, je u* = (^j a x* = Pu* hledané řešení soustavy rovnic Ax = b s minimální euklidovskou normou. 3.3. Použití singulárního rozkladu Řešení x* soustavy lineárních rovnic Ax = b metodou nejmenších čtverců s minimální euklidovskou normou lze zapsat ve tvaru x* = A+b, kde A+ je tzv. pseudoinverze matice A. V následujícím textu nejdříve zavedeme pojem singulárního rozkladu matice a pomocí něj budeme definovat pseudoinverzní matici. Singulární rozklad matice. Každou matici A typu (m,n) lze vyjádřit ve tvaru A = USVT, 61 kde U = (ui, U2,..., um) je ortonormální matice řádu m, V = (vi, v2,..., vn) ortonormální matice řádu n a S je diagonální matice typu (m,n), £ = diag(ai, a2,...,ap), p = min(m, n) , kde h(A) = r je hodnost matice A, viz např. [55]. Vyjádření A = USVT se nazývá singulární rozklad matice A, o i jsou singulární čísla a Uj resp. v j jsou i—tý levý singulární vektor resp. i—tf pravý singulární vektor, ujA = a,ivj , Avj = o-jUj, i = 1, 2,...,p. Singulární čísla jsou určena jednoznačně, viz [11]. Singulární vektory jednoznačně určeny nejsou, jak plyne z vyjádření A = X^ľ=i 0jex = u = v nebo x = —u = —v, pro A<0jex = u = —v nebo x = —u = v. Je-li A pozitivně definitní matice, pak A = (jax = u = v. Spektrální maticová norma je rovna největšímu singulárnímu číslu matice, \\A\\2 = amax(A) = a±. (3.12) Skutečně, llAxII ||SVTx|| llSylI llSylI SUp —■—— = SUp--—-- = SUp ———- = SUp —■-— = g\ . ||x||^o llxll ||x||^o ||x|| Hyll^o || Vy || ||y||^o ||y|| Protože o\ je největší vlastní číslo matice ATA, platí také ||A||2 = ^/\max(ATA). (3.13) Nejlepší aproximace maticí nižší hodnosti. Nechť g i=l 62 V [30] je dokázáno, že Aq má hodnost g a je nej lepší aproximací A mezi všemi maticemi hodnosti q v následujícím smyslu: min IIA — BIU = IIA — AJU = mi)T matice A. Pokud <22i = a3i = • • • = ami = 0, položíme Hi = I, Ai = HiA = A a první krok je hotov. 65 Je-li však alespoň jeden z prvků 021, «31, • • •, a>mi nenulový, anulujeme poddiagonální prvky prvního sloupce matice A pomocí Householderovy matice Hi I — 2\V!w[ kde Wi ai + Aei |ai + PieA /3i = sign(an)||ai| Pak v matici Ax = H4A je 11 — —Pi a zbývající prvky prvního sloupce jsou nulové. Předpokládejme, že matice A byla transformována v k — 1 krocích na tvar (ot1} 0 0 "12 a(k-1} u22 0 u13 a(k-1} ■ u23 u33 aln ^ a2n a3n Afc-i = Hfc_iHfc_2 • • • HiA = 0 0 0 0 0 0 akk uk+l,k akn ak+l,n l 0 0 0 '■■ a(k-1] ■ amk ■ a(fc_1) J Tato matice je horní trojúhelníková až do sloupce k - 1. V k- -tém kroku transformuj matici Afc_i na matici Afc = HfcAfc_i tak, aby A& měla měla nulové poddiagonální prvky v prvních k sloupcích. Pokud Ak-i už v k-tém sloupci pod diagonálou samé nuly má, položíme = I a k—tý krok je hotov. Je-li však některý z prvků <2fc+i,fc. 0^+2,fc, • • •, a»m,k nenulový, zvolíme za Householderovu matici I v nemz Zfc lzfc| a složky vektoru zk jsou 0 lkk lík pro i < k, pro i = k, pro i > k, , (fc-i) sign( 0, prohodíme k—tf a s—tý sloupec matic Ak-± a P a teprve pak provedeme Householderovu transformaci. Tak nakonec dostaneme AP = QR . (3.20) Čísla 7j se nemusejí počítat v každém kroku znovu, využijeme-li vlastnost: pokud Qv = ( a ) , pak ||w||2 = ||v||2 — a2 , w která platí pro každou ortonormální matici Q. Nyní již můžeme uvést Algoritmus HQR (Householder Q R) 1. H := I, p := (1, 2,..., n)T, p := min(m, n), r := p 2. for j := 1, 2,..., n do 7,- := Y,T=i a% end 3. for k := 1, 2,... ,p do 4. určíme sa)s tak, že 7S = maxK3-<„ 7^- 5. if 7s = 0, r := k — 1, goto 13, end 6. if s ý k, prohodíme 7^ ^ 7S, as a t> ps, end 7. if k = m goto 13 8. vypočteme ^Wk[k-.m} podle (3.17) - (3.18) 9- A^k:m,k:n] := ^-[k:m,k:n] ~ 2Wfc[fc;m] (w^jfc;mj A^k:m,k:n]) 10. H[k:m,l:m] '■= H[k:m,l:m] ~ 2Wfc[fc:m](w^jfc:mjH[fc:írl)i:m]) 11. for j := k + 1, k + 2,..., n do 7^ := 7,- — a\ - end 12. end 13. R := A, Q := HT, P := (epi, eP2,..., ePn) K algoritmu HQR připojíme několik poznámek. 67 1. V řádku 1 je I jednotková matice řádu m. 2. Označili jsme A = (a1; a2,..., an). 3. A[k:m,k:n] je submatice A tvořená řádky k, k + 1,... ,m a sloupci k, k + 1,...,n, podobně H[k:m,i:m] resp. ^wk[k:m] Je submatice H resp. subvektor w^. 4. V řádku 8 při výpočtu využijeme v (3.18) toho, že f3k = sign(akk)jk . 5. V řádku 13 ep. je Pj—tý sloupec jednotkové matice řádu n. 6. r = h(A) je hodnost matice A. Redukovaný Householderův QR rozklad. Nechť n < m, Qx je matice tvořená prvními n sloupci matice Q a Rx je čtvercová matice tvořená prvními n řádky matice R, pak AP = Q1R1. (3.21) Rozklad (3.21) bývá v anglicky psané literatuře označován jako „economy size QR de-composition", tj. ekonomický (tedy úsporný, redukovaný) QR rozklad. Toto pojmenování se používá také třeba v MATLABu: příkazem [Q,R,P] =qr(A) dostaneme úplný rozklad (3.20), zatímco příkazem [Ql,Ri,P] =qr(A,0) dostaneme redukovaný rozklad (3.21). HQRe algoritmus (Householder QR economy) dostaneme z HQR algoritmu náhradou řádků 1, 10 a 13, 1. p := (1, 2,..., n)T, p := n, r := n 10. qfc := ek, for j := k, k - 1,. . ., 1 do qk[j:m] := qk[j:m] ~ (2w^;m]qfc[j:m])w■jy-.m] end 13. Ri je prvních n řádků matice A, Qi = (qi, q2,..., qn) přičemž e^ je k—tý sloupec jednotkové matice řádu m. Rozdíl oproti algoritmu HQR spočívá v tom, že v modifikovaném řádku 10 vytváříme A;—tý sloupec q^ matice Qx. Generují se tedy jen ty ortonormální vektory, které jsou v Qx! Abychom pochopili řádek 10, musíme si uvědomit, že HnHn_i • • • HiAP = (ei, e2,..., en)Ri, kde ej, j = 1,2,..., n, je j—tý sloupec jednotkové matice řádu m, takže AP = HiH2 • • • Hn(ei, e2,..., en)Rx = QiRi, a že přitom HiH2 • • • Hnefc = HiH2 • • • Hkek , k = 1,2,...,n. K výpočtu qfc podle řádku 10 potřebujeme mít k dispozici vektory "Wj[j:m], j = 1,2,... ,k. K úschově Wj[j+i:m] lze využít poddiagonální pozice matice A, v nichž by jinak byly nuly, Wj{j:j] je třeba uložit zvlášť. 68 Pokud QR algoritmus používáme jen k nalezení MNČ řešení SLR, v algoritmu HQR změníme řádky 1,10 a 13, 1. d := b, p := (1, 2,..., n)T, p := min(m, n), r := p 10. d\k, [k:m] '[fc:m] VI 1 P2 1 ■ ■ ■ 1 ^Pn i 13. Ri := A[1:J.)1:n], dx := d[1;r], P := (e, a MNČ řešení soustavy Ax = b dostaneme jako klasické řešení soustavy RiPTx = di, viz kapitola 3.2. Závěr. Householderův QR algoritmus je považován mezi QR algoritmy za nejlepší. Používá ho také funkce qr v MATLABu. Pro speciální typy matic však může být některý z dalších známých Q R algoritmů efektivnější. 3.4.2. Givensův QR algoritmus Všimněte si, že matice G c -s je ortonormální, když c2 + s2 = 1. Tato matice se nazývá matice rovinné rotace, protože čísla c a s jsou kosinus a sinus nějakého úhlu, o který se vektor x rovinně otočí, jestliže ho maticí G vynásobíme. Buď x = (x1,x2)T ý o. Jestliže položíme c = rri/||x||, s = x2/||x||, splňují čísla c a s potřebnou rovnost a platí Gx *i/H +z|/||x| -XiX2/||x|| + XXX2I |x| 0 Právě v tom je smysl použití matice rovinné rotace, totiž anulovat druhou složku vektoru. Buď ax první sloupec matice A. Chceme nejdříve vynulovat jeho druhý prvek čili prvek a2± matice. Je-li již a2i = 0, neprovádíme nic. V opačném případě pro d = ^/i položíme ni 21 G 21 / au/d a2i/d 0 -a21/d alľ/d 0 0 0 1 V o o o o\ o o o a provedeme součin G2iA. Protože G2iai je vektor, jehož druhá složka je nulová, anulovali jsme prvek a2\. Jako další budeme anulovat třetí prvek prvního sloupce matice G2iA. Její prvky označíme zase jen a^, abychom nekomplikovali označení. Je-li a31 ý 0? položíme nyní 69 d = a/a\x + a zavedeme další ortonormální matici G 31 / a\\jd 0 asi/d 0 0 10 0 -a3i/d 0 au/d 0 0 0 0 1 V 0 o o o o\ o o o o Po vynásobení touto maticí bude v poloze (3,1) nulový prvek, a jak snadno zjistíme, v předchozím kroku anulovaný prvek v poloze (2,1) zůstane nulový. Tak pokračujeme, až vynulujeme všechny prvky prvního sloupce. Podobně anulujeme prvky pod diagonálou v dalších sloupcích, obecně prvek ý 0 anulujeme vynásobením maticí Gik, kterou dostaneme z jednotkové matice I řádu m takto: Gik ■= I, pak v Gik = {9je}Te=i změníme 9kk ■ Qfcj 9kí ■ Síkj 9ík ■ Síkj 9í'í ■ Qfcj přičemž = akk/d, Sik = dikjd a d = \/alk + aľfc- Důležité je, že jednou anulované pozice zůstávají nulové. Pokud = 0, klademe Gik = I- Matice Gik Jsou známé jako Gívensovy matice rovinných rotací. Označíme-li Gk GmkGm—i u ■ ■ ■ G k+l,ki k = 1, 2,..., q = min (m — 1, n) můžeme psát GgGq-i ... Gi A — R . Přitom R je horní trojúhelníková matice a G = GqGq-i... Gi je matice ortonormální. Označíme-li Q = GT, pak z rovnosti GA = R plyne A = GTR = QR. Pivotování. Při anulování prvků fc-tého sloupce je vhodné provádět pivotování: zvýšíme tím odolnost QR algoritmu vůči zaokrouhlovacím chybám a zajistíme, aby ^ 0 pro k = 1,2,... ,r, kde r = h(A) je hodnost matice A. K dosažení tohoto cíle použijeme sloupcové pivotování. Postupujeme analogicky jako při pivotování v Householderově metodě, viz (3.19), (3.20). Závěr. Givensův QR algoritmus je výhodný v případě, když matice A má pod hlavní diagonálou málo nenulových prvků v předem známých pozicích (i,j) a neprovádí se pivotování. Pak totiž stačí použít jen „cílené" Givensovy rotace Gíj. Je-li však A plná matice, dáme přednost Householderově QR metodě. 3.4.3. Gramův-Schmidtův QR algoritmus Nechť a1; a2,..., an jsou lineárně nezávislé vektory. Naším cílem je setrojit ortonormální vektory qi, q2,..., qn tak, aby span(qi, q2,..., qn) = span(ai, a2,..., an). qi dostaneme normalizací ai, tj. qi = ai/||ai||. Předpokládejme, že jsme už sestrojili ortonormální 70 vektory qi, q2,..., q^-i s vlastností span(qi, q2,..., qfc-i) = span(ai, a2,..., afc_i). Nejdříve najdeme vektor q = ak — X^=i rjkp> často hledá ve tvaru polynomu. Obecně, íp(x) se používá k řešení úloh, v nichž vystupuje funkce /, kterou je účelné nebo dokonce nezbytné nahradit její vhodnou aproximací p> je algebraický polynom (kapitola 4.1.1), po částech algebraický polynom nebo-li splajn (kapitola 4.1.2) a trigonometrický polynom (kapitola 4.1.3). V kapitole 4.1.4 se pak stručně zmíníme o interpolaci funkcí více proměnných. 4.1.1. Polynomická interpolace Předpokládejme, že jsou dány navzájem různé body *^0; • • • ; xn ; %í ~f~ prO % 7^ J , říkáme jim také uzly interpolace, a v každém z nich je předepsána hodnota yi. Hledáme interpolační polynom Pn(x) stupně nejvýše n, který splňuje interpolační podmínky % = 0,1,...,n. Jestliže pak lze koeficienty a^, i 0,1,... ,n, získat řešením SLR Va = y (4.3) 72 kde (1 x0 ry>2 x0 (ao\ (yo\ 1 X\ d\ yi V = 1 x2 ,> < 2 J/2 • x2 , a = a2 , y = V xn ,y 2 ■ <) \an ) \ynj Matice V je známa jako Vandermondova matice. Vandermodův determinant detV n < 0 i = 0,l,...,n. i=o YKxi-Xj) j=0 Lagrangeův interpolační polynom (4.4) proto můžeme zapsat ve tvaru n Pn(x) = un+1(x) V" y,t-—. (4.7) i=0 Protože interpolační polynom Pn interpoluje funkci f(x) = 1 přesně, platí n l = un+1(x)Y^^^. (4.8) i=0 X Xi 74 Dělíme-li (4.7) výrazem (4.8), člen u)n+i(x) se zkrátí a dostaneme bary centrickou interpolační formuli Wi Pn(x) i=0 x X{ Ví Ľ i/C J i/C ^ 0,1,... ,71. (4.9) =0 x Xi Výpočet číselných koeficientů wi: i = 0,1,..., n, vyžaduje 0(n2) operací. Výpočet Pn(x) provedeme pomocí 0(n) operací. Přidání dalšího uzlu xn+i znamená přepočítání koeficientů Wi, i = 0,1,..., n, což si vyžádá pouhých 0(n) operací. Newtonův tvar interpolačního polynomu. Pn(x) = clq + di(x — Xq) + a2{x — Xq)(x — Xi) + ■ ■ ■ + an(x — Xq)(x — Xi) ■ ■ ■ (x — xn_i). (4.10) Přidání dalšího uzlu xn+i je snadné, k Pn(x) stačí přičíst jeden další člen, neboť Pn+l(x) = Pn(x) + an+l(x ~ xo)(x ~ xl) ' ' ' (x ~ xn) ■ Hodnotu z = Pn(x) spočteme zobecněným Homérovým schématem: z := an a pak pro i = n — l,n — 2,...,0 počítej z := z(x — x i) + a«. (4-H) Koeficienty a,i lze vypočítat přímo z interpolačních podmínek (4.1). Příslušná SLR Ka = y má dolní trojúhelníkovou matici soustavy, /l 0 0 1 x\ — xq 0 1 x2 - x0 (x2 - x0)(x2 - Xi) K 0 0 0 x0 (xn - x0)(xn - Xi) o [j=0 (Xn X, takže a získáme pomocí 0(n2) operací. Koeficienty Newtonova interpolačního polynomu lze efektivně spočítat pomocí tzv. poměrných diferencí. Poměrné diference. Začneme tím, že z bodů {(xí,í/j)}™=0 vybereme libovolných k + 1 navzájem různých bodů {(x^:, yij)}j=q, 0 < k < n, a zkonstruujeme interpolační polynom Pi0i1...ik stupně k splňující interpolační podmínky Pi Í0«i...ífe (xíj) = Ví j = 0,l,...,fc. Polynom -Pj^...^ lze určit rekurzí Pí0(x) = Vioi (x — Xi0)Pi1-^ik(x) — (x — Xik)Pi0i1„jk_1(x) Pi, Í0«l...ífe (x) (4.12) (4.13a) (4.13b) 75 Skutečně, snadno ověříme, že Pi0i1...ik splňuje podmínky (4.12). Všimněte si, že oba polynomy Pioi1...ik_1 a Pioi1...ik_1ik mají kořeny xio, xh, ..., xik_x. Proto existuje jednoznačně definovaný koeficient aioil^ik takový, že Pi0i1...ik(x) = Pí0íi...ík-i(x) aíoh—ík(x ~ xío)(x ~ xh) ■ ■ ■ (x ~ xík-i)- (4-14) Označíme-li aio = Pio(x), dostaneme fíoíi...ífe (^O ^«0 Oíqíi x,i0) -|- • • • -|- &ioi1...ik {x x,i0) {x x,[1)... {x x,ik_1). (4.15) Srovnáním koeficientů u xk na levé a pravé straně výrazu (4.13b) obdržíme (4.16) x%k xíf) Koeficient aj,,^...^ je znám jako poměrná diference. Při obvyklém značení P [Xío 1X'Í\1 ■ ■ ■ 1 X'ik\ Qji0i1 _ik tak dostaneme rekurenci „r n _ P[XÍ1 1 XÍ2 Xík\ P\XÍQ1 Xil Xik-l\ (^•l''7) r [Xi0, Xi1, . . . , Xik \ . Xik ~ XÍ0 Jestliže v (4.15) zvolíme k = n, ij = j, j = 0,1,..., n, dostaneme pro Pn = Poi...n vyjádření Pn(x) = P[xo]+P[xo,Xi](x-x0)H-----\-PIxqjXx, ... ,xn](x-x0)(x-x1) ... (x-Xn-x), (4.18) známé jako Newtonův tvar interpolačního polynomu. Přitom P[xí] = yh (4.19) P[xi-k, Xi-k+1,Xí-^Xí] = p{x%-k+1> • • •'p[x*-k, xt-i] ^ (4.20) Označíme-li Pik = P[x^k, x^k+1, ...,Xi], pak Pn(x) = a0 + a>i(x — x0) + • • • + an(x — x0)(x — x{).. .(x — rcn_i), (4-21) kde a,i = Pu, i = 0,1,..., n. Tyto koeficienty počítáme rekurzí Pio = Ví, "I P 0 pro n —> oo (n + 1)! ' " ^ (n + l)\ takže Pn(x) —> f(x) pro každé x z libovolného konečného intervalu (a,b). □ 3) Jestliže interpolační polynom používáme k výpočtu hodnot interpolované funkce vně intervalu (xo,xn), říkáme, že provádíme extrapolací. V tomto případě může být chyba aproximace velká, neboť hodnota |wn+1(x)| rychle roste, když se x vzdaluje od x0 doleva nebo od xn doprava. 4) ujn+i(x) může nabývat velkých hodnot také uvnitř intervalu (xo,xn), zejména když jsou uzly Xi rozmístěny rovnoměrně, tj. když x,i = x0 + ih, kde h je pevně zvolený krok. Na obr. 4.1 vidíme, že ve středu intervalu (x0,xn) nabývá |wn+1(x)| nejmenších hodnot, v blízkosti středů krajních intervalů, zejména intervalů (xq,Xi) a (xn_i,xn), je však hodnota |wn+i(x)| značná. Toto chování polynomu ojn+i(x) se promítne i do průběhu interpolantu Pn(x). Příklad 4.4. Sestrojíme interpolační polynom Rungeovy funkce 1 25x2 79 2 1.5 0.5 0 ---P10(x) -1/(1+25x2) t 1 J i 1 ' ,\ | 1 ' l' \ 1 Obr. 4.2: Interpolační polynom Rungeovy funkce na rovnoměrném dělení intervalu (—1,1). Jde o známý příklad, na kterém se demonstruje, že pro rostoucí počet dílků chyba interpolace neomezeně roste. □ Proto používáni interpolačních polynomů vysokých stupňů obecně nelze doporučit. Vhodnou volbou interpolačních uzlů však můžeme chybu interpolace zmenšit. Na intervalu (a, b) je optimální zvolit a + b b — a xi = 2 ' 2 * = U, 1,..., tí,, kde tzv. Cebyševovy uzly 2i + l t,; = COS -7T, i = 0, 1, . . . , U, ^ 2n + 2 ' ' ' ' ' jsou kořeny Cebyševova polynomu Tn+i(£) = cos((n + 1) arccos£). Pomocí trigonometrického vztahu a + a-/3 cos a + cos p = 2 cos-cos- ^ 2 2 dostaneme rekurentní předpis T0(0 = 1, Tx(0 = e, Tn+1(0 = 2eTn(0-Tn_1(0, n = l,2,... (4.28) 80 Odtud un+1(0 = nľ=o(^ - 6) = 2-nTn+1(0, takže max \ujn+1(x)\ < — 1 í b — a xe{a,b) 1 " v 71 - 2n V 2 takže podle (4.27) / m i b — a\n+1 Mn 11 (n + 1)!' Hermitova interpolace. Nechť xq,x\,... ,xn jsou navzájem různé body. V každém uzlu Xi je zadáno «j + 1 čísel í/f^, í/^, ..., í/f*17. Označme a = n + Eľ=o a«- ^>a^; Hermítovým interpolačním polynomem nazveme polynom stupně nejvýše a, který splňuje interpolační podmínky -^j Pa(xt) = y(%]) , j = 0,l,...,ai, i = 0,l,...,n. (4.29) Nultou derivací přitom rozumíme funkční hodnotu a značíme yf^ = yi, i = 0,1,... ,n. Ukažme si, že existuje jediný Hermitův polynom splňující podmínky (4.29). Důkaz provedeme ve dvou krocích. (a) Jednoznačnost dokážeme sporem. Předpokládejme, že existují dva polynomy Pa a Qa splňující interpolační podmínky (4.29). Pak Fa = Pa — Qa je polynom stupně a, který má a + 1 kořenů. To je ale možné jedině tehdy, když Fa je identicky roven nule neboli když Pa = Qa. (b) Existence. Stačí ukázat, že matice soustavy rovnic (4.29) je regulární. Důkaz provedeme sporem. Kdyby matice soustavy (4.29) regulární nebyla, pak bychom pro nulovou pravou stranu soustavy (4.29) dostali nekonečně mnoho různých řešení, což je spor s jednoznačností. □ Jestliže y(/} = ^--f(xt), j = 0,l,...,ai, t = 0,l,...,n, (4.30) říkáme, že Pa(x) je Hermitův interpolační polynom funkce f(x). Nechť x je libovolný bod, I[x0,... ,xn,x] je nejmenší interval obsahující uzly interpolace a nechť / G Cn+1(a,b), kde (a,b) D I[x0,... ,xn,x]. Pak pro chybu Hermitovy interpolace v bodě x platí f(x) - Pa{x) = ^—^-(x - xor°+\x - Xl)^+1 ...(x- xn)a-+1, (4.31) (a + 1)! kde £ = £(řř) je nějaký bod z intervalu I[xq, ..., xn, x]. Důkaz lze provést stejně jako pro Lagrangeovu interpolaci, viz důkaz (4.23). Hermitův interpolační polynom Pa(x) = Y^k=oakxk ^ze m^ řešením soustavy a + 1 rovnic (4.29) pro neznámé koeficienty {ak}k=o- 81 Příklad 4.5. Sestrojíme Hermitův interpolační polynom pro data podle tabulky —^—-V±^Í- Tedy x0 = -1, a0 = 2, y® = 2, = -4, y™ = 12, -1 2 -4 12 li (o) o í1) a x1 = 1, ax = l,y\> =2,y\> = 4. 1 2 4 Protože je předepsáno celkem 5 podmínek, Hermitův polynom navrhneme jako polynom stupně a = 4. Abychom si ušetřili práci, zapíšeme ho ve tvaru mocninného rozvoje okolo toho bodu, v němž je předepsán největší počet podmínek, v našem případě tedy okolo xq = —1. Pak P4(x) = a + b(x + 1) + c(x + l)2 + d(x + l)3 + e(x + l)4 . Koeficienty a, b, c získáme snadno. Z podmínky P4(—1) = 2 okamžitě dostaneme a = 2. Podobně z podmínky P'A{—1) = —4 obdržíme 6 = —4, a protože P'l(—1) = 2c, z podmínky P'a{—1) = 12 dostaneme c = 6. Dále P4(l) = 2-4-2 + 6-22 + d-23 + e-24 = 2 =>■ 8d+16e = -16, P^(l) = -4 + 2-6-2 + 3-d-22+4-e-23 =4 =>■ 12d + 32e = -16. Tuto soustavu vyřešíme a dostaneme d = —4, e = 1. Tedy P4(rr) = 2 - 4(> + 1) + 6(x + l)2 - ±(x + l)3 + (x + l)4 = x4 - 1. □ Další možností je vyjádření Hermitova interpolačního polynomu pomocí zobecněných poměrných diferencí. Newtonův tvar Hermitova interpolačního polynomu. Pomocí uzlů xq,xi,. .. ,xn a odpovídajících hodnot fo = f(xo), f\ = f(xi),..., fn = f(xn), definujeme posloupnost bodů [X0, P0], [Xu Pí], ..., [Xa, Fa] takto: ([-^o, F0], [Xi, Pi],..., [Xa, Fa]) : = ([x0, fo],..., [x0, fo], [xu /i], . . . , [xu h], . . . , [xn, fn}..., [xn, /„]). v-v-' v-v-' v-v-' (ao+l)-krát (ai + l)-krát (an+l)-krát Jestliže /3q = 0, fy = fy-± + (cti-i + 1), « = 1,2,... ,n, pak [Xfc,Pfc] = [rcjj/j] pro k = fy, fy + 1,..., fy + Oii, i = 0,l,...,n. Nechť Xk(t), k = 0,1,... ,a, jsou funkce definované a spojité na intervalu (0,1), splňující následující tři podmínky: (1) limí^0+ Xk(t) = Xk pro k = 0,1,..., a, (2) Xk(t)^Xe(t) pro ŕ G (0,1), k,l G {0,1,...,«}, k ^ l, (3) Xfc(ŕ) G I\xq,xx, ... ,xn] pro t G (0,1), A; = 0,1,..., a. 82 Funkce Xk(t), k = O,1,..., a, lze zvolit třeba takto: h ■ Xf}i+j(t) = Xi + s{i) kde s(i) 2(a,t + 1) 1 pro 2 = 0,1,... ,n — 1 jt, j = 0,1,... ,ah i = 0,l,...,n, h ■ i lbmin min{xr — xs | 0 < r, s < n, xr > xs}. -1 pro i = n. Jestliže Fk{t) = f(Xk(t)), t E (0,1), k = 0,1,..., a, pak ^jfe(t), ^lfe(í)] -> [Xk, Fk] pro ŕ ^ 0+, fc = 0,1,..., a. Body {[Xk(t), Fk(t)]}k=Q, t G (0,1), určují interpolační polynom Pa(x,t) = ä0 + - X0) +----h - X0) (x - X x).. .(x - Xa_i), kde äfc = /[Xq, X\,..., Xk], k = 0,1,...,«. Naším cílem je určit Hermitův polynom Pa{x) = limí_>o+ Pa(x,t). Musíme proto zjistit, čemu se rovná zobecněná poměrná diference f[Xk-8,...,Xk]= lim f[Xk-8(t),...,Xk(t)]. Zřejmě /[X^] = Fk, k = 0,1,..., a. Jestliže Xk ^ Xk-S, pak f[Xk-s+i,..., Xk] — f[Xk-s,..., Xfc-i] f[Xk-s, Xk_s+i,..., xk xk — xk_s a když Xk-S = Xk = Xi, pak zobecněná poměrná diference f(s)(x,t) f [Xk—Sj ■ ■ ■ , Xk] f \xí , x{,..., Xj] (s+l)-krát jak plyne z (4.26). Označíme-li Pks = f[Xk-s,... ,Xk], pak ak = Pkk. Shrnutí. Newtonův tvar Hermitova interpolačního polynomu Pa(x) = a0 + ai{x - XQ) H-----h aa(x - X0)(x - Xi) ... (x - Xa-i) kde ak = Pkk, k = 0,1,... ,a. Poměrné diference Pks počítáme rekurencí PkO = Fk, ÍPk,s-l — Pk-l,s-l Xk — Xk_s pro Xk_s = Xk = x. (4.32) pro Xk_s Ý Xk s — 1,2,... ,k, > k = 0,1,..., a. Označíme-li y^ = f(xi), y^ = f^(xi), s = 0,1,..., i = 0,1,..., n, pak P^k vypočteme následujícím algoritmem: Algoritmus výpočtu zobecněných poměrných diferencí k := 0 for i := 0,1, ...,n do for j := 0, l,...,ai do X], := Xi Pko ■= y t for s := 1,2,...,k do ií Xk s Ý Xk Pks '■ = (Pk,s-1 — Pk else Pks '■ = yiŕ/s\ end end s k := k + i end j end i. ^k—s) Zdůrazněme, že (navzájem různé) uzly {xj}™=0 nemusejí být vzestupně uspořádané. Příklad 4.6. Sestrojíme Hermitův interpolační polynom pro data z příkladu 4.5. Průběh výpočtu zaznamenáváme do tabulky. Dostaneme PkO Pkl Pk2 Pk3 Pk4 -1 2 -1 2 -4 -1 2 -4 6 1 2 0 2 -2 1 2 4 2 0 1 2 - 4( x + 1) + 6(x + 1 )2 -2(x + l a0 <34 2, -4, 6, -2, 1, 4.1.2. Interpolační splajny Jestliže chceme interpolovat funkci f(x) na poměrně dlouhém intervalu (a,b), musíme žádat splnění interpolačních podmínek v dostatečně velkém počtu bodů. Pokud bude interpolantem polynom, musí být vysokého stupně a to, jak víme, obvykle vede k velkým chybám mezi uzly. Tudy proto cesta nevede. Lepší je rozdělit interval (a, b) 84 na řadu menších subintervalů a na každém z nich sestrojit interpolační polynom nižšího stupně. Nechť A := {a = xQ < xi < ■ ■ ■ < x^i < Xi < xi+1 < ■ ■ ■ < xn_i < xn = b} (4.33) je dělení intervalu (a,b). Body {xj}™=0 se nazývají uzly splajnu, anglický termín pro uzel splajnu je knot. Polynomickým splajnem S na dělení A rozumíme funkci, která je každém intervalu (xí-i,Xí), i = 1,2,... ,n, totožná s nějakým polynomem Si. Lokální splajny se vyznačují tím, že polynom Si je jednoznačně určen daty předepsanými na intervalu (xí-i,Xí). Na lokálním dělení A, := = a < £ < • • • < CH = *i} (4-34) lze Si definovat jako Lagrangeův interpolační polynom stupně rti určený podmínkami Si(Šk) = Vki k = 0,1,..., rii, nebo jako Hermitův interpolační polynom stupně on určený podmínkami s?\Ú) = [yÍ]u\ j = 0,l,...,al, k = 0,l,...,ni, kde cti = tíí + SfcLo ak- Přitom [y\]^ = y\ jsou předepsané hodnoty v uzlech a j > 1, jsou předepsané j-té derivace v uzlech £jL Uvažme případ rii = 1. Pak Lagrangeův interpolační polynom je lineární polynom Si(x) = yi+ V% _ V%~X (x - Xi-x). Xi Xi—i Odpovídající splajn S je znám jako lineární splajn. Graficky jde o čáru spojující spojující dva sousední body a [xi,yi] úsečkou. Nechť hi = Xi — Xi_i, i = 1,2,... ,n, a h = max hi. (4.35) l (4-38) kde x — Xi-i a Si = ——^_L# (4.39) 3^ Xi—i Pro chybu kubického Hermitova splajnu podle (4.37) platí \f(x)-S(x)\ IR s následujícími dvěma vlastnostmi: (a) S G Cp~ľ(a, b) je spojitá spolu se svými derivacemi až do řádu p — 1 včetně; (b) S* je na intervalu ( i), i = 1,2,... ,n, totožná s polynomem Si stupně p. Množina SA splajnů stupně p na dělení A je lineární prostor: jestliže S±,S2 G SA a «1, «2 G M, pak a±Si + «25*2 G SA. Polynomy {Si}™=1 jsou určeny pomocí n(p+l) koeficientů. Tyto koeficienty však nemohou nabývat libovolných hodnot, v úvahu je třeba vzít podmínky spojitosti ve vnitřních uzlech: SÍJ)1(xi) = S^(xi), j = 0,l,...,p-l, i = l,2,...,n-l. (4.41) Prostor SPA má tedy dimenzi ďA = n(p + 1) — p(n — 1) = n + p. K určení splajnu S G SA je třeba předepsat n + p podmínek. Obvykle se volí S{xi) = yh i = 0,1,..., n, (4.42) kde {í/j}™=0 jsou předepsané hodnoty v uzlech {xí}^=0. Zbývá předepsat dalších p — 1 podmínek. Je-li p = 2m— 1 liché, pak p—l = 2(m — 1), což umožňuje v každém z krajních uzlů a, b předepsat m — 1 okrajových podmínek (v anglicky psané literatuře se používá termín end conditions). Typické okrajové podmínky pro splajny lichého stupně jsou: 86 (a) Hermítovy okrajové podmínky: S^(a) = ya\ S^(b) = y^\ j = 1,... ,m — 1, (b) přirozené okrajové podmínky: S^\a) = y£\ S^(b) = y^\ j = m,..., 2m — 2, (c) periodické okrajové podmínky: S^(a) = S^\b), j = 0,..., 2m — 2. V případě Hermitových a přirozených okrajových podmínek jsou yi^ resp. y^ předepsané hodnoty derivací v bodu a resp. b. Dá se ukázat, že podmínky (4.42) doplněné o okrajové podmínky (a) nebo (b) nebo (c) definují splajn S G lichého stupně p = 2m — 1 jednoznačně, viz [20]. Poznamenejme, že přirozené okrajové podmínky se tradičně uvažují - (i) (i) > > jako homogenní, tj. pro y a = yl = 0, j = m,..., 2m — 2. Nasleduje podrobný popis nejznámějšího kubického splajnu. Kubický splajn je funkce S G S\. Kubický polynom Si ve tvaru (4.38) splňuje podmínky Sí(xí) = Si+i(x,i) = y,i, Si(x,i) = Sí+i(xí) = d,i, i = 1, 2,..., n — 1. Ke splnění podmínek spojitosti (4.41) proto stačí požadovat, aby S'/(xí) = S':+l(xt), i = 1, 2,..., n - 1. (4.43) Derivováním (4.38) dostaneme Qll( , _ (Qht - 12s)ôj + (Qs - 4^)^-1 + (6s - 2ht)dt Pro x = Xi je s = hÍ7 takže Pro x = Xi-i je s = 0 a 6ó~i — 4 1 definujeme předpisem Blk = UikB^x + (1 - a;i+i,fe)-Bi+i,fe-i, (4-52) X - Xi když Xi Ý Xi+k-i, uik(x) = { ^i+k-i ~ xi (4.53) 0 jinak. Snadno ověříme, že Bik je po částech polynom stupně A; — 1 a že Bik = 0 pro x ^ (xÍ7 xi+k). Pro derivaci B'ik lze odvodit B'lk = atikBit-í - ai+ltkBi+hk-i, (4.54) kde ( k - 1 - když Xi+fc-i, aifc = 2, x E (xí,xí+i) 2. vynuluj matici B = {%} typu (r + l,r) 3. 6rl := 1 4. for /í: := 2,... ,r do 5. for j := r — k + 1,..., r do 6. fejfc := u)jk(x)bjM-i + (1 - ^•+i,fc(^))6j+i)fc-i 7. end 8. end Pak Bjr(x) = bj+r-i,r, j = i — r + 1,...,i, najdeme v posledním sloupci matice B. 90 Obrázek 4.3 zobrazuje B-splajny řádu 4 na dělení A := {0 = 0 = 0 = 0 < 0,2 < 0,4 < 0,6 < 0,8 < 1 = 1 = 1 = 1}. Obr. 4.3: B-splajny {Bi4}f=_3 Pro vyjádření okrajových podmínek potřebujeme derivace splajnu. Zřejmě [Sf+1](%) = f! a3+TB^(x) = J2al+JB^T+j,r{x)- (4-58) xe{xi,xi+1) . —' . j=í—r+l j=l Algoritmus BSPLd pro výpočet derivací B-splajnů {B^f (x)Yj=i_r+1 pro x E (xí,xí+i). 1. zvol r > 2, 0 < q < r — 1, x E (xí, xi+1) 2. vynuluj matici B = {%} typu (r + l,r) 3. bri := 1 4. for k := 2,... ,r do 5. for j := r —/c + 1,..., r do 6. if k < r — q 7. bjk := Ujk{x)bjjk-i + (1 - ujj+1:k(x))bj+1:k-i 8. else 9. bjk := ctjkbj^k-i — aj+i,kbj+i,k-i 10. end 11. end 12. end Pak Bjf(x) = bj+r_itr, j = i — r + 1,..., i, najdeme v posledním sloupci matice B. Kardinální B-spajny jsou B-splajny na rovnoměrném dělení s uzly Xí = ih, kde h je konstantní délka kroku. Kardinální B-spajny jsou tvarově stejné, navzájem posunuté. Platí Bí-Sir(x) = Bír(x + sh) nebo-li B{r(x) = Bi-S^r(x — sh). 91 Z (4.57) pomocí transformace x = Xi + £h, £ G (0,1), obdržíme r r Spi+i{xi + £,h) = ^2ai+jBi-r+j.r{xi + ^h) = ^ai+jBj-r^{xi + ^ - i/i) = r r ^ai+j5j_r)J.(^) = ^di+jBj-r^), (4.59) kde Bsr(t) = Bsr(th) je kardinální B-splajn řádu r příslušný uzlu s na rovnoměrném dělení s krokem délky jedna. Označíme-li <^(£) = Bj_rjJ.(£), j = 1, 2,..., r, pak Sľ+iO*) = X^+^i ( .7=1 ^ x G (xí,xí+1). (4.60) Algoritmus BSPLc pro výpočet kardinálních B-splajnů {<^(£)}5=i Pro £ ^ (0> !)• 1. zvol r > 2, £ G (0,1) 2. vynuluj matici B = {b^} typu (r + l,r) 3. 6ri := 1 4. for A; := 2,..., r do 5. for j := r — k + 1,..., r do 6. 6,-fc := [((r + £) - i)Ďi>fc_i + (j + fc - (r + £)) W-i]/(fc - 1) 7. end 8. end Pak 0*j(£) = bjr, j = 1,..., r, najdeme v posledním sloupci matice B. Kardinální B-spajny stupňů 1, 2 a 3 jsou uvedeny v tabulce 4.1. p = 1 p = 2 p = 3 "P la-o2 la-o3 "P V?2 I(_2^ + 2^ + i) ±(3£3- 6£2 + 4) "P V?2 2^ ±(-3£3 + 3£2 + 3£ + l) "P 6^ Tab. 4.1: Kardinální B-splajny Koeficienty {(2j}"=f dostaneme řešením soustavy n+p lineárních rovnic: n + 1 rovnic (4.42) doplníme p — 1 rovnicemi pro okrajové podmínky. Matice soustavy je pásová, v každém řádku je nejvýše p nenulových koeficientů. Pro často používané dělení A := {x_p = x_p+i = ■ ■ ■ = a = Xq < Xi ■ ■ ■ < xn = b = xn+i = ■ ■ ■ = xn+p}, (4.61) lichý stupeň splajnu p = 2m — 1 a řazení rovnic pro 92 Hermitovy okraj ové podmínky přirozené okraj ové podmínky S(x0) = ž/o, S(x0) = ž/o, S^(x0) = yíí\ j = 1 : m — 1, ^)(^o)=ž/?), j = m : 2m — 2, S(xí) = yt, i = 1 : n — 1, •s^i) =í/í, i = 1 : n - 1, j = m — 1 : — 1 : 1, S®(xn) = y$!\ j = 2m — 2 : — 1 : m, S (x n) = yn, S (x n) = í/n, je matice soustavy p-diagonální. Tak třeba pro rovnoměrné dělení (4.61) s krokem délky h a Hermitovy okrajové podmínky dostaneme matici soustavy (6 — a)/n, pro p ( 1 0 -3/h 3/h 0 1/4 7/12 1/6 1/6 2/3 1/6 \ 1/6 2/3 1/6 1/6 7/12 1/4 0 -3/h 3/h 0 1 4.1.3. Trigonometrická interpolace je vhodná pro interpolaci periodických funkcí. Řekneme, že funkce / je periodická s periodou T, jestliže f(t + T) = f(t) pro každé t. Frekvence v = l/T a úhlová frekvence uj = 2-k/T. Tak třeba funkce sin27rA;r má periodu T = l/k, frekvenci v = k a úhlovou frekvenci uj = 2irk. Jestliže t je čas měřený v sekundách, pak frekvence určuje počet period obsažených v jedné sekundě nebo-li počet cyklů za jednu sekundu. Jednotkou frekvence je Hertz, značíme Hz, v základních jednotkách Hz=s_1. Představme si, že jednomu cyklu odpovídá úhel 2%, který opíšeme při jedné otáčce po jednotkové kružnici. Úhlová frekvence je pak úhel, který opíšeme za v cyklů, jednotkou úhlové frekvence je počet radiánu za sekundu, značíme radš-1. Trigonometrický interpolační polynom. K interpolaci periodické funkce s periodou T použijeme trigonometrický interpolační polynom Pnit) + {a,h cos uht + bh sin tohť) h=l m—l pro n = < ^ v , 7 • t \ ^m --h \ah cos uht + bh sin unt) H--cos umt 2m + 1, 2m, h=l (4.62) 93 s koeficienty ah, bh zvolenými tak, aby byly splněny interpolační podmínky Pn(tk) = fk, k = 0,1,...,n- 1, (4.63) kde t k jsou uzly dělení, 0 < to < h < ■ ■ ■ < tn-l < T, a f k = f(tk), k = 0,1,..., n — 1. Pro n liché je trigonometrický interpolační polynom určen jednoznačně, viz [20]. Pro sudé n je jednoznačná existence zaručena, právě když S := Yľk=o ^k není celočíselným násobkem T, viz [47]. Dosadíme-li do (4.63) za P výraz (4.62), dostaneme soustavu n lineárních rovnic pro neznámé koeficienty a^, b^. Řešení takové soustavy vyžaduje 0(n3) operací. Trigonometrický interpolační polynom (4.62) lze také vyjádřit ve tvaru n—1 Pn(t) = J2fMt), (4.64) h=0 kde £h jsou trigonometrické fundamentální polynomy, Z-^ sm±L)(t-tk) k={t^h smiu(th-tk) sm^u(S + t — th) tt sin|w(r — tk) J-J- sm\bj(th-tk) pro n sin ^ojS k=0,k=íh 2m + 1 liché, 2m sudé, (4.65) viz [47]. Vzorec (4.65) je sice elegantní, pro praktické použití však příliš vhodný není: výpočet hodnoty Pn(t) podle (4.64)-(4.65) potřebuje 0(n2) operací pro každé t. Fázový interpolační polynom. Pro efektivní výpočet koeficientů trigonometrického polynomu (4.62) je účelné zvolit rovnoměrné dělení T k, k = 0,1,..., n — 1. n (4.66) Na rovnoměrném dělení (4.66) je trigonometrický interpolační polynom jednoznačně určen. Skutečně, S Ť T ■y n-1 y n-l rp - S^tk = - V —k n(n n k=0 T í—' n k=0 2n takže pro n sudé S není celočíselným násobkem T. Je-li / v intervalu (0,T) lipschitzovsky spojitá3, pak Pn(t) —> f(t) pro n —> oo, t E (0,T), viz [8]. 3 Funkce /(i) je v intervalu (0,T) lipschitzovsky spojitá, jestliže existuje konstanta L taková, že |/(a:)-/(2/)|. 94 Koeficienty trigonometrického interpolačního polynomu Pn získáme prostřednictvím fázového interpolačního polynomu n—l n—l Pnit) = c0 + cxelwt + c2e2iwt + ■■■ + cn^e = (n—l)iu)t ChZ' (4.67) h=0 h=0 kde i = \f—\ je komplexní jednotka, uj = 2n/T, etujht = cosuht + iúnuht je periodická funkce s periodou = T/h a frekvencí = h/T, z = éiwt. Komplexní koeficienty {c^j^J určíme z interpolačních podmínek Pn(tk) = fk, k = 0,1,... ,n - 1. Označíme-li _ ^íu>hto e'íu>hti e'íu>htn-i^T _ ^ ^2-KÍh/n ^2-KÍ(n-\)h/'n^T /i = 0 1 pak lze interpolační podmínky (4.68) zapsat maticově ve tvaru n—l (4.6É n—l, f = = Vnc, (4.69) ft=0 kde (\ 1 ^ e2m/n n—l y 1 \ g27rj (n—l)/n (4.70) y-j^ g27rj(n—l)/n g27rj(n—l)2/n ^ je symetrická Vandermontova matice, c = (c0, c1;..., cn_i)T a f = (f0, f\,..., f, Odtud n—l y c = V"1 f = -F f vn 1 í n11 n (4.71) kde (\ 1 1 \ g—27TJ (n—l)/n \1 e -2-ľrí (n—l)/n -27Tí(n-l)2/n (4.72) Důkaz. Ukážeme, že VnFn = nl^, kde I„ je jednotková matice řádu n. n—l n—l n—l e2mrj/ne-2TTÍjs/n _ e2mj(r-s)/n _ i=0 i=0 kde grs = e27r^r s^n. Pro r = s je qrr = 1, takže [VnFn]rr = n. Pro r ^ s dostaneme [VnFn]rs = [(& - l)/(qrs - l)]/n = 0, neboť q™s = e2™^ = 1. □ 95 Všimněte si, že ^—iu)(n—h)xk _ ^—2m(n—h)k/n _ —2irki 2irihk/n _ 2irihk/n _ iuihxk (4.73) Odtud a z (4.71) a (4.72) tak dostaneme c0 ^ n—1 ^ n—1 k=0 k=0 n—1 -ľ/fce!*, fc = l,2,...,n-l. (4.74) n ^—' fc=0 Pro /i = 1, 2,..., n — 1 jsou tedy koeficienty Ch a cn_^ komplexně sdružené, tj. cn_^ = c^. Koeficient c0 je reálný a pro n sudé je reálný také koeficient cn/2 = il/n) Sfc=o(—l)fc/fc- Výpočet hodnoty pn(t) lze provést pomocí Hornerova schématu aplikovaného na polynom qn(z) = Y2=o chzh Pro z = e%UJt- Koeficienty trigonometrického interpolačního polynomu určíme z koeficientů fázového interpolačního polynomu. Pomocí (4.73) vyjádříme „íujhtu cos ujhti Diu)(n—h)tk sin uhti Diu)(n—h)tk 2i a dosadíme do rovnic pn(tk) = Pn(tk), k = 0,1,..., n — 1. Pro n = 2m + 1 po úpravě dostaneme m (co-|) ^o + E ah - ibh\ , f ah + ibh Ch---- ) i, o. ipn-i) je re- , m. (4.75) , m 2Cn přičemž opět platí (4.75). K určení koeficientů Ch, a tedy také ah,bh, jsme potřebovali 0(n2) operací. V dalším ukážeme, že tento počet lze snížit na O(nlogn) operací. Rychlá Fourierova transformace, stručně FFT (podle anglického Fast Fourier Transform) je algoritmus, který umožňuje efektivní výpočet diskrétní Fouriervvy transformace, stručně DFT (podle anglického Discrete Fourier Transform). DFT transformuje posloupnost čísel {í/fc}fc=o na posloupnost {Yfcj^g předpisem n—1 n—1 Wn V V k = 0,1,..., n — 1. j=0 j=0 96 kde wn = e 2mln. Odpovídající maticový zápis je Y = Fny, kde y = (y0, Vl,..., yn^)T, Y = (Y0, Y1,. . ., Yn^)T a Fn = { 0, (4.77) v MATLABu viz funkce sign. V praktických aplikacích se často vyhledává tzv. dominantní frekvence Vd = hd/T příslušná maximální amplitudě Ad = max0 m je popsán v [55]. 4.1.4. Interpolace funkcí více proměnných Omezíme se na případ, kdy / je funkce dvou proměnných definovaná v oblasti íl. Interpolace po částech lineární. Předpokládejme, že Q je mnohoúhelník. Oblast Q triangulujeme, tj. vyjádříme ji jako sjednocení trojúhelníků T1}T2,... ,Tm, z nichž každé dva různé buďto nemají žádný společný bod nebo mají společný vrchol popřípadě mají společnou stranu. Množinu T = {T^}^ všech takových trojúhelníků nazýváme triangulací oblasti íl. Vrcholy trojúhelníků triangulace označíme P\ = [xi,yi], P2 = [x2,y2], ..., Pn = [xn,yn] a nazveme je uzly triangulace. Předpokládejme, že v každém uzlu Pí je předepsána hodnota f] = f(xi,y,i) interpolované funkce /. Po částech lineárním interpolantem funkce f na oblasti Q rozumíme funkci S, která je v Q spojitá, splňuje interpolační podmínky S(xi,yi) = f i, i = 1, 2,..., n, a která je na 101 každém trojúhelníku Tk G T lineární. Na Tk je tedy z = S(x,y) = Sk(x,y) rovnice roviny určené hodnotami funkce / ve vrcholech Tk. Připomeňme, že rovnice roviny procházející body [xa,ya,za], [xb,yb,zb] a [xc,yc,zc] může být vyjádřena ve tvaru x xa y ya z za Xb Xa i/5 ya Zfj za %c %a Ve y a Zc Za Vypočítat hodnotu z = S(x, y) pro (x, y) G íl je snadné: určíme trojúhelník Tk, v němž bod [x,y] leží, a vypočteme z = Sk(x,y). Chyba interpolace je tím menší, čím jemnější triangulaci zvolíme. Když / G C2(Q) (tj. když / je v Q spojitá spolu se svými prvními a druhými parciálními derivacemi), pak \f(x,y)-S(x,y)\íj{x,y) — jí-ij-i---h yj Vj—i xi %í—i yj Vj—i Xj-x y - x - Xj-x y - yj-! ~T~ Jí — l,j ~T~ Jíj Xi—i yj yj—i xi Xi—\ yj yj—i Funkce Sij je bilineární, tj. pro pevné x = C je Síj(C, y) lineární funkce proměnné y a pro pevné y = D je Síj(x,D) lineární funkce proměnné x. Funkce je interpolant funkce / na obdélníku , tj. nabývá ve vrcholech yj-i], [xi,yj_i], [xí,yj] a [xi_i,yj\ stejných hodnot jako funkce /, jak se snadno přesvědčíme. Na Q definujeme funkci S předpisem S(x, y) = Síj(x, y) pro (x, y) G Rij, i = 1,2,... ,n, j = 1,2,... ,m. Protože S(xi,yj) = fy, i = 0,1,...,n, j = 0,1,...,m, řekneme, že S je po částech bilineární interpolant funkce / na obdélníku íl. Snadno ověříme, že S je v Q spojitá (stačí si uvědomit, že S^, a tedy také S, je na každé straně obdélníka lineární funkce jednoznačně určena pomocí hodnot funkce / v koncových bodech této strany). Když / G C2(Q), pak pro chybu interpolace platí odhad \S(x,y) — f(x,y)\ < C(h2 + k2), kde h = max (xi — Xi-i), k = max (yj — yj-i) l 0 a minimalizovat součet vážených čtverců reziduí m 12 -E--2 i=i lrlk«, = > Wirí -> mm- Je-li například chyba i-tého pozorování přibližně rovna e^, zvolíme Wi = l/e^. Normální soustava rovnic. Označme -F(x) = ||y — Ax||| = ||r|||. Řešení minimalizační úlohy (4.79) musí splňovat nutnou podmínku pro extrém: i) ľix) d2 7jz-J2[y*-J2avxn =0> k = 1,2 dxk dxk i=i \ ]=i Když provedeme naznačené derivování, dostaneme <9F(x) n. dxk i=i \ ]=i a odtud n / m \ m ^ í ^ aifcaý- j rr,- = ^2 aikVi > A; = 1, 2,..., n , j=i \i=i / j=i 104 což lze zapsat maticově jako ATAx = ATy. (4.80) Soustava lineárních rovnic (4.80) je známa jako normálni soustava rovnic. Když jsou sloupce matice A lineárně nezávislé, je matice G := ATA pozitivně definitní, takže řešení x* normální soustavy rovnic minimalizuje F(x) = ||r||| a je tedy řešením úlohy (4.79): |y — Ax*||2 = min ||y — Ax^ nebo-li x* = argmin||y — Ax xeif xeii Vyjádříme-li normální soustavu rovnic pomocí vektorů cpi, dostaneme f( 0, c libovolné. Aproximace Rn(t) je v případě a) algebraický polynom stupně N a v případě b) trigonometrický polynom stupně N. Když je m = n a matice A je regulární, pak x* = A_1y a r = o, tj. Rn{ti) = yi, i = 1,2,... ,m. Pokud jsou však naměřená data yi zatížena chybami, pak není účelné, aby funkce Rn(t) tyto chyby kopírovala. Naopak, aby Rn(t) věrohodně vystihovala (rekonstruovala) neznámou funkci y(t), je žádoucí, aby Rn(t) naměřená data vyrovnávala (vyhlazovala). To je ale možné jen tehdy, když počet pozorování m je výrazně větší než počet n návrhových parametrů, tj. pro m ^> n. Příklad 4.8. Pro data předepsaná tabulkou 105 ti 0 0,5 1 1,5 2 2,5 3 Vi 3,57 2,99 2,62 2,33 2,22 2,10 2,05 určíme aproximaci R2(t) X\ x2e metodou nejmenších čtverců. Zřejmě - Sp(U)f+p / [S'p\t)]2 dt, i=i Ja (4.85) 107 kde p > O je vhodně zvolený parametr vyhlazení. Pro vyhlazovací člen postupně dostaneme ľ[s'M2dt = J2 ľ" [s;(t)]2 dt = Ja i=Q Jxí n—l r i- fXí+\ "1 n—1 x'i+a I ■B"_r+otjr(t)B"_r+ptr(t) dt xi+p = y~]xfDjXj, kde Xj = (xí+i,xí+2,... ,xi+r)T aD, = {dL/Ja,/3=i; přičemž <ŕaf} = f l+1Blr+ajr(t)Blr+^r(t) dt, a, (5 = 1, 2,..., r. Integrály lze spočítat numericky formulí řádu alespoň 2(r —3), třeba Gaussovou-Legendro-vou formulí s (r — 2)-ma uzly. Pomocí lokálních matic Dj, i = 0,1,..., n — 1, sestavíme globální matici D na základě ekvivalence n—1 ^xfDÄ = xTDx. Celkem tedy G(x) = (y - Ax)T(y - Ax) + pxTDx, (4.86) takže vyhlazené koeficienty dostaneme jako řešení soustavy lineárních rovnic (ATA + pD) x = ATy. (4.87) Ilustrace efektu vyhlazení. Zvolili jsme řád splajnu r = 6 a dělení intervalu (0, 2%) na n = 10 dílků nestejné délky. V rozšířeném dělení Ä jsme zvolili rr_5 = rr_4 = • • • = x0 = 0, Xio = Xn = ■ ■ ■ = xis = 2%. Dále jsme zvolili m = 30 bodů [ti, yi\, i = 1,2,..., 30, kde 0 = t\ < Í2 < • • • < tm = 2-k je nerovnoměrné dělení intervalu (0, 2%) a kde yi »2 sinŕj jsou hodnoty sinŕj porušené pomocí generátoru náhodných čísel s rovnoměrným rozdělením. V obrázku 4.8 tečkovaná čára vyznačuje nevyhlazený splajn a plná čára splajn vyhlazený s koeficientem vyhlazení p = 0,2. 108 109 5. Numerický výpočet derivace a integrálu Společným východiskem obou postupů je náhrada funkce f(x) vhodnou aproximací p> použít Lagrangeův popř. Hermitův polynom nevysokého stupně. 5.1. Numerické derivování Přibližný výpočet derivace f'(x) má smysl například tehdy, když a) pro dané x můžeme získat odpovídající hodnotu y = f (x), avšak explicitní vyjádření funkce f(x) k dispozici nemáme a proto vzorec pro f'(x) neumíme napsat; b) funkce f(x) je tak složitá, že výpočet její derivace je příliš pracný; c) hodnoty funkce f(x) známe jen v několika tabulkových bodech. V takových případech je účelné nahradit funkci f(x) vhodnou aproximací íp(x) a hodnotu derivace íp'(x) považovat za přibližnou hodnotu derivace f'(x). Podobně postupujeme, když potřebujeme přibližně určit vyšší derivace: f^k\x) nahradíme pomocí Lp^k\x). V dalším si uvedeme několik často používaných formulí založených na derivování Lag-rangeova interpolačního polynomu Pn(x), tj. když f'(x) aproximujeme pomocí Pn(x). Chyba aproximace v uzlovém bodě. Nechť / G Cn+1(a,b), kde a je nejmenší a b je největší z uzlů interpolace. Pak pro chybu f'(xs) — P^(xs) v některém z uzlů xs platí kde ujn+i(x) = (x — x0)(x — x{) ■ ■ ■ (x — xn) a £s je nějaký bod z intervalu (a, b). Přehled užitečných vzorců. Uvažme případ, kdy uzly x,i jsou ekvidistantní's krokem h, tj. Xi = x0 + ih, i = 1,2,... ,n. Abychom docílili jednotného zápisu, označíme uzel xs, v němž počítáme přibližnou hodnotu derivace, vždy jako x. Také ostatní uzly nečíslujeme, ale vyjadřujeme je pomocí x jako x + h, x — h apod. Příslušný vzorec je platný jen pro funkce, které mají potřebný počet spojitých derivací. Bod £ leží vždy mezi nejmenším a největším uzlem použitým ve vzorci. Pomocí vztahu (5.1) tak dostaneme: n = 1 f (x) f (x + h)-f (x) 1 h (5.2b) 110 /'M = /(' + *>-/('-*> - lmí), (5.3b) ^ 3/(rr) - 4/(* - A) + /(* - 2ft) + 1^,,,^ ^ Uveďme ještě nejznámější formuli pro výpočet druhé derivace. Rovnost nz 12 ověříme užitím Taylorova rozvoje f(x ± h) okolo x. Formule ze vzorce (5.2a) je známa jako první diference vpřed (dopředná diference) a formule ze vzorce (5.2b) jako první diference vzad (zpětná diference). Formule ze vzorce (5.3b) bývá označována jako první centrální diference a formule ze vzorce (5.4) jako druhá centrální diference. Numerický výpočet parciální derivace nepředstavuje žádný nový problém: derivujeme-li podle proměnné xÍ7 ostatních proměnných x j ý xí si nevšímáme a některou z výše uvedených formulí aplikujeme jen na Xi. Tak třeba pomocí dopředné diference (5.2a) dostaneme df(xux2) _ f(xux2 + h) - f(xux2) dx2 h Podmíněnost numerického výpočtu derivace. Ve vzorcích (5.2) (5.4) jsme uvedli vždy formuli (jako první sčítanec na pravé straně) a její dískretízační chybu (jako druhý sčítanec). Při numerickém výpočtu derivace hrají významnou roli také zaokrouhlovací chyby, a to jak v hodnotách funkce / (tj. ve vstupních datech), tak při vyhodnocení formule (tj. při výpočtu). Ukážeme si to pro formuli ze vzorce (5.2a). Ve skutečnosti za přibližnou hodnotu derivace f'(xo) považujeme výraz ň,, x f(x0 + h)-f(x0) [f(xo + h) + £1]-[f(x0) + £0] , 1 „ £i-£q f [xo) ■=-^-=-^-= / {xo) + -hf (£o) + —^— , kde E\ resp. Sq je zaokrouhlovací chyba, které se dopustíme při výpočtu f(x0 + h) resp. f(x0). Tedy n*o) = řlx°+l,l-řM+Ei+E„ kde E d := —\hf"{^) je diskretizační chyba a Er := — (e± — £o)/h je chyba zaokrouhlovací. Chování obou chyb je pro h —> 0 diametrálně odlišné: zatímco —> 0, —> oo. Pro malá h se tedy zřejmě jedná o špatně podmíněnou úlohu: malé změny Eq,Ei ve vstupních datech vyvolají velkou změnu Er a následně také výsledku f'{x). Když pro jednoduchost zanedbáme zaokrouhlovací chyby vznikající při vyčíslení formule [f(x0 + h) — f(x0)]/h, dostáváme pro celkovou chybu E = Ed + Er odhad \E\ < \Ed\ + \Er\ < -hM2 + 2^ = g(h), 111 kde M2 = max \f"(x)\ pro x G (xq,xq + h) a e = max(|£i|, l^)!)- Minimalizací funkce g(h) obdržíme optimální délku kroku hopt = 2^j— , pro kterou \Eopt\ = g{hopt) = 2a/' eM2 . Předpokládejme, že hodnoty f(x0) i f(x0 + h) dokážeme vypočítat s relativní chybou rovnou přibližně číslu ô, takže e ~ MqS, kde Mq max(|/(rro)|, \f(xo + h)\). Pro Mq M2 je /r,opí 2v/í a IPopil ~ 2Mov/í- Počítáme-li tedy např. ve dvojnásobné přesnosti a pokud ô « 10"16, pak /iopí « 2 • lfr8. Jestliže navíc \f'{x)\ « M0, pak |Popí| « 2|/'(a:)|\/5, a to znamená, že velikost relativní chyby derivace f'{x) je řádově rovna druhé odmocnině velikosti relativní chyby funkčních hodnot. To nás opravňuje k tvrzení: při přibližném výpočtu derivace formulí dopředné (nebo zpětné) diference dochází při optimální volbě kroku ke ztrátě přibližně poloviny platných cifer. x 1(T7 2 1.5 1 1 0.5 0 0 0.2 0.5 1 1.5 2 h x10-7 Obr. 5.1: Chyba numerické derivace: pro g(h) = + 2 • 10~16/fo je hopt = 2 • 10~8 = Eopt Podobné chování vykazují i ostatní formule numerického derivování, tj. pro krok h blízký hopt je numerický výpočet derivace špatně podmíněná úloha: nepatrné zmenšení kroku vyvolá značný nárůst chyby, viz obr. 5.1. 5.2. Richardsonova extrapolace Přibližný výpočet derivace lze efektivně zpřesnit technikou známou jako Richardsonova extrapolace. Je to univerzální postup umožňující pomocí základní metody nižší přesnosti vytvářet metody vyšší přesnosti. Ukažme si, jak se to dělá. Předpokládejme, že základní metoda je reprezentována funkcí F(h) parametru h. Metodou P umíme vypočítat hodnotu F{h) pro malá h > 0. Naším cílem je co nejpřesněji aproximovat hodnotu P(0), kterou však přímo z formule P určit neumíme. ■ ■ ■ r.....1 1..........1 1.........r.........1 1.....■ ' [hop, Eopt] 1 112 Předpokládejme, že funkce F(h) může být zapsána ve tvaru mocninného rozvoje F{h) = a0 + axh2 + a2h4 + a3h6 + ..., he(0,h0). (5.5) Konkrétní formule F je zkoumána v příkladu 5.1, viz (5.17). Pro malé h je F(h) jistě dobrou aproximací F(0) = a0. Pokusíme se najít lepší aproximaci a0. Začneme tím, že vypočteme F(^). Podle (5.5) platí h\ (h\2 (h\4 fhx 6 F * 2) = a° + ai \2) + °2 \2 I + °3 í - ) + • • • (5-6) Největší chybu ve výrazu a0 — F[h) i a0 — ) představuje člen obsahující druhou mocninu h. Zbavíme se ho tak, že od čtyřnásobku rovnice (5.6) odečteme rovnici (5.5) a výsledek dělíme třemi. Tak dostaneme F2{h) := 4F(|)"FW = a0 + 42V + o Rovnici (5.8) násobíme 16, odečteme (5.7) a výsledek dělíme 15. Tak dostaneme metodu F3, která je pro zvolené h definována předpisem IQF2(I)-F2(h) (3) F3(h) :=-—- = aQ + a\'h + ... (5.9) 15 přičemž \a^\ < < \a>j\, J' = 3,4,.... Všimněte si, abychom mohli vypočítat F2(^), musíme nejdříve určit F(^). Takto můžeme pokračovat a získávat stále lepší metody, pro které F+1(h) = AlR^-^ =aQ + a(^)^+2 + ... ; i = l,2,... (5.10) a kde Fi{h) = F{h). Pro koeficienty rozvoje přitom platí \a- \ < \aj\, j = i +1, i+ 2,.... l3 I ,0)7,2* , „0) L2Í+2 Nechť hs = h/2s, s = 0,1,.... Protože i^/i) = a0 + at- fc2t + a-+i/rí+2 + ..., snadno odvodíme, že \Fi(hs)-ao\ 0 takové, že pro všechna 0 < h < h0 platí < Chp. □ Výpočet lze přehledně uspořádat do tabulky F1(h) ^i(f) F2{h) ^i(l) Ml) F4I) KW ^ F2(|) F3(f) F4(|) F5(fc) T40 T41 T42 T43 T, ^00 Tio Tu T2i T22 ^30 T3i T32 T33 ^40 T4i T42 T43 44 Tab. 5.1 Richardsonova extrapolace Tabulku vyplňujeme po řádcích. Zřejmě Tst = Ft+1(h/T-*), Ft(hs) = Ti+S_lii_1. (5.12) Prvek Tsq v prvním sloupci tabulky vypočteme pomocí základní metody F = Fi, Ts0 = F(h/T), s = 0,1,..., (5.13) a další prvky v tomto řádku počítáme ve shodě s (5.10) podle předpisu Tsl := r/:-' |,. ■ = ?Vi + Ts'-\~ni1'-\ i = 1,2,..., 3. (5.14) Výpočet ukončíme a TSj považujeme za dostatečně přesnou aproximaci F(0), pokud \Tsi - TS)i_i| < max(£r\Tsi\,£a) , (5.15) kde er je požadovaná relativní přesnost a £a požadovaná přesnost absolutní. Podle (5.11) a (5.12) přitom \Tst-F(0)\ 0 resp. g (x) < 0, existuje aspoň jeden takový bod c G (a, b), že f (x) g (x) dx = f (c) / g(x) dx 117 Pro celkovou chybu BJ^(f) = I{f) — Qt(Í) proto dostaneme K(f) = -y2tf £ nvi) = -^r* Ž r (ví) = --^rm, (5.20) i=i i=i kde i] G (a, b). Tedy BJ^(f) = 0(h2) a diskretizační chyba R%(f) —> 0 pro h —> 0. Zaokrouhlovací chyba. Podívejme se ještě na chybu zaokrouhlovací. Jestliže v kvadra-turní formuli (5.19) použijeme místo přesných hodnot f i přibližné hodnoty f i = fi + Si, pak QtU) •= h[\h + fl + • • • + fn-l + \fn] = QtU) + h[\eQ + £! + •••+ £„-1 + \en} . Zřejmě /(/) = Q£(/) + i?" (/) + £Ä, kde £Ä := -/^o + £i + • • • + + ^n] je celková zaokrouhlovací chyba. Jestliže < e := M0£m, kde M0 = max^j,) |/(^)| a je strojová přesnost, dostaneme odhad \Er\ < = ~~ a)£ = (b — a)Mosm . Vidíme, že odhad velikosti zaokrouhlovací chyby \Er\ nezávisí na h. Pokud uvážíme také zaokrouhlovací chyby aritmetických operací, odhad zaokrouhlovací chyby bude \ER\ <(b- a)M0em + (n + 3)M0em. Protože n nebývá příliš velké, můžeme konstatovat, že numerické integrování je podstatně méně citlivé na zaokrouhlovací chyby než numerické derivování a proto při běžném numerickém výpočtu integrálu nemusíme zaokrouhlovacím chybám věnovat žádnou zvláštní pozornost. □ Obecný tvar kvadraturní formule. Kvadraturní formuli pro přibližný výpočet integrálu /(/) = Ja f(x) dx budeme zapisovat ve tvaru Q(f) = w0f(x0) + w1f(x1) H-----h wnf(xn). (5.21) Body x0,x1}..., xn se nazývají uzly a čísla w0, w1}..., wn koeficienty kvadraturní formule. Budeme předpokládat, že a < x0 < X\ < ■ ■ ■ < xn < b. Rozdíl /(/) — Q{f) označíme R{f) a nazveme (diskretizační) chybou kvadraturní formule, tedy I(f) = Q(f) + R(f). Rád kvadraturní formule. Algebraický řád r = r (Q) kvadraturní formule Q{f) definujeme jako nezáporné celé číslo takové, že R(x^) = 0 pro j = 0,1,..., r a R(xr+1) ^ 0. Formule je tedy řádu r, pokud integruje přesně polymomy stupně r a polynomy stupně r + 1 už přesně neintegruje. Charakteristika kvality kvadraturní formule pomocí algebraického řáduje přirozená. Podle Weierstrassovy věty, viz [44], lze totiž každou spojitou funkci libovolně přesně aproximovat polynomem. Nechť Pn(x) = f(xQ)£0(x) + f{xi)íi{x) + • • • + f(xn)ln(x) je Lagrangeův interpolační polynom funkce f{x) stupně n. Integrací Pn(x) na intervalu (a,b) dostaneme tzv. interpolační kvadraturní formuli pb pb pb Q(f)=I(Pn) = fM £0(x)dx + f(x1) £1(x)dx+--- + f(xn) ín(x)dx. J a J a J a 118 Formule je tvaru (5.21) a její koeficienty jsou ŕ Wí = / íi{x) dx, i = 0,1,..., n. (5.22) J a Interpolační kvadraturní formule (5.21), (5.22) je zřejmě řádu alespoň n, lze však dokázat, že řádu vyššího než 2n + 1 být nemůže. Zvyšování řádu? Je přirozené ptát se, zda kvadraturní formule dostatečně vysokého řádu dokáže aproximovat integrál s požadovanou přesností. Odpověď na tuto otázku nám dává následující Věta 5.1. Nechť Qi(f) := YľjĹow%jf(x))> ^ = 0,1,...; jsou formule s kladnými koeficienty řádu Ti, přičemž 0 < r o < r\ < ■ ■ ■ < r i < r^+i < ... . Pak pro každou funkci f{x) spojitou na intervalu (a, b) platí Hm Qi(f) = I(f). Důkaz. K libovolnému e > 0 existuje podle Weierstrassovy věty polynom Pm(x) stupně m takový, že \f(x) — Pm(x)\ < e \/x G (a, b). Pak pro každé r i > m platí |/(/) " Qi(f)\ < \Hf -Pm)\ + \I(Pm) ~ Qi(Pm)\ + \Qi(Pm ~ f)\ < 2e(b - a) , neboť \I(f — Pm)\ < e(b — a), \I(Pm) — Qi{Pm)\ = 0 protože formule Qi je řádu r« > m, a dále Tlj, Tli T^i \Qi(pm -f)\ 0 a že Qi(l) = 1(1) = b — a. □ Chceme-li tedy spočítat integrál /(/) s předepsanou přesností e > 0, tj. tak, aby platilo \I(f) — Q{f)\ < s, stačí použít interpolační kvadraturní formuli dostatečně vysokého řádu s kladnými koeficienty. Z definice (5.22) koeficientů interpolační formule je zřejmé, že pozitivnost koeficientů w,i lze zajistit jedině vhodným výběrem uzlů kvadraturní formule. V odstavci 3 poznáme Gaussovy formule, které požadované vlastnosti mají. Složené formule. Jinou cestou umožňující docílit potřebnou přesnost numerické integrace je použití složených kvadraturních formulí. Jednu složenou formuli jsme již poznali, totiž složenou lichoběžníkovou formuli Q^if), viz (5.19). Z odhadu chyby (5.20) plyne, že pro dostatečně jemné dělení intervalu (a,b) je chyba |/(/) — Qt{Í)\ numerické integrace složenou lichoběžníkovou formulí libovolně malá. Používají se i jiné složené formule než je formule lichoběžníková. Hlavní myšlenka je však vždy stejná: interval (a, b) se rozdělí na m podintervalů (ai} i = 1, 2,..., m, tak, že a = dl < bi = a2 < b2 = a3 < ■ ■ ■ < bm_x = am < bm = b, a na každém podintervalů (a,i,bi) se použije kvadraturní formule Qi{f) nevysokého řádu. Formule na jednotlivých podintervalech jsou obvykle téhož typu. Složenou kvadraturní formulí pak rozumíme formuli Qm{f) = Y^íĹiQi(f)- Označíme-li a = maxj(6j — a«) 119 délku nejdelšího podintervalu, vzniká přirozená otázka, zda Qm(f) —> I(f) pro o —> 0? Následující věta říká, že za velmi slabých předpokladů tomu tak skutečně je. Věta 5.2. Nechť a = a\ < b\ = a2 < b2 = a3 < ■ ■ ■ < &m_i = am < bm = b je děleni intervalu (a,b), a = maxj(6j — clí), Qm(f) = YľíĹiQi(f) Je složená kvadraturníformule na intervalu (a,b) a Qi(f) := YľjĹo w)f{x)) Je kvadraturní formule na intervalu (aj,6j); která má kladné koeficienty a je řádu alespoň 0. Pak pro každou funkci f(x), která je v intervalu (a, b) lipschitzovsky spojitá, platí Hm Qm (/) = /(/). Důkaz. Užitím první věty o střední hodnotě integrálu, a dále toho, že pro formuli řádu 0 platí Y^íjĹowj = Qi{^) = Ja = 6j — Oj, dostaneme f(x)dx-Qi(f) ■tli rii 3=0 j=0 rii \f(Vi)(bi-ai)-Qi(f)\ = n i 1, h = (b — a)/n db x q — a. takže xn = b, tj. koncové body intervalu (a, b) jsou uzly. Otevřené Newtonovy-Cotesovy formule dostaneme pro n > 0, h = (b — a)/(n + 2) a x0 = a + h, takže xn = b — h, tj. koncové body a, b uzly nejsou. Lze dokázat, že Newtonovy-Cotesovy formule jsou řádu n + 1 pro n sudé a řádu n pro n liché. Z těchto formulí mají všechny koeficienty kladné jen uzavřené Newtonovy-Cotesovy formule pro n = l,2,...,7an = 9, z otevřených Newtonových-Cotesových formulí pak jen formule pro n = 0,1 a n = 3. Nejznámější Newtonovy-Cotesovy formule jsou formule obdélníková, lichoběžníková a Simpsonova. V dalším se nám bude hodit také formule Booleova. Všechny tyto formule si nyní uvedeme. Obdélníková formule je otevřená Newtonova-Cotesova formule pro n = 0 s jediným uzlem xq = |(a + b). Interpolační Lagrangeův polynom Pq(x) stupně 0 proto je Po(x) = f0:=f/a 120 a odpovídající formule je tvaru QM{f):= / PQ{x)áx = {b-á)f a + b (5.23) Index m značí „midpoint", v anglicky psané literatuře se totiž obdélníková formule označuje jako „midpoint rule". Název formule vyjadřuje skutečnost, že pro f {{a + b)/2) > 0 je Qm{Í) obsah obdélníka o stranách délky b — a a f {{a + b)/2). Pro chybu platí RM(f) = ^f"(v)(b-a)3, kde r\ G (a, b) . (5.24) Chybu obdélníkové formule odvodíme snadno pomocí Taylorova rozvoje a první věty o střední hodnotě integrálu: f(x) dx — (b — a)f , (a + b a + b 2 a + b f(x) - f a + b dx x f "(v) dx h/x-1±l\ dx = —f"{rj){b-af. 24' Obdélníková formule je řádu 1. To okamžitě plyne ze vzorce (5.24): protože druhá derivace polynomu stupně jedna je rovna nule, musí být Rm{x^) = 0 pro j = 0,1. a (a+b)/2 ba ba (a+b)/2 b Obr. 5.3. Obdélníková, lichoběžníková a Simpsonova formule Lichoběžníková formule je uzavřená Newtonova-Cotesova formule pro n = 1 s uzly Xq = o, X\ = b. Formuli jsme již odvodili v úvodu této kapitoly. Zopakujme tedy, že lichoběžníkovou formuli dostaneme integrací lineárního interpolačního polynomu procházejícího body [a, f {a)] a [b, f(b)] v mezích od a do b. Snadným výpočtem dostaneme QtU) ■■- Pl(x)dx=b—^[f(a) + f(b)]. (5.25) Název formule vyjadřuje skutečnost, že pro f(a) > 0, f(b) > 0 je Ql{Í) obsah lichoběžníka, jehož rovnoběžné strany mají délky f (a), f(b) a jehož výška je rovna b — a. 121 Pro chybu lichoběžníkové formule platí RT(f) = -lf"(r])(b-af, kde r) E (a, b). (5.26) Vzorec pro chybu byl odvozen v úvodu této kapitoly, chyba tam byla označena jako r i. Lichoběžníková formule je řádu 1. Všimněte si: a) Pokud se druhá derivace f"(x) funkce f(x) na intervalu (a,b) příliš nemění, pak je absolutní hodnota \RT(f)\ chyby lichoběžníkové formule přibližně dvakrát větší než absolutní hodnota \Rm(Í)\ chyby formule obdélníkové. b) Pokud druhá derivace f"(x) funkce f(x) nemění na intervalu (a, b) znaménko, tj. jeli funkce f(x) pořád konvexní nebo konkávni, pak znaménko chyby lichoběžníkové formule je opačné než znaménko chyby formule obdélníkové. Za těchto okolností přesná hodnota /(/) integrálu leží v intervalu, jehož krajní body jsou hodnoty QmU) a QT(f). Simpsonova formule je uzavřená Newtonova-Cotesova formule pro n = 2 s uzly xq = a, x\ = (a + b)/2 a x2 = b. Integrací kvadratického Lagrangeova interpolačního polynomu P2{x) procházejícího body [xq, f(xo)], [xi,f(xi)] a [x2,f(x2)] dostaneme Qs(f)= í P2(x)dx J a ^ d — a. i a. -+- d \ Snadno prověříme, že Qs{&) = F\&) Pro j = 0,1,2,3, a že Qs{xA) Ý Fy%4), tedy Simpsonova formule je řádu 3. Odvození vzorce pro chybu Rs(f) Simpsonovy formule je už obtížnější, spokojíme se proto jen se vzorcem samotným. Platí Rs(f) = -^f(4)(v) (^)5 > kde -7 G M). (5.28) Booleova formule je uzavřená Newtonova-Cotesova formule pro n = 4 QbU) 7f(a) + 32/ ( *Ľtí) + 12/ (£±í) + 32/ (£±» ] + 7/(6) 90 Formule je řádu 5, pro chybu platí (5.29) Äb(/) = -^/(6)(^)(^) , kde^G(a,6). (5.30) Složené formule uvedeme jen pro případ, kdy jednoduché formule na podintervalech jsou všechny stejné a to buďto obdélníkové nebo lichoběžníkové nebo Simpsonovy (sestavení složené Booleovy formule ponecháváme čtenáři jako cvičení). Budeme uvažovat ekvidistantní dělení x,i = a + ih, kde h = (b — a)/n. Složenou obdélníkovou formulí dostaneme součtem jednoduchých obdélníkových formulí na jednotlivých podintervalech (xí-i,Xí). Výsledkem je formule QmU) ■= h [fi/2 + h/2 + • • • + /n-1/2] , kde /ť_1/2 = f(xt - \h). (5.31) 122 Pro její chybu Rrlí{f) platí rmU) = ^3 £/"(**) =lí^rY.nrH) = b-^f"(v)h2, (5.32) 1=1 1=1 kde i] G (a, 6). Složenou lichoběžníkovou formuli Q?{f) včetně její chyby R^{f) jsme již uvedli, viz (5.19), (5.20). V MATLABu je složená lichoběžníková metoda implementována jako program trapz. Složenou Simpsonovu formuli dostaneme pro sudý počet dílků n tak, že sečteme jednoduché Simpsonovy formule na intervalech (x0,x2), (x2,X4), • • •, (%n-2,xn)- Dostaneme QsU) :=y [/o + 4/i + f2] + y [/2 + 4/3 + /4] + • • • 2h 2h — [fn-4 + 4/n_3 + fn-2] + — [fn-2 + 4/n_i + /„] = (5.33) O O /i 3 [/o + 4/i + 2/2 + 4/3 + 2/4 + • • • + 2/n_2 + 4/n_! + /„]. Pro chybu Rg(f) složené Simpsonovy formule platí RsU) = ~ 7^5/(4)M - ^5/(4)(^) "... - 7^5/(4)fe) = - ^4^f [/(4)M + /(4)M + • • • + /(4)fe)] = (5.34) ~W/(4)(^4' kde^(a'&)- Rombergova integrace je založena na použití složené lichoběžníkové formule a opakované Richardsonovy extrapolace. Teoretickým východiskem Rombergovy metody je platnost Eulerova-Maclaurinova vzorce m QtU) = /(/) + £ J^^V^Kb) - fV-Via)] + Rm(f) , 1=1 ' (5.35) kde Rm{f) = {b~a) B2m+;» ^2/(2wh-2) ( ) ^£(^6), (2m + 2)! koeficienty 52« jsou tzv. Bernoulliova čísla, viz např. [43]. Vzorec (5.35) platí za předpokladu, že funkce f(x) je v intervalu (a, 6) spojitá spolu se svými derivacemi až do řádu 2m + 2 včetně. Aproximaci Q^if) integrálu /(/) lze zpřesnit užitím opakované Richardsonovy extrapolace. Rozvoj (5.35) je totiž stejného typu jako vzorec (5.5), na němž je opakovaná Richardsonova extrapolace založena. Srovnáním (5.5) a (5.35) vidíme, že ve vzorci (5.5) stačí položit F{h):=QnT{f), h:=—, a0 :=/(/) , Vl := 2i. n 123 Při výpočtu koeficientů TSi postupujeme podle vzorců (5.13)-(5.14), ns = 2suq je počet dílků formule Q^s(f) s krokem hs = ho/2s. Při výpočtu Ts+i^ = Qrs+1(/) využijeme všechny hodnoty funkce f(x), které jsme již předtím použili k určeni Tsq — Qj"s (■/")' krok 3 v následujícím algoritmu. Algoritmus Rombergovy metody Krok 1. Dáno a, b, n, sr, e a- Krok 2. s := 0; n0 := n; h0 := {b — a)/n; T0o := Qt(Í)i Krok 3. Ts+li0 := \ [Ts0 + hs YľkU f (a + (k - \) hs)]; Krok 4. ns+i := 2ns; hs+i := \hs; s := s + 1; i := 1; Krok 5. 5 := (TSii_i - Ts_i,i_i)/(4i - 1); Tsl := TSii_i + 5; je-li \ô\ < m&x (sr\Tsí\, e a), pokračujeme krokem 6; je-li i = s, pokračujeme krokem 3; jinak položíme i := i + 1 a opakujeme krok 5; Krok 6. Položíme /(/) »2 Tsj; Následuje přehled základních vlastností Rombergovy metody. a) Výpočet Tsi odpovídá kvadraturní formuli řádu 2i + 1 s kladnými koeficienty. b) Pro i = 1 dostáváme složenou Simpsonovu formuli: Ts\ = Q^a(f), kde ns = no2s. c) Aproximace TS2 je složená Booleova formule. TSi pro i > 2 však už žádnou přímou souvislost se složenými formulemi Newtonova-Cotesova typu nemá. d) Pro chybu podle (5.35) a (5.16) platí \Tsi-I(f)\ < Kí(b-a)h2s^, kde hs^ = hQ/2s-\ Konstanta Ki závisí na (2i + 2)-hé derivaci funkce f(x). e) Má-li funkce / v intervalu (a, b) spojité derivace až do řádu 2i + 2 včetně, pak TSi —> I{f) pro s —> 00. Pokud má funkce / v intervalu (a, b) derivace všech řádů, pak také Tss —> I(f) pro s —> 00. Zdůrazněme, že úspěšné použití Rombergovy metody předpokládá, že integrovaná funkce f(x) má dostatečný počet spojitých derivací v celém intervalu (a,b). Poznámka. Z Eulerova-Maclaurinova vzorce (5.34) plyne Q£(/) = /(/) + 0(h2m+2), pokud f^-^ia) = f^-^ib) pro i = 1,2,...,m. Složené lichoběžníkové pravidlo je tedy velmi přesné při integraci dostatečně hladkých periodických funkcí v případě, kdy délka b — a intervalu integrace (a, b) je celým násobkem periody. □ 124 5.3.3. Gaussovy kvadraturní formule Zabývejme se numerickým výpočtem uj(x)f(x) dx, kde uj je pevně daná nezáporná váhová funkce na intervalu (a, b). Interval (a, b) může být neomezený, třeba (0, oo) nebo (—00,00). O váhové funkci budeme předpokládat, že (a) uj je v (a, b) spojitá a nezáporná, (b) integrály uj(x)xk dx, k = 0,1,..., existují a jsou konečné, (5.36) (c) je-li p polynom, p(x) > 0 v (a, b), uj(x)p(x) dx = 0, pak p = 0. Podmínky (5.36) jsou splněny například tehdy, když funkce uj je kladná a spojitá na omezeném uzavřeném intervalu (a,b). Pomocí první věty o střední hodnotě integrálu snadno dokážeme, že podmínka (5.36c) je ekvivalentní s podmínkou J^uj(x) dx > 0. Nechť Pn{x) = Yľi=o f(xí)^í(x) Lagrangeův interpolační polynom funkce f{x). Interpolační kvadraturní formuli s váhou definujeme předpisem rb n Q(f) := uj(x)Pn(x) dx = y^jWjf(xi), Ja i=0 kde koeficienty (5.37) ŕ Wi = uj(x)Íí(x) dx, i = 0,l,...,n. Pro a < xq < x\ < ■ ■ ■ < xn < b je Q(f) obecně jen řádu n, tj. Q(xl) = J^uj(x)xt dx, pro 0 < i < n. Vhodnou volbou uzlů {xj}™=0 lze řád formule (5.37) výrazně zvýšit. K tomu použijeme Ortogonální polynomy. Pro funkce u,v definujeme skalární součin ŕ (u, v) := / uj{x)u{x)v{x) dx J a v prostoru všech funkcí / takových, pro které integrál uj(x)f2(x) dx existuje a je konečný. Nechť {pn(x)}^L0 je soustava polynomů stupňů n. Řekneme, že tato soustava je v intervalu (a, b) ortogonální, když platí (Pi,Pj) = 0 proi^j. Ke konstrukci ortogonálních polynomů se využívá rekurentní vztah pi+1{x) = {x- ai)pi(x) - PíPí^x), i = 1,2,..., (5-38) přičemž klademe Po{x) = 1, pi(x) = x — a0 . 125 Koeficienty a0, &i,Pi,..., q;, Pi,... jsou zvoleny tak, aby polynomy po,pi,... ,Pi+i byly ortogonální. Koeficient q0 určíme z podmínky 0 = [pi,po) = (x — a0,p0). Dále postupujme indukcí, tj. předpokládáme (phxk) = 0 pro k < i a určíme a,h fy. Zadáme 0 = (Pí+i,Pí) = ((x - ai)pi,pi) - Pi{Pi-i,Pi) = (xpi,Pi) - ati(pi,Pi) - Pí(Pí-i,Pí), a protože (pí-i,Pí) = 0 podle indukčního předpokladu, je (xPi,Pi) at =--- . Podobně z požadavku 0 = {pi+i,Pi-i) = ((x - Qi)pi,Pi-i) - (3í(pí-l,Pí-l) = {xpí^Pí-x) - fií{pí-l,Pi-l) dostaneme = (a;p,,p,_i) (Pí-i,Pí-i) ' Tento vztah ještě upravíme pomocí rovnosti iPhPi) = ((X ~ <*i-l)Pi-l,Pi) ~ Pi-l(Pi-2,Pi) = {zPi-uPi) na výsledný tvar ÍPi,Pi) Pi (pi-l,Pi-l) ' Snadno ověříme, že (pi+i,pk) = 0 také pro k < i — 2, takže celkem (pi+i,Pk) = 0, k < i. Proto také (pi+i,xk) = 0, k < i, neboť xk lze vyjádřit jako lineární kombinaci pe(x) pro (. < k. Tím je indukční krok ukončen. Koeficienty ortogonálních polynomů pri tedy počítáme ze vzorců (xPiiPi) -ni a iPiiPi) i o (x. QCi\ OLi = ---, 7 = 0,1,..., Pí =---, 7 = 1,2,... (5.39) (Pi,pi) (Pi-l,pi-l) Ukážeme, že Věta. Kořeny X{, i = 1,2,.. . ,n, n-tého ortogonálního polynomu pn jsou reálné, jednoduché a všechny leží v otevřeném intervalu (a,b). Důkaz, uj(x)pn(x) dx = (p„,po) = 0 pro n > 0. Proto pn v (a, b) mění znaménko, tj. pn má uvnitř (a, b) alespoň jeden kořen liché násobnosti. Nechť a < z\ < z2 < ... < ze < b, kde {ziYi=i jsou všechny kořeny pn liché násobnosti. Položíme qe(x) = YÍí=i(x ~ zd-PnQe > 0 v (a, b) a tedy ^bj{x)pn(x)qí(x) dx > 0 podle (5.36c). To však pro l < n nemůže nastat. Proto l = n. □ Gaussova kvadraturní formule Qo-nif) = Y^i=owif(xi) Je interpolační kvadráturní formule (5.37), jejíž uzly {xj}"=0 jsou kořeny (n + l)-ního ortogonálního polynomu pn+i- 126 Tvrzení 1. Gaussova kvadraturní formule Qcn je řádu 2n + 1. Důkaz. Polynom f'2n+i(x) stupně 2n + 1 lze vyjádřit ve tvaru kde Pn(rr) = X^ľ=o Í2n+i(xí)£í(x) Je Lagrangeův interpolační polynom funkce f2n+i(x), jehož uzly Xo^i... ,xn jsou kořeny ortogonálního polynomu pn+i(x), a gn(x) je nějaký polynom stupně n. Skutečně, polynom f2n+i(x) — Pn(x) má kořeny x$,x\,..., xn, je proto dělitelný členem (x — x$)(x — x\) ... (x — xn) a tedy také polynomem pn+i(x). Pak b rb U(x)f2n+1(x) ÚX= Uj(x) \Pn{x) + pn+l(x)qn(x)] dx = QGn(f2n+l), J a neboť (pn+i,qn) = 0 je důsledkem ortogonality polynomů {pk{x)Yk=o a /b n pb n uj(x)Pn(x)dx = Yhn+i{xi) I oj{x)ti{x)áx = YWi-f'' i=0 Ja i=0 2n+l(xí) — Qcn(f2n+l)- Protože uj(x)p2L+1(x) dx > 0, Qcn je řádu 2n + 1. □ Tvrzení 2. Koeficienty Gaussovy kvadraturní formule Qcn Jsou kladné. Důkaz. Gaussova formule Qcn integruje polynom £2 stupně 2n přesně. Proto „b n ){x)í2(x) dx = QorMf) = YWk^(Xk"> Wi k=0 neboť £i(xk) = 0 pro i k a £í(xí) = 1. Odtud w{ = uj(x)£2(x) dx > 0. □ Tvrzení 3. Interpolační kvadraturní formule Q, která integruje přesně polynomy stupňů 0,1,..., 2n + 1, je Gaussova kvadraturní formule Qcn- Důkaz. Jestliže interpolační kvadraturní formule (5.37) je řádu 2n+l, pak pro ortogonální polynomy {pk]rklt^ dostaneme n „5 Q(Pn+lPj) = y^Wipn+1(Xi)pj(Xi) = / Lú(x)pn+1(x)pj( i=0 Ja x) dx = 0, j = 0, l,...,n, nebo-li / Po(x0) Po(xi) Pi(xo) Pl(xl) Po(xn)\ Pl(xn) \Pn(xo) Pn{xl) ••• Pn{xn)) í w0pn+1(x0)\ ( 0\ WlPn+l(^l) \WnPn+l{xn)) \0/ (5.40) Z regularity matice soustavy (5.40) plyne Wipn+1(xi) = 0, i = 0,1,..., n, a protože w,i ^ 0, Pn+i(xí) = 0. To znamená, že uzly x0, x1}..., xn jsou kořeny ortogonálního polynomu pn+i. Dokázali jsme tedy, že Q = Qcn- D 127 Důsledek. Gaussova kvadraturní formule je interpolační kvadraturní formule maximálního řádu. Důkaz. Stačí zkombinovat tvrzení 1 a 3. Integruje-li interpolační kvadraturní formule přesně polynomy stupňů 0,1,..., 2n + 1, pak jde o Gaussovu kvadraturní formuli. Ta je řádu 2n + 1, tj. polynomy stupně 2n + 2 už přesně neintegruje. Rád 2n + 1 je tedy maximální a je dosažen právě pro Gaussovu kvadraturní formuli. □ Gaussova Legendrova formule je určena pro výpočet -i f(x) dx. r-i Polynomy ortogonální na intervalu (—1,1) s váhou u = 1 jsou známy jako Legendrovy polynomy. Lze je popsat rekurentním předpisem (n + l)Pn+i(x) = (2n + l)xPn(x) - ííPn_i(i), n = 1, 2,... přičemž klademe Pq{x) = 1, Pi(x) = x. Zejména tedy P2(x) = i(3x2 - 1), P3(x) = i(5x3 - 3x). Všimněte si, že polynomy sudého stupně obsahují jen sudé mocniny x a polynomy lichého stupně zase jen liché mocniny x. Dá se ukázat, že kořeny Legendrových polynomů jsou symetrické, tj. když x0 < x\ < ■ ■ ■ < xn, pak xn_i = —xÍ7 i = 0,1,... ,n. Pro n sudé xn/2 = 0. Gaussova kvadraturní formule (5.37), jejíž uzly jsou kořeny Legendrova polynomu Pn+i, se nazývá Gaussova-Legendrova kvadraturní formule. Chyba Gaussovy-Legendrovy kvadraturní formule může být vyjádřena ve tvaru o2n+3ľ/„ i i\M4 RGn(f) = dnf^\r]Gn), kde VGn e (-1,1) a dn = ^ + ^ +^)j]3 , viz např. [20]. Koeficienty w,i Gaussových-Legendrových formulí lze vypočítat integrací Lagrange-ových fundamentálních polynomů, w,i = £í(x) dx, viz (5.22). Výhodnější je však použít formuli 2 wí = Ti-27TW,—TAi2> i = 0,l,...,n. (5.42) (1 ~ xÍ)[Pn+1{x.i)\2 Vybrané Gaussovy-Legendrovy formule. Pro n = 0,1,2 speciálně dostaneme formule QG0(/) = 2/(0), RG0(f) = lf"(r]G0), QG2ÍÍ) = \f (-V7^) + \m + \f (v^) , RG2{f) = i5^ô/í6)te) • 128 Všimněte si, že Qgo(Í) Je obdélníková formule. Formule Qgi(Í) integruje přesně polynomy stupně 3 stejně jako Simpsonova formule. Zatímco Simpsonova formule Qs(f) je tříbodová, Gaussova-Legendrova formule Qgi(Í) Je Jen dvoubodová. Srovnáním tvaru zbytku Rs(f) Simpsonovy formule a Rci{f) Gaussovy-Legendrovy formule lze usuzovat, že Gaussova-Legendrova formule je přibližně o 50% přesnější. S rostoucím počtem uzlů formule Qcnif) koeficient dn ve vyjádření zbytku Rcnif) velmi prudce klesá, například pro 9-ti bodovou formuli Qcsif) Je d$ ~ 1,82 • 10~21. Aby také chyba Ranif) byla malá, musí být integrovaná funkce f(x) na intervalu (—1,1) spojitá spolu se svými derivacemi až do řádu 2n + 2 a hodnota její (2n + 2)-hé derivace nesmí být příliš velká: platí totiž \RGn(f)\ < dnM2n+2, kde M2n+2:= max \f(2n+2) (r])\. »£{-1,1} Gaussovy-Legendrovy formule lze použít pro integraci na libovolném omezeném intervalu (a, b), stačí použít transformaci a + b b-a x = — + —š, £e(-l,l>, pomocí které převedeme integraci z intervalu (a, b) na interval (—1,1). Gaussova-Cebyševova kvadraturní formule je určena pro výpočet i VT^x2 dx. Polynomy ortogonální na intervalu (—1,1) s váhou w(x) = \/y/\ — x2 jsou Čebyševovy polynomy, viz (4.28). Formule (5.37), jejíž uzly jsou kořeny Cebyševova polynomu Tn+i, se nazývá Gaussova-Cebyševova kvadraturní formule. Uzly a koeficienty jsou 2i + 1 n x,; = cos-7T, w,; =-, i = 0,1,..., n . (5.43) 2n + 2 ' n + 1 ' ' ' K J Gaussova-Laguerrova kvadraturní formule umožňuje výpočet e~x f(x) dx. o Ortogonální polynomy na intervalu (0, oo) s váhou w(x) = e x jsou Laguerrovy polynomy definované rekurentním předpisem L0(x) = 1, L>i(x) = 1 — x, Ln+1 = (2n + 1 - x)Ln(x) - n^Ln-x^x), n = 1,2,... 2r , , _ (5-44) Gaussova kvadraturní formule (5.37), jejíž uzly jsou kořeny Laguerrova polynomu Ln+i, se nazývá Gaussova-Laguerrova kvadraturní formule. Uzly a koeficienty jsou Xi : kořeny Laguerrova polynomu Ln+i, 2 i = 0,l,...,n. (5.45) Wj : Wj = Xj (71+ 1)! Ln+2(xi) 129 Gaussovu-Laguerrovu formuli lze použít také na intervalu (—00,6) resp. (a, 00): pomocí transformace x = b — £, £ G (—00, 0), resp. x = a + £, £ G (0, 00), převedeme integrál přes interval (—00,6) resp. (a, 00) na integrál přes interval (0,oo). Gaussova-Hermitova kvadraturní formule je určena pro výpočet 2 e~x f (x) dx . Ortogonální polynomy na intervalu (—00,00) s váhou w{x) = e~x2 jsou Hermitovy polynomy definované rekurentním předpisem H0(x) = 1, H1(x) = 2x, Hn+1 = 2xHn(x) - 2nHn_1(x), n = 1,2,... (5.46) Gaussova kvadraturní formule (5.37), jejíž uzly jsou kořeny Hermitova polynomu Hn+1, se nazývá Gaussova-Hermitova kvadraturní formule. Uzly a koeficienty jsou Xi : kořeny Hermitova polynomu Hn+i, 2n+2{n + l)\^ i = 0,l,...,n. (5.47) Wi : Wi [Hn+2(xí)Y Radauovy a Lobattovy formule V řadě aplikací je užitečné používat formule Gaussova typu, tj. maximálního možného řádu, které mají některé uzly předepsané. Zvláště důležité jsou případy, kdy mezi uzly potřebujeme zařadit jeden nebo oba koncové body intervalu (—1,1). Je-li uzlem jen jeden z krajních bodů ±1, dostáváme Gaussovy-Radauovy formule řádu 2n, je-li uzlem jak bod —1 tak bod 1, dostáváme Gaussovy-Lobattovy formule řádu 2n — 1. V následující specifikaci formulí předpokládáme, že — 1 < x0 < X\ < ■ ■ ■ < xn < 1, takže Wq přísluší k nejmenšímu uzlu x0 a wn přísluší k největšímu uzlu xn. Levá Gaussova-Radauova kvadraturní formule. Uzly a koeficienty jsou Xi : kořeny polynomu Pn+i + P, ni 2 l-xt _ (5-48) Wi: W°-(^Tř Wť_ [(n + l)Pn(xť)]2' t-1>2>--->n> kde Pn a Pn+i jsou Legendrovy polynomy. Pravá Gaussova-Radauova kvadraturní formule. Uzly a koeficienty jsou Xi : kořeny polynomu Pn+i — Pn, _ 1 + Xi _ 2 (5-49) Wi : Wi ~ [(n + l)Pn(-xt)]2 ' ^-O'1,-..,™ 1, w"-(n + i)2' kde Pn a Pn+i jsou Legendrovy polynomy. Gaussova-Lobattova kvadraturní formule má uzly a koeficienty Xi : kořeny polynomu (1 — x2)P^, 2 i = 0,l,...,n, (5.50) Wi : Wi n(n + l)[Pn(Xl)]2' 130 kde Pn je Legendrův polynom. Pro zajímavost uvádíme, že Lobattova formule se třemi uzly, tj. pro n = 2, Simpsonova formule řádu 3. Lobattova formule pro n = 3 je řádu 5 a má tvar je známa W) = g [/(-!) + /(!)] + 1 71 i 7! (5.51) 5.3.4. Adaptivní integrace je založena na nerovnoměrném dělení intervalu integrace (a, b): v místech, kde je integrovaná funkce dostatečně hladká a mění se pomalu, použijeme dělení hrubší, a v místech, kde je výpočet integrálu obtížný, použijeme dělení jemnější. Vysvětleme si, jak se to prakticky dělá. Integrál J(a, b) := ja f(x) dx počítáme dvěma různými kvadraturními formulemi a dostaneme aproximace Q±(a, b) a Q2(a, b). Jedna z formulí bývá vždy přesnější než formule druhá. Řekněme, že přesnější je formule Q2. Jestliže si na chvíli představíme, že formule Q2 je zcela přesná, můžeme chybu I(a,b) — Qi(a,b) aproximovat výrazem Q2(a,b) — Qi(a,b). Proto, je-li \Q2(a,b) — Qi(a,b)\ < e, kde e je vhodně zvolená tolerance, považujeme Q (a, b) := Q2(a, b) za přibližnou hodnotu integrálu I(a,b). V opačném případě, tj. pro \Q2(a, b) — Q±(a, b)\ > e, interval (a, b) rozdělíme, např. na dva stejně dlouhé intervaly (a, c) a (c, b), kde c = (a + 6)/2, na těchto intervalech spočteme nezávisle na sobě přibližné hodnoty Q(a, c) a Q(c,b) integrálů J(a, c) a I(c,b) a nakonec položíme Q(a, b) = Q(a, c) + Q(c, b). Algoritmus je rekurzivní: výpočet Q(a, c) a Q(c, b) na „dceřiných" intervalech (a, c) a (c, b) probíhá analogicky jako výpočet Q(a, b) na „mateřském" intervalu (a,b). Existuje celá řada programů pracujících na principu adaptivní integrace. Několik jich má také MATLAB. Program quad je založen na Simpsonově formuli Qg, přesnější program quadl vychází z Lobattovy formule řádu 5, viz (5.51). Teoretický základ obou programů je vyložen v článku [19]. Kromě toho MATLAB nabízí ještě program quadgk používající Gaussovy-Kronrodovy formule řádů 7 a 15. Místo programů quad a quadl MATLAB doporučuje používat program integrál založený na strategii popsané v článku [48]. Program quad používá jako Qi(a,b) složenou Simpsonovu formuli Qs řádu 3, Qi(a, b) = ^lf(a) + 4/(d) + 2/(c) + 4/(e) + /(&)] , kde h = b — a, c = |(a + 6), d = c — ^h, e = c + \h, a jako Q2(a, b) Booleovu formuli Qb řádu 5, q2u) = ľ^/W + 32/(rf) + 12/(c) + 32/(e) + W)] • Hruhý popis zaznamenává následující algoritmus QUAD: function Q (f, a, b, e); I\ := Qi(f, a, b); { Simpsonova formule Qs } I2 '■= q2{fi a, b)', { Booleova formule Q b } 131 c := (a + b)/2 ; { střed intervalu (a, b) } if abs (J2 — li) < e then {je dosažena požadovaná přesnost ? } Q := I2 { ano, hodnota J2 se akceptuje } else { ne, rekurzivní volání funkce Q na dceři- } Q := Q(f\ ai ci£) + Q(f\ ci b, s)', { ných subintervalech (a, c) a (c, b) } Kvůli jednoduchosti jsme do algoritmu QUAD nezahrnuli přenos funkčních hodnot f (a), f (d), f (c), f (e) a f (b) (používají se při vyhodnocení formulí Qi a Q 2) z mateřského intervalu (a, b) do dceřiných intervalů (a, c) a (c, b). Program quadl používá jako Qi(a,b) Lobattovu formuli řádu 5, Q1(a, b) = h{f(a) + f(b) + 5[/(c - ah) + /(c + ah)]} , o kde h = \{b — a), c = |(a + 6), a = ^ , a jako formuli Q2(a,b) Gaussovu-Kronrodovu formuli řádu 9, viz [19], Q2(a, 6) = J^{77[/(a) + /(&)] + 432[/(c - ^) + /(c + ^)] + 625[/(c - a/i) + /(c + a/i)] + 672/(c)} , kde (5 = Jestliže \Q2(a,b) — Qi(a,b)\ < e, klademe Q(a,b) = Q2(a,b), je-li však \Q2(a,b) — Qi(a,b)\ > e, interval (a,b) se opět rozdělí, tentokrát však na šest dceřiných intervalů (a, c — j3h), (c — j3h,c — ah), (c — ah,c), (c,c + ah), (c + ah, c + j3h), (c + j3h,b). Formule Qi a Q2 používají celkem sedm hodnot funkce f(x). Hodnoty v krajních bodech se přejímají z mateřského intervalu, takže na každém dceřiném intervalu je třeba spočítat pět nových funkčních hodnot. Při zjemňování dělení tedy využijeme všechny funkční hodnoty, které byly spočteny na mateřském intervalu. 5.3.5. Numerický výpočet vícerozměrných integrálů Dvojné intergály na obdélníku. Nechť D = (a, b) x (c, d) je obdélník, pak pb pd pb pd f(x,y)áxáy= / / f(x,y)áyáx= / g(x)dx, kde g(x) = / f(x,y)dy. D J a J c Ja J c Jestliže integrál J^g(x)dx aproximujeme formulí Qx(g) = Y^í=owí9(Xí) řadu px a integrály g(xi) = Jcd f(xi,y) dy aproximujeme formulemi Qy(g(xi)) = Y!j=o wjf(xi,yj) řádu py, dostaneme součinovou kvadraturní formuli n m Q{f) = Y.Y.c) + /(6> d) + /(fl>d) + . a + b \ / c + cř /a + b \ / c + d 16/ a + b c + d (5.54) Formule na referenčním čtverci. Formule se často uvádějí na referenčním čtverci D = (— 1, l)2. Užitím transformace a+b b—a c+d d—c lze integraci na obdélníku (a,b) x (c,d) převést na integraci na čtverci (—1, l)2. Gaussovy součinové formule. Pro Qx = Qy = Qcn dostáváme součinové Gaussovy formule. Je-li n = 0, obdržíme stejně jako v jedné dimenzi obdélníkovou formuli. Pro n = 1 dostaneme Gaussovu 2x2 součinovou formulí Q{g) = g(—a, —a) + g(a, —a) + g (a, a) + g{—ot, a), a která na referenčním čtverci D integruje přesně polynomy ^rf pro 0 < i, j < 3. Formule je tedy stejného řádu jako formule Simpsonova, má však jen čtyři uzly zatímco formule Simpsonova jich má devět! Pro n = 2 dostaneme Gaussovu 3x3 součinovou formulí 25 Q(g) = gY^(_a' ~a) + -<*) + g( D, /dx(Š,ri) dx(£,ri)\ Integrál na referenčním čtverci D spočteme třeba součinovou Gaussovou formulí. Umíme-li integrovat na jednom konvexním čtyřúhelníku, umíme to také na každé oblasti Q, kterou lze z konvexních čtyřúhelníku složit. Volbou dostatečně malých čtyřúhelníku lze integrál na Q spočítat dostatečně přesně. Jinou možností je vykrytí oblasti Q pomocí trojúhelníků. Proto je účelné znát dobré formule pro numerickou integraci na trojúhelnících. Dvojný integrál na trojúhelníku. Uvažujme tedy trojúhelník T s vrcholy P1? P2 a P3. Nejjednodušší formule je analogem obdélníkové formule (5.52). Jde o formuli Q(f) = \T\f(P0 (5.55) 134 kde \T\ je obsah trojúhelníka T a Pq = |(Pi + P2 + p3) je jeho těžiště. Formule (5.55) integruje přesně polynomy stupně 1, tj. je přesná pro f(x,y) = ax + by + c, kde a, 6, c jsou libovolná čísla. Stejnou přesnost má však tato formule i v případě, kdy T je libovolná ohraničená rovinná oblast. Skutečně, je známo, že pro souřadnice (xQ,y0) těžiště T0 oblasti T a pro její plochu \T\ platí x0 = -^JJ xdxdy, y0 = -^JJ ydxdy, 1 = -^JJ dxdy. Proto ax0 + by q + c = J J [ax + by + c] d:r dy a tedy formule (5.55) je pro polynom ax + by + c přesná. Pro /(x,í/) = arr + fa/ + c na trojúhelníku T platí /(P0) = §[/(Pi) + /(P2) + /(^3)]-Máme proto další formuli Q(f) = ^§Wi) + f(P2) + f(Ps)} , (5.56) která je na trojúhelníku T pro polynomy stupně 1 přesná. Formule W) = ^fWi) + /(SO + (5.57) kde Si = |(Pi + P2), S2 = \{P2 + P3) a 5*3 = 2(-^3 + -^1) Jsou středy stran trojúhelníka T, integruje přesně polynomy stupně 2, tj. x*^, 0 < i + j < 2. Jako cvičení si proveďme Důkaz. Zobrazení x = xx + (ar2 - + (x3 - xjrj, y = y1 + (y2 - + (ž/3 - Vi)v převádí referenční trojúhelník T s vrcholy Pl(0,0), P2(1,0), P3(0,1) na trojúhelník T s vrcholy P1(x1,y1), P2(x2,y2), P3(x3,y3) a platí 1 /.í-e // f(x,y)dxdy = 2\T\ í í f(^,r])d^dr] J Jt jo jo kde f(£,V) = f(xi + (x2 ~ + (x3 - x1)r],y1 + (y2 - y^ + (y3 - y^r]). Je-li f(x,y) kvadratický polynom v proměnných x,y, je /(£,??) kvadratický polynom v proměnných Proto stačí ověřit, že formule (5.57) integruje přesně polynomy stupně 2 na referenčním trojúhelníku T. Je-li f(x,y) lineární polynom, je |[/(Si) + f(S2) + f(S3)] = f (Po), formule (5.57) tedy přechází ve formuli (5.55) a ta je pro lineární polynomy přesná. Zbývá proto prověřit 135 členy £2, £77, rj2 na T. Přímým výpočtem zjistíme, že 1 /.í-e o ./O 1 fl-£ 1 11 f2dfdí7 = — =--- s s ' 12 2 3 o ./o 1 o Jo d^dq rf d£ dv7 1 _ 1 1 24 ~ 2 ' 3 1 _ 1 1 12 ~ 2 ' 3 1 11 1 -•0 +---+0-- 2 2 2 2 . □ Na trojúhelnících lze konstruovat také kvadraturní formule Gaussova typu, viz [63]. Na referenčním trojúhelníku s vrcholy Pi(0,0), p2(l,0) a P3(0,1) lze integrál 1 ľi-( Kí) >o Jo pomocí transformace 77 = *(i - o převést na tvar f(€,v) dV d£ Hf)= Í Al-0/(e,*(l-0)dedí. Jo Jo >0 JO Další transformací £ = Ul-u), t = Ul-v) dostaneme 1 ri I{f) = \ / {l + u)f{\{l-u)Ml + u){l-v))dudv 1 ľl (l + u)f(u, v) du dv . '-1J-1 j-1J-1 Tento integrál již lze počítat součinovou kvadraturní formulí: n n (n+l)2-l i,j=0 hj=0 í=0 kde Qu{ip) '■= '^!i=owi"llJi.ui) Je Gaussova formule s váhou 1 + u na intervalu (—1,1) a Qv(íp) := Sj=o "^jVí^j) Je Gaussova-Legendrova formule. Výsledná formule integruje přesně polynomy ^rf pro 00. h\ — bk — ak — 2 (bk-i — ak-i) 2-k(b0 - a0). 140 Střed Xk+i intervalu (a,k,bk) aproximuje kořen x* s chybou \xk+i -x*\< \{bk - ak) = 2-k-\b0 - a0). (6.2) Pro k —> oo zřejmě \Ik\ —> 0 a xk —> x*. Příklad 6.2. Metodu bisekce aplikujeme na rovnici z příkladu 6.1. Jako počáteční zvolíme interval (a0,&o) = (1>2). Připomeňme, že /(l) > 0, f (2) < 0. Proto také f{a>k) > 0, f{bk) < 0 pro každé k. Posloupnost intervalů zaznamenáváme do tabulky. Po pěti krocích má interval (a5,65) délku 2~5 = 0,03125 a x6 = 1,421875 aproximuje kořen s chybou nepřesahující 2-6 = 0,015625. □ Metoda bisekce konverguje pomalu: protože 10_1 = 2~3'32, zpřesnění o jednu dekadickou cifru vyžaduje v průměru 3,32 kroku. Všimněte si, že rychlost konvergence vyjádřená vztahem (6.2) vůbec nezávisí na funkci f(x). To proto, že jsme využívali pouze znaménka funkčních hodnot. Když tyto hodnoty (a případně také hodnoty derivací f(x)) využijeme efektivněji, můžeme dosáhnout podstatně rychlejší konvergence. Takové „zpřesňující" metody však konvergují pouze tehdy, když pro ně zvolíme dostatečně dobrou počáteční aproximaci. Vhodná počáteční aproximace bývá často určena právě metodou bisekce. k h xk+l f(Xk+l) 0 1 2 1,5 < 0 1 1 1,5 1,25 > 0 2 1,25 1,5 1,375 > 0 3 1,375 1,5 1,4375 < 0 4 1,375 1,4375 1,40625 > 0 5 1,40625 1,4375 1,421875 6.2. Zpřesňující metody Snad nejznámější mezi nimi je Newtonova metoda nebo-li metoda tečen. Jak je u iteračních metod zvykem, vyjdeme z počáteční aproximace xq a postupně počítáme xi,X2, ■ ■ ■ způsobem, který si teď vysvětlíme. Předpokládejme, že známe xk a máme určit lepší aproximaci xk+í. Uděláme to tak, že bodem [xk, f{xk)} vedeme tečnu ke křivce y = f(x) a průsečík tečny s osou x považujeme 141 x. Tak dostaneme předpis za Xk+i- Do rovnice tečny V = f (x k) + f'(xk)(x - x k) tedy dosadíme y := 0, vypočteme x a položíme Xk+i xk+1 = ^-Jf^y (6-3) Výpočet ukončíme a Xk+i považujeme za dostatečně přesnou aproximaci kořene, pokud \xk+i - xk\ < e, případně \xk+i - xk\ < e\xk\ nebo |/(rrfc+i)| < e, (6.4) kde e je požadovaná přesnost. Tím sice není zaručeno, že také \xk+i — x*\ < e, je to ale obvyklý způsob, pomocí něhož iterace ukončíme. Tato tzv. stop kritéria jsou vhodná i pro další metody, které v tomto odstavci uvedeme. •f(x) ■y=0 o [xJW] (y-yi)/(x-xi) = f (x.) 3 2 Obr. 6.2: Newtonova metoda Příklad 6.3. Newtonovou metodou určíme kladný kořen rovnice z příkladu 6.1. Zvolíme x0 = 2. Výpočet ukončíme, když \ f{xk)\ < 10~5. Poslední sloupec vyžaduje znalost přes- k xk f(xk) f'(xk) f(xk)/f'(xk) 0 2 -5,362810 -13,66459 0,392460 0,563550 1 1,607540 -1,156877 -7,899490 0,146450 0,171089 2 1,461090 -0,143158 -5,966406 0,023994 0,024640 3 1,437096 -0,003653 -5,662524 0,000645 0,000646 4 1,436451 -0,000003 0,000000 ného řešení. To získáme provedením ještě jednoho kroku Newtonovy metody. Dá se ukázat, 1,43645032 má všechny cifry platné. Požadovaná přesnost byla tedy dosažena ve čtvrtém kroku, x4 = 1,43645 má všechny cifry platné. □ 142 Konvergence Newtonovy metody. Nechť ek = xk — x* je chyba v k-tém kroku. Ukážeme si, jak souvisí s chybou ek+i v kroku následujícím. Z Taylorova rozvoje f{x*) okolo xk dostaneme 0 = f(x*) = f(xk) + (x* - xk)f{xk) + \(x*- xk)2f"(0 , kde £ je nějaký blíže neurčený bod intervalu, jehož krajní body jsou xk a x*. Když rovnici dělíme f'(xk), dostaneme — ( * _ \2_/_(0_ _ f(Xk) ,/*_ \ _ * V* Xk) f (xk) - r(xk)+ [x Xk)~x _ f(xk) Xk f'(xk) x — Xk+\ takže máme i no 2 ,„ a když xk —> x*, pak 6'« -C. kde C-lf"^ 4 ' 2 /'(*•) • Protože chyba ek+1 je úměrná druhé mocnině chyby ek, říkáme, že Newtonova metoda konverguje kvadraticky nebo také, že je druhého řádu. Uveďme si přesnější definici: Necht x0,x1,x2,... je posloupnost, která konverguje k *. Když existuje číslo p a konstanta C/0 taková, že lim^±^ = c) (6.6) fc^oo \ek\P pak p se nazývá řád konvergence posloupnosti a C je chybová konstanta. Špeciálne říkáme, že lineární, p = 1 a C < 1, konvergence je superlineární, když p > 1, kvadratická, p = 2 . Řekneme, že daná metoda je řádu p, jestliže všechny konvergentní posloupnosti získané touto metodou mají řád konvergence vetší nebo rovný p a nejméně jedna z těchto posloupností má řád konvergence rovný přesně p. V blízkosti kořene platí: čím vyšší řád p, tím rychlejší konvergence, neboť lefc+i| ~ C|efc|p j takže když \ek\ je malé, pak |efc+1| je tím menší, čím je p větší. Víme už, že když Newtonova metoda konverguje, pak rychlost konvergence xk —> x* je alespoň kvadratická (pro některé funkce / může být i vyšší). Zbývá ještě zodpovědět otázku, za jakých podmínek je zaručeno, že konvergence vůbec nastane. Ukažme si to. 143 Předpokládejme, že v nějakém okolí I kořene platí l f"(y) < m pro všechna x,y E I. 2 f (x) Když Xk G /, pak z (6.5) plyne |efc+i| < m\ek této úvahy dostaneme 2 nebo-li |mefc+i| < |me/«|2. Opakováním mefc_|_i| < |me/«|2 < |me/«_i|4 < |me/«_2|8 < |^iefc-3|16 < • • • < |meo|r , kde r = 2 ■fc+i Když platí |meo| < 1, pak jistě |efc+i| ->0a tedy rr^+i —)• x*. Dokázali jsme tedy, že Newtonova metoda vždy konverguje za předpokladu, že počáteční aproximaci zvolíme dostatečně blízko ke kořenu. Dobrou počáteční aproximaci xq můžeme získat např. metodou bisekce. Vhodným spojením metody bisekce a Newtonovy metody lze sestrojit kombinovanou metodu, která vždy konverguje, viz např. procedura rtsaf e v [40]. V blízkosti kořene se přitom uplatní jen Newtonova metoda, takže konvergence je rychlá. Pomocí náčrtku snadno ověříme, že Newtonova metoda konverguje, když jsou splněny tzv. Fourierovy podmínky: a) / G C2 {a, b) a přitom f(a)f(b) < 0; b) /' a /" nemění na intervalu (a, b) znaménko a f'(x) ^ 0 pro každé x G (a, b); c) jako Xq volíme ten z bodů a, b, v němž je f(xo)f"(xo) > 0. Praktický význam však Fourierovy podmínky nemají, neboť pro velké b — a obvykle tyto podmínky buďto neplatí nebo je neumíme snadno ověřit. Metoda sečen. V každém kroku Newtonovy metody musíme počítat hodnotu f{xk) a derivaci f'{xk). Když vzorec pro výpočet derivace nemáme k dispozici, nebo když náklady spojené s výpočtem derivace jsou vysoké, můžeme derivaci aproximovat podílem Tak dostaneme metodu sečen: zadáme dvě počáteční aproximace x$, X\ a počítáme x2,x3,... podle předpisu Název metody vychází z její geometrické interpretace: xk+i je rr-ová souřadnice průsečíku přímky procházející body [xk-i, f{xk-i)} a [xk,f(xk)] s osou x: f M - f(xk-i) xk xk—l (6.7) xk xk—l Protože tato přímka protíná graf funkce /, je to sečna, odtud metoda sečen. 144 Obr. 6.3: Metoda sečen Všimněte si, že v každém kroku vyčíslujeme hodnotu funkce jen jednou: vypočteme f(xk), hodnotu f(xk-i) převezmeme z předchozího kroku. Dá se odvodit, že rychlost konvergence metody sečen je řádu p = |(1 + y/5) ~ 1,618, tedy poněkud nižší než u Newtonovy metody. Číslo r = (y/E— 1)/2 »2 0,618 je tzv. poměr zlatého řezu. Příklad 6.4. Metodou sečen určíme kladný kořen rovnice z příkladu 6.1. Zvolíme x0 = 1, x\ =2. Výpočet ukončíme, když bude \f{xk)\ < 10~5. Až do čtvrtého kroku (výpočet x§) je konvergence poměrně pomalá. Teprve v posledních dvou krocích se plně uplatnila rychlá konvergence metody sečen. □ k Xk f{Xk) xk - x* 0 1 1,365884 -0,436450 1 2 -5,362810 0,563550 2 1,202994 0,991513 -0,233456 3 1,327357 0,543420 -0,109094 4 1,478177 -0,246970 0,041726 5 1,431051 0,030349 -0,005400 6 1,436208 0,001370 -0,000242 7 1,436452 -0,000008 0,000001 Metoda sečen zaručeně konverguje, pokud zvolíme startovací hodnoty Xq db X~\_ dostatečně blízko ke kořenu x*. To lze zajistit např. metodou bisekce. Další metodou, jak získat dobré startovací aproximace, je varianta metody sečen známá jako Metoda regula falši. Počáteční aproximace x0 a X\ se volí tak, aby f(xo)f(xi) < 0. Nová aproximace Xk+± se opět získá jako průsečík sečny s osou x. Sečna však tentokrát spojuje bod [xk,f(xk)] s bodem [xe,f(xe)], kde l je největší index, pro který f(xk)f{xe) < 0. Výpočet tedy probíhá podle vzorce xk+i — xk Xk - xe f(xk) - f(xe) f{Xk) k 1,2, (6.8) 145 Přitom pro k = 1 je £ = 0, a po výpočtu xk+i určíme index í takto: když f(xk+i)f(xe) > 0, pak l = k, v opačném případě se l nemění. Výhodou metody regula falši je to, že podobně jako metoda bisekce vždy konverguje: interval Ik, jehož koncové body jsou xk a X£, obsahuje kořen. Na rozdíl od metody bisekce však délka intervalu Ik nekonverguje k nule. Rychlost konvergence metody regula falši je jen lineární. Metodu regula falši (podobně jako metodu bisekce) proto používáme pouze pro získání dobré počáteční aproximace, pak přecházíme na rychlejší metodu. Obr. 6.4: Regula falsi Příklad 6.5. Metodou regula falsi určíme kladný k i f M Xk - x* 0 1 1,365884 -0,436450 1 0 1 2 -5,362810 0,563550 2 1 2 1,202994 0,991513 -0,233456 3 1 2 1,327357 0,543420 -0,109094 4 1 2 1,389245 0,253012 -0,047205 5 1 2 1,416762 0,108896 -0,019688 6 1 2 1,428369 0,045283 -0,008081 7 1 2 1,433156 0,018561 -0,003295 15 1 2 1,436448 0,000014 -0,000002 16 1 2 1,436449 0,000006 -0,000001 kořen rovnice z příkladu 6.1. Zvolíme xq = 1, x\ = 2. Z tabulky je vidět, že počínaje druhým krokem je X£ = 2. Dále je zřejmé, že do čtvrtého kroku je přesnost metody regula falši srovnatelná s přesností metody sečen, viz příklad 5.4. V následujících krocích je už ale patrná lineární konvergence, podmínka \f(xk)\ < 10~5 je splněna až pro Xi$. Všimněte si: délka intervalů Jfc = (xk,2), k > 2, konverguje k číslu x — x* = 0, 563550. □ Steffensenova metoda se řídí předpisem xk+l — xk f{Xk) kde dh f(xk + f{xk)) - f(xk) f M (6.9) 146 je speciálně spočtená aproximace f'{xk) připomínající dopřednou diferenci: f\xk) « 4 = f(Xk + \fc) ~ /(a?fc) , kde hk = f(xk). hk V každém kroku se funkce / vyhodnocuje dvakrát: kromě hk = f(xk) se počítá ještě také f(xk + hk). Oproti metodě sečen je tu jedno vyhodnocení funkce navíc. Na druhé straně lze ukázat, že rychlost konvergence Steffensenovy metody je stejná jako u Newtonovy metody, tedy kvadratická. Metoda inverzní kvadratické interpolace. Metoda sečen používá dva předchozí body k získání dalšího, proč tedy nepoužít tři? Body [xk_2, f(xk-2)], [xk-i,f(xk-i)] a [xk,f(xk)] můžeme proložit parabolu P2(x) a hledat její průsečík s osou x. Za další aproximaci xk+1 pak zvolíme ten z kořenů polynomu P2(x), který je blíž k předchozí aproximaci xk. Na tomto principu je založena Múllerova metoda. Potíž jev tom, že parabola nemusí rr-ovou osu protnout, neboť kvadratická funkce P2{x) nemusí mít reálné kořeny. Výpočet je proto třeba provádět v komplexní aritmetice, a to i v případě, že rovnice f(x) = 0 má jen reálné kořeny. Místo paraboly v proměnné x můžeme třemi body proložit parabolu Q2(y) v proměnné y, určenou interpolačními podmínkami Q2{f{xk-2)) = Xk-2 , Q2(f(Xk-l)) = Xk-1 , Q2{f{xk)) = xk . Jsou-li hodnoty f(xk-2), f(xk-i) a f{xk) navzájem různé, parabola Q2{y) existuje a protíná osu x v jediném bodě. Klademe tedy xk+1 = Q2(0). Tato metoda je známa jako metoda inverzní kvadratické interpolace. Její konvergence je superlineární řádu p ~ 1, 839, viz [21]. Brentova metoda. Metoda inverzní kvadratické interpolace spolu s metodou sečen a metodou bisekce jsou základem populární Brentovy metody, viz např. [37], dále také program zbrent v [40] nebo funkce f zero v MATLABu. Předností Brentovy metody je to, že nepoužívá derivace funkce /, je spolehlivá, tj. zaručeně konverguje ke kořenu, a po několika počátečních krocích se chyba rychle zmenšuje, neboť rychlost konvergence je superlineární. Startovací body Xq db X\ J e třeba zvolit tak, aby f(xo)f(xi) < 0. Aproximace x2 se určí metodou sečen. Nechť (<2i,&i) je interval, jehož koncové body jsou xq a x\. Pak zřejmě x2 G (a\,b\). Další aproximaci x3 budeme hledat v kratším intervalu (02,^2) C (a\,b\), jehož jeden koncový bod je x2 a druhý je ten z bodů a\, b\, v němž má funkce / opačné znaménko než v x2, takže f(a2)f(b2) < 0 a (02^2) obsahuje kořen. Při výpočtu x3, rr4,... Brentova metoda používá jednu ze tří základních metod tak, aby nová aproximace xk+i G (ak,bk). Dále se vybere interval (ak+i,bk+i) C (ak,bk) obsahující kořen. Jedním z jeho koncových bodů je xk+i, druhým je ten z bodů ak, bk, v němž má funkce / znaménko opačné než v xk+i- Při výpočtu xk+i se přednostně použije metoda inverzní kvadratické interpolace, pokud takto získaná aproximace není dostatečně dobrá, zkusí se metoda sečen, a když ani ta nezabere, použije se jako záchrana metoda bisekce. Podrobnější popis Brentovy metody je uveden např. v [37], [40]. Příklad 6.6. Budeme hledat kladný kořen rovnice z příkladu 6.1 a porovnáme jednotlivé metody podle počtu pk kroků a počtu pf vyhodnocení funkce / (u Newtonovy metody 147 do pf zahrneme také počet vyhodnocení derivace /'). Pro výpočet Brentovou metodou jsme použili upravený program fzerotx, viz [37]. Výpočet jsme zahájili takto: v metodě bisekce počáteční interval (<20)&o) = (1)2), v Newtonově a Steffensenově metodě x0 = 2, v ostatních metodách x0 = 1 a X\ = 2. Použili jsme stop kritérium \j(xk)\ < e. V tabulce jsou uvedeny hodnoty pk/pf pro několik tolerancí e. Nejmenší pk má Newtonova metoda, nejmenší pf Brentova metoda. Z výpisu o průběhu výpočtu Brentovou metodou vyplývá, že se ani jednou nepoužila bisekce, proto tak skvělý výsledek. □ Poznámka {0 metodě prosté iterace). Předpokládejme, že funkce g G C(a, b) splňuje tyto dvě podmínky: e 1(T3 10~6 io-9 io-12 io-15 bisekce 9/11 19/21 29/31 39/41 49/51 regula falsi 10/12 17/19 25/27 33/35 40/42 sečny 6/8 7/9 8/10 8/10 9/11 Newton 4/8 5/10 5/10 6/12 6/12 Steffensen 4/8 5/10 6/12 6/12 7/14 Brent 6/7 7/8 7/8 8/9 8/9 (a) g(x) G (a, b) \/x G (a, b), existuje číslo q, 0 < q < 1, takové, že \g(x) — g(y)\ < q\x — y\ Wx, y G {a, b) . Pak rovnice x = g{x) má v (a, b) jediné řešení x* a posloupnost postupných aproximaci xk+i = g(xk), k = 0,1,..., konverguje k x* pro každé x0 G (a,b). Bod x* = g (x*) se nazývá pevný bod funkce g (zobrazuje x* na sebe). Následuje náčrt důkazu. 1) Existence. Z podmínky (a) plyne g (a) > a, g{b) < 6, odtud {a —g {a))-{b —g {b)) < 0, takže v (a, b) leží kořen rovnice x — g (x) = 0. 2) Jednoznačnost. Nechť pro x*, y* G (a, b) platí x* = g (x*), y* = g (y*). Podle (/3) \x* — y*\ = \g{x*) — g{y*)\ < q\x* — y*\, což je možné jedině když x* = y*. 3) Konvergence. Podle (/3) je \xk — x*\ = \g(xk-i) — g(x*)\ < q\xk-i — x*\. Opakováním této úvahy dostaneme nakonec \xk — x*\ < qk\xo — x*\ —> 0 pro k —> oo, takže Místo podmínky (/3) můžeme pro g G C1 (a, b) použít silnější podmínku (/?') \g'(x)\ x* je řádu alespoň dva (což potvrzuje nám již známý výsledek). Dá se také dokázat, že když |^'(rr*)| > 1, pak pro xq ý x* posloupnost postupných aproximací k x* konvergovat nemůže. □ Příklad 6.7. Nelineární rovnice f(x) = x2 — 2x — 3 = 0 má kořeny x* = — 1 a x* = 3. Prozkoumáme konvergenci ke kořenu x* = 3 pro několik iteračních funkcí g. 1. g{x) = {x2 — 3)/2, g'{x) = x, \g'(3)\ = 3, pro xq ^ 3 konvergence nenastane. 2. g{x) = y/2x + 3, g'(x) = 1 /y/2x + 3, |(?'(3)| = 1/3, lineární konvergence nastane např. pro libovolné x0 z intervalu (2,4), neboť v něm |<7'(rr)| < \/y/l. 3. g{x) = 2 + 3/x, g'{x) = —3/x2, \g'(3)\ = 1/3, lineární konvergence nastane např. pro libovolné Xq z intervalu (2,4), neboť v něm |<7'(rr)| < 3/4. 4. g(x) = (x2 + 3)/(2x-2), g'(x) = 2(x2 -2x-3)/(2x-2)2, ^'(3) = 0, g"{3) = 1/2, kvadratická konvergence nastane např. pro xq z intervalu (2,5; 3,5), v němž |(/(:r)| < 0,39, jak snadno zjistíme. Ověřte, že tato iterační funkce odpovídá Newtonově metodě. □ Poznámka (O násobných kořenech). Řekneme, že kořen x* rovnice f(x) = 0 má násobnost q, jestliže funkce g{x) = f(x)/(x — x*)q je v bodě x* definována a kořen v něm už nemá, tj. když 0 < |(?(íc*)| < oo. Jestliže má funkce f(x) v okolí kořene x* spojité derivace až do řádu q včetně, pak f^\x*) = 0, j = 0,1,..., q — 1. Některé z doposud uvedených metod lze použít také pro nalezení násobných kořenů, konvergence však bývá pomalejší. Tak třeba Newtonova metoda konverguje jen lineárně s chybovou konstantou C = (q — 1)/q. Když očekáváme, že rovnice f(x) = 0 může mít násobné kořeny, je vhodné využít toho, že funkce u(x) = f(x)/f'(x) má pouze jednoduché kořeny. Místo rovnice f(x) = 0 tedy řešíme rovnici u(x) = 0. □ Poznámka {O dosažitelné přesnosti). Nechť x^ je aproximace jednoduchého kořene rovnice f(x) = 0. Pomocí věty o střední hodnotě dostaneme f(xk) = f(xk)-f(x*) = f(axk-x*), kde £ je nějaký bod ležící mezi xk a x*. Předpokládejme, že při výpočtech pracujeme jen s přibližnými hodnotami f(xk) = f(xk) + Sk, přičemž \ôk\ < ô. Pak nejlepší výsledek, 149 kterého můžeme dosáhnout, je f{xk) = 0. V tom případě \f{xk)\ < ô, takže \Xk - x* = 1 < pokud se /' v blízkosti kořene příliš nemění. Vypočítat x* s menší chybou než e* nelze. Proto se e* nazývá dosažitelná přesnost kořene x*. Všimněte si: když je velikost směrnice |/'(rr*)| v kořenu x* malá, je dosažitelná přesnost e*x velká, viz obr. 6.5. V takovém případě je výpočet kořene x* špatně podmíněný problém: malá změna / vyvolá velkou změnu x*. -f(Xo Obr. 6.5: Dosažitelná přesnost kořene Podobná úvaha pro kořen násobnosti q dává dosažitelnou přesnost Exponent l/g je příčinou toho, že výpočet násobného kořene je obecně špatně podmíněná úloha. Tak třeba pro f{x) = xq je x* = 0 kořen násobnosti g a e*x = ó1^. Pro g = 15 a ô = 10~15 dostaneme e*x = 0,1! □ Poznámka (O kořenech polynomů). Polynom pn(x) stupně n má n obecně komlexních kořenů. Pro výpočet jednoduchých reálných kořenů funkce f(x) = pn(x) lze použít libovolnou z dosud uvedených metod. O tom, jak se vypořádat s případnými násobnými kořeny, pojednává výše uvedená poznámka. Pro výpočet komplexních kořenů lze použít např. Newtonovu metodu, v níž jako počáteční aproximaci volíme komplexní číslo. Pokud nás zajímají všechny kořeny polynomu, tak po nalezení reálného kořene x* polynom pn(x) dělíme členem x — x*. Tak dostaneme polynom pn-i{x) = pn(x)/(x — x*) stupně n — 1 a dále hledáme jeho kořeny. Když je x* komplexní kořen, pak je kořenem také komplexně sdružené číslo x*. V tom případě dělíme pn(x) kvadratickým polynomem {x — x*){x — x*), jehož koeficienty jsou reálná čísla. Tak dostaneme polynom pn-2{x) stupně n — 2 s reálnými koeficienty a pokračujeme hledáním jeho kořenů. Pro výpočet kořenů polynomů jsou navrženy také speciální, velmi efektivní metody, o nichž lze získat informace např. v [55]. □ 6.3. Soustavy nelineárních rovnic Mnohé z metod určených pro řešení jedné nelineární rovnice lze zobecnit na řešení soustav nelineárních rovnic. Bohužel to neplatí pro metodu bisekce ani pro metodu regula 150 falši. A co je ještě horší: pro soustavy nelineárních rovnic není známa žádná univerzální metoda, která by dokázala spolehlivě určit dostatečně dobrou počáteční aproximaci řešení. Uspokojivou počáteční aproximaci proto musíme odhadnout. Pomoci nám může znalost konkrétního problému, který na řešení nelineární soustavy vede. Odhad řešení lze někdy získat také na základě pomocných výpočtů provedených za zjednodušujících předpokladů, například tak, že nelineární problém aproximujeme vhodným problémem lineárním. Uvažujme tedy soustavu n nelineárních rovnic o n neznámých (6.10) kde ,%2, ■ ■ ■ i X-n) o, , x2, ■ • • j xn) o, neb o-li o, ,x2, • • j xn) o, (' Xl\ x2 , f(x) / fi(x1,x2,.. f2(xi,x2,. . j xn) ^ j xn) _ /7i(x)\ /2(x) a o = 0 \xn ) \fn{.X1,X2, . . i Xn) J w Řešením soustavy (6.10) je každý číselný vektor x*, pro který f(x*) = o. V tomto odstavci budeme automaticky předpokládat, že funkce f(x) je spojitá a má tolik spojitých derivací, kolik je jich v dané situaci zapotřebí. Newtonova metoda a její modifikace. Newtonovu metodu odvodíme z Taylorova rozvoje o = f (x*) = f (xfc) + f'(xfc)(x* - xfc) + • • • = f (xfc) + f'(xfc)(x* - xfc) tak, že přibližnou rovnost nahradíme rovností a místo x* píšeme Xfc+1, tj. počítáme f'(xfc)(xfc+i - x*.) = -f(xfc) , (6.11) kde f'(x) je Jacobího matice funkce f(x), tj. /9A(x) 9A(x) 9A(x)\ dxi dx2 0xn df2 (x) df2 (x) 9Í2 (x) ť(x) = dxi dx2 0xn «9/n(x) «9/n(x) «9/n(x) \ dxi dx2 dxn ) Výpočet organizujeme tak, že nejdříve vyřešíme soustavu lineárních rovnic f'(xfc) dfc = -f (xfc) a pak určíme xfc+i = xfc + dk . (6.12) Když je matice f'(xfc) regulární, můžeme lineární soustavu rovnic vyřešit metodami popsanými v kapitole 2 (je-li f'(xfc) singulární, je třeba metodu vhodně modifikovat, popř. 151 výpočet jako neúspěšný ukončit). Pro velké n a řídkou matici f'(x) lze efektivně použít iterační metody (x^ je dobrá počáteční aproximace, navíc x^+i není třeba počítat příliš přesně, neboť je to jen mezivýsledek na cestě k nalezení x*). Newtonova metoda konverguje, pokud je počáteční aproximace x0 dostatečně blízko kořene x*. Rychlost konvergence je kvadratická, tj. existuje okolí 0(x*) bodu x* a konstanta C taková, že ||xfc+i - x*|| < C||xfc - x*f Vxfc G O (x*). Pro ukončení iterací použijeme některé ze stop kriterií ||xfc+i - xjfeH < e, ||xfc+i - xjfeH < e||xfc|| nebo ||f (xfc+i) || < e , (6.13) kde e je zadaná přesnost. Tato kritéria jsou obecně použitelná také pro další metody, které si v této kapitole uvedeme. V každém kroku Newtonovy metody je třeba řešit soustavu lineárních rovnic (6.11), což pro velké n představuje značný objem výpočtů. Navíc je třeba v každém kroku vypočítat n2 složek dfi(xk)/dxj matice f'(xfc). To může být také velmi obtížné v případě, že parciální derivace nejsou určeny jednoduchými vzorci. Proto se někdy postupuje tak, že se f'(xfc) přepočítává jen občas, např. každých m kroků, tj. Xfc+1 počítáme podle f (xp)(xfc+i - x*.) = -f(xjfe), k =p,p+ l,...,p + m- 1, p = 0,m,2m,.... V takovém případě je účelné rozložit matici f'(xp) pomocí LU rozkladu na součin dolní trojúhelníkové matice Lp a horní trojúhelníkové matice Up, f(xp) = LpUp. Tato náročná operace se provede jen pro k = 0,m, 2m,.... Aproximaci x^+i pak dostaneme řešením dvou soustav lineárních rovnic s trojúhelníkovými maticemi, Lpy =-f(xjfe), Updfc=y, xk+1 = xk + dk . Pro k (jz {0, m, 2m,...} tedy provádíme jen „laciné" zpětné chody. V propracovaných algoritmech se přepočet Jacobiho matice nevolí staticky, tj. každých m kroků, ale dynamicky, tj. pro p = 0 < pi < p2 < ■ ■ ■, a to podle rychlosti poklesu ||f(xfc)||. Parciální derivace v Jacobiho matici f'(x) se často aproximují pomocí diferenčních podílů, dfi(x) , -i \ _ fí(xij ■ ■ ■, Xj -\- hj,..., xn) — /j(x) kde hj ý 0 Jsou vhodně zvolené parametry, h = (h\, h2,..., hn)T. Pro malé hj > 0 je Ajj(x, h) standardní aproximace dfi(x)/dxj dopřednou diferencí. Matice A(x, h) s prvky Ajj(x, h) je aproximací Jacobiho matice f'(x). Když tedy v (6.11) nahradíme f'(xfc) pomocí A(xfc,hfc), dostaneme diskretizovanou Newtonovu metodu A(xfc,hfc)(xfc+i - xfc) =-f(xfc) . (6.14) 152 Zobecněnou metodu sečen dostaneme, když za j-tou složku h- vektoru dosadíme = ^ — x^ (pro n = 1 je pak rovnice (6.14) totožná s předpisem (6.7)) a zobecněnou Steffensenovu metodu obdržíme, když položíme lép = fj(xk) (pro n = 1 je pak rovnice (6.14) totožná s předpisem(6.9)). Rád konvergence obou metod je stejný jako v jedné dimenzi, tj. 1,618 pro metodu sečen a 2 pro Steffensenovu metodu. Metoda sečen potřebuje dvě dostatečně dobré počáteční aproximace x0 a xx. Příklad 6.8. Newtonovou metodou určíme kořeny soustavy rovnic f(x,y) = x3 - xy2 -1 = 0, g(x,y) = y3 -2x2y+ 2 = 0. Podle (6.12) určíme x^+i = (xk+i,yk+i)T takto: ífx(xk,yk) fy(xk,yk)\ íak\ = f-f(xk,yk)\ fxk+1\ = íxk + ak\ \9x(xk,yk) gy{xk,yk)) \bk) \-g{xk,yk)) ' \yk+i) \yk + bk) ' Soustavu rovnic je výhodné vyřešit pomocí Crammerova pravidla, tj. n — ^x h — ^y ak —--' ~Ď" ' kde D = fx9y ~ fy9x , Dx = fgy - fyg, Dy = fxg - fgx , přičemž hodnoty všech funkcí se počítají v bodě [xk,yk]. Z obrázku 6.6 zjistíme, že soustava má celkem tři kořeny. Vybereme si třeba ten, který leží ve čtverci Q := {[x,y] | — 2 < x < —1,1 < y < 2}, a jako počáteční aproximaci zvolíme xq = —1, yo = 1. Výpočet ukončíme, když ||f(xfc+i)||oo = max{\f(xk+1,yk+1)\ ; \g(xk+1,yk+1)\} < 1CT5 . Výpočet je zaznamenán v následující tabulce (fk a gk označuje hodnotu v bodě [xk,yk]). k xk Vk fk 9k Xk - x* Vk-y* 0 -1 1 -1 1 0,394069 -0,631182 1 -1,5 2 1,625 1 -0,105931 0,368818 2 -1,379562 1,673966 0,240186 0,318968 0,014507 0,042784 3 -1,392137 1,629879 0,000193 0,012219 0,001932 -0,001303 4 -1,394072 1,631182 -0,000005 -0,000018 -0,000002 0,000000 5 -1,394069 1,631182 -0,000000 -0,000000 0,000000 0,000000 Všimněte si, že v blízkosti kořene je konvergence velmi rychlá. Přesné řešení jsme aproximovali pomocí x5. rr5 = —1,39407 a y5 = 1,63118 mají všechny cifry platné. □ Zvýšení spolehlivosti metod Newtonova typu. Newtonova metoda a její varianty nemusejí konvergovat, když startujeme daleko od kořene. Je však možné přijmout jistá opatření, která oblast konvergence těchto metod podstatně rozšíří. 153 Obr. 6.6: Soustava dvou nelineárních rovnic Nejjednodušší je použít tlumenou Newtonovu metodu, ve které se Newtonův (nebo aproximovaný Newtonův) krok počítá jako obvykle, ale pak se jako další aproximace bere x^+i = + A^d^, kde A& je číselný parametr. Daleko od kořene bývá krok d^ nespolehlivý, mnohdy příliš velký, a tak se můžeme pokusit vybrat A& tak, aby x^+i byla lepší aproximace x* než X&. Jedním ze způsobů, jak toho dosáhnout, je sledovat ||f(xfc)||2 a zajistit, aby v každé iteraci délka vektoru f(x^) dostatečně poklesla. Parametr A& je také možné určit minimalizací funkce xy := {x + ŕ(y - x) | 0 < t < 1} G íl Jestliže íl je uzavřená konvexní oblast a Qí G Cľ(íl), i = 1,2,... ,n, pak místo podmínky (/3) můžeme použít silnější podmínku 03') ||g'(x)|| 0, pak podmínka (a) plyne z podmínky (/3): ||g(x) - x* || = ||g(x) - g(x*) II < g||x - x* || => (x G íl => g(x) G íl) . Přibližný výpočet kořene x* rovnice x = g(x) podle formule x^+i = g(x^) se nazývá metoda prosté iterace nebo také metoda postupných aproximací Podmínky (a) a (/3) nebo (/?') jsou postačující pro konvergenci této metody. Příklad 6.9. Metodou prosté iterace určíme řešení soustavy rovnic x = 0,2 + 0,l(-xy2 + 3x) , y = 0,6 + 0,l(-x2y3-2y) v oblasti íl = {[x,y] |0 |y xl | cos c/a| kde 9\ je úhel, který svírají levý a pravý vlastní vektor příslušný k vlastnímu číslu A. Ukázali jsme tedy, že pro jednoduché vlastní číslo A matice A a odpovídající vlastní číslo A + AA mírně pozměněné matice A + AA přibližně platí |AA| < k(A)||AA||2, kde k(A) = ^— (7.4) | cos t)\ \ je tak zvané číslo podmíněnosti vlastního čísla A matice A. Všimněte si, že pro symetrickou matici a jednoduché vlastní číslo x = y, takže 9\ = 0 a příslušné číslo podmíněnosti k(A) je rovno jedné. Jsou-li však levý a pravý vlastní vektor téměř kolmé, je číslo podmíněnosti k(A) velké, takže změna AA vlastního čísla A vyvolaná malou změnou AA matice A je velká. V MATLABu počítá čísla podmíněnosti k(Aj) všech vlastních čísel \, i = 1, 2,..., n, funkce condeig. Analýza podmíněnosti násobných vlastních čísel komplikovanější. Platí například, že násobná nebo téměř násobná vlastní čísla jsou špatně podmíněná. Také analýza citlivosti vlastních vektorů je poměrně složitá. Ukazuje se, že když matice má dobře podmíněná a navzájem dostatečně vzdálená vlastní čísla, pak jsou vlastní vektory dobře podmíněné, [42]. Jsou-li však vlastní čísla špatně podmíněná, nebo když existují skupiny navzájem blízkých vlastních čísel, pak jsou vlastní vektory špatně podmíněné. Podmíněnost vlastních čísel lze někdy zlepšit pomocí tzv. vyvážení matice (anglicky „balancing"), viz kapitola 7.2.5, v MATLABu funkce balance. 7.1.5. Transformace. Mnohé numerické metody pro výpočet vlastních čísel a vektorů jsou založeny na redukci původní matice na jinou jednodušší matici, jejíž vlastní čísla a vlastní vektory lze vypočítat snadněji. Uvedeme si proto několik transformací, které vlastní čísla a vlastní vektory buďto nemění nebo umožňují jejich snadnou rekonstrukci. Posun znamená odečtení konstanty od diagonálních prvků matice. Jestliže Ax = Ax a /i je konstanta, pak (A — /il)x = (A — /x)x. Tedy vlastní čísla matice A — /il se oproti vlastním číslům matice A posunou o /i, vlastní vektory se však nezmění. 161 Inverze. Je-li A regulární a Ax = Ax, pak A / O a A_1x = (1/A)x. Tedy vlastní čísla matice A-1 jsou převrácené hodnoty vlastních čísel matice A, vlastní vektory obou matic jsou stejné. Mocniny. Jestliže Ax = Ax, pak Afcx = AAfc_1x = • • • = Afcx pro k přirozené. Tedy k-tá mocnina matice má za vlastní čísla k-té mocniny vlastních čísel původní matice, vlastní vektory se nemění. Polynomy. Je-li p(t) = c0 + C\t + c2r2 + • • • + cktk libovolný polynom stupně k, pak definujeme p(A) = c0I + C\A + c2A2 + • • • + ckKk. Jestliže Ax = Ax, pak p(A)x = p(A)x. Matice p(A), kde p(t) je polynom, má vlastní čísla p(A), vlastní vektory matic A a p(A) jsou stejné. Podobnost. Řekneme, že matice A a B jsou podobné, existuje-li regulární matice T s vlastností B = T 1AT. Matice T se nazývá matice podobnosti nebo také podobnostní matice. Jestliže A je vlastní číslo matice B a y je odpovídající vlastní vektor, pak Vlastní čísla podobných matic jsou tedy stejná, vlastní vektory příslušné témuž vlastnímu číslu jsou sice různé, jeden z druhého však lze snadno získat prostřednictvím matice podobnosti. 7.1.6. Diagonální, trojúhelníkové a blokově trojúhelníkové matice. Diagonální matice D = diag(cř1, d2,..., dn) má vlastní čísla A« = d,i a odpovídající vlastní vektory y j = eÍ7 kde e^ je i-tf sloupec jednotkové matice. Diagonizovatelnou matici A lze pomocí podobnostní transformace T-1 AT = D převést na diagonální matici D. Protože vlastní čísla mohou být komplexní, je matice D i matice podobnosti T obecně komplexní. Pro symetrickou matici A existuje reálná ortonormální matice podobnosti Q taková, že matice QTAQ = D je diagonální. Trojúhelníková matice má nuly buďto pod hlavní diagonálou, pak hovoříme o horní trojúhelníkové matici, nebo má nuly nad hlavní diagonálou, v tom případě jde o dolní trojúhelníkovou matici. V dalším budeme trojúhelníkovou maticírozumět horní trojúhelníkovou matici. Nechť tedy T = {íjj}™J=1 je trojúhelníková matice, tj. tij = 0 pro i > j. Z charakteristické rovnice det(T — AI) = 0 okamžitě plyne, že vlastní čísla matice T jsou její diagonální prvky, tj. A« = tu. Vlastní vektory lze dopočítat také snadno. Matice T —AI má na hlavní diagonále nuly v pozicích, v nichž tu = A. Je-li By = Ay ATy = ATy Ax = Ax pro x = Ty . a Un je regulární, pak odpovídající vlastní vektor lze zvolit ve tvaru 162 kde y je řešení rovnice Uny = u. Význam trojúhelníkových matic v úloze vlastních čísel plyne ze Schurovy věty: Ke každé čtvercové maticí A existuje unitární matice Q taková, že 1 ti2 ••• t\ 0 í22 • • • ^2n QHAQ = T 0 je horní trojúhelníková matice. Rozklad A = QTQH se nazývá Schurúv rozklad matice A, T se nazývá Schurúv tvar matice A a sloupce q1; q2,..., qn matice Q se nazývají Schurovy vektory. Důkaz Schurovy věty lze najít např. v [30]. Pro úplnost uveďme ještě definici unitární matice. Čtvercová matice Q je unitární, jestliže QHQ = QQH = I. Přitom QH je matice Hermitovsky sdružená, tj. transponovaná a komplexně sdružená: když Q = {g^}"J=1 a QH = {g^}"J=i, pak qfj = q^ je číslo komplexně sdružené s číslem q ji. Protože QH = Q_1, je každá čtvercová matice A podobná s trojúhelníkovou maticí T = Q_1AQ, přičemž matice podobnosti Q je unitární. Zdůrazněme, že matice T a Q jsou obecně komplexní. Schurúv tvar reálné matice má komplexní složky v případě, že matice má nějaká komplexní vlastní čísla. Naštěstí však existuje reálná varianta Schurovy věty: Ke každé reálné čtvercové matici A existuje ortonormální matice Q taková, že Q1 AQ = T /Tu o21 Ti2 T22 Tlp\ T2p 1° pi O P2 (7.5) -pp je blokové trojúhelníková reálná matice, v níž diagonální submatice Ta jsou čtvercové řádu jedna nebo dva a poddiagonální submatice O^-, i > j, jsou nulové. Vlastní čísla diagonálních submatic řádu dva jsou komplexné sdružená vlastní čísla matice A, zbývající diagonální submatice řádu jedna jsou reálná vlastní čísla matice A. Rozklad A = QTQT se nazývá reálný Schurúv rozklad matice A, matice T se nazývá reálný Schurúv tvar matice A, sloupce q1; q2,..., qn matice Q jsou reálné Schurovy vektory. Pro výpočet komplexního i reálného Schurova tvaru matic existuje řada kvalitních programů, viz např. [3]. V MATLABu lze použít funkci schur. Blokově trojúhelníková matice. Reálný tvar Schurovy matice je speciálním případem horní blokově trojúhelníkové matice A / Au A12 02i A22 Aip\ 2p A pi O p2 (7.6) App ) 163 se čtvercovými diagonálními maticemi Au a nulovými poddiagonálními maticemi O^-. Protože determinant matice A je součinem determinantů diagonálních submatic (důsledek Laplaceovy věty), všechna vlastní čísla A dostaneme z vlastních čísel diagonálních submatic. Také vlastní vektory A lze určit pomocí vlastních vektorů diagonálních submatic. Problém vlastních čísel pro blokově trojúhelníkové matice lze proto rozložit na menší sub-problémy, které se řeší snadněji, a mnohé algoritmy výpočtu vlastních čísel toho využívají. 7.2. Metody výpočtu 7.2.1. Mocninná metoda Základní varianta mocninné metody, viz algoritmy 7.1 a 7.2, umožňuje výpočet vlastního vektoru příslušného k vlastnímu číslu o největší absolutní hodnotě. Algoritmus 7.3 umí určit vlastní vektor příslušný k vlastnímu číslu o nejmenší absolutní hodnotě. Pro zvolené číslo fi algoritmus 7.3 najde vlastní vektor příslušný k vlastnímu číslu, které je k fi nejblíž. Máme-li dobrou aproximaci vlastního vektoru, algoritmus 7.4 tento vlastní vektor najde. Algoritmus 7.1 : mocninná metoda 1. x0 je libovolný nenulový vektor 2. for k := 1,2,... do 3. xfc := Axfc_i 4. end Předpokládejme, že A je diagonizovatelná matice s jediným dominantním vlastním číslem Ai, tj. |Ai| > |A2| > |A3| > ••• > |An|, (7.7) a nechť vi je odpovídající vlastní vektor. Pak konverguje k násobku vi. Naznačme si důkaz tohoto tvrzení. Startovací vektor Xo vyjádříme ve tvaru Xo = Yľj=iajvj^ kde vj jsou vlastní vektory příslušné vlastním číslům Xj. Pak xfc = Axfc_i = A2xfc_2 = • • • = Afcx0 = n n n / n Ak Y = Y % AS = Y = Ai «ivi + vai)Svj j=l j=l j=l \ j=2 Pro j > 1, | Aj / A i I < 1, proto (Xj/Xi)k —y 0 a tedy nevymizí pouze člen obsahující vi. Vlastní číslo Ai můžeme dopočítat pomocí Rayleíghova podílu. Rayleighův podíl pro matici A a vektor x ^ o je číslo xTAx i?(A,x) XTX Je-li x vlastní vektor matice A a A je odpovídající vlastní číslo, pak xTAx xTAx ÍA, x = = = X. XJ X XJ X 164 Jestliže tedy —y vi, pak i?(A,Xfc) —y Ai. Následuje výčet některých nedostatků mocninné metody: • Startovací vektor x0 nemusí obsahovat žádnou složku ve směru dominantního vlastního vektoru vx (tj. aľ =0). Tento případ je velmi nepravděpodobný, pokud x0 volíme náhodně, a prakticky nepředstavuje žádný problém, neboť zaokrouhlovací chyby obvykle takovou složku vytvoří. • Jestliže existuje několik vlastních čísel o stejné absolutní hodnotě, pak mocninná metoda vůbec nemusí konvergovat. • Geometrický růst složek může vést pro |Ai| > 1 k přetečení a pro |Ai| < 1 k podtečení. Proto je účelné v každém kroku vektor X& normovat tak, aby jeho norma byla rovna Algoritmus 7.2 : normalizovaná mocninná metoda 1. Xo je libovolný nenulový vektor, ||xo ||2 = 1 2. for k := 1,2,... do 3. yk := Axfc_i 4. xfc := yfc/||yfc||2 5. ak := x^Axfc 6. end Pak Xfc —y vi, ||vi||2 = 1 a °~k = -R(A,x^) —y X±. Příkaz na řádku 5 lze nahradit příkazem ak := x^y^. Další možností je vypuštění řádku 5 a dopočítání vlastního čísla až po dokončení cyklu. Výpočet vlastního čísla uvnitř cyklu má smysl pro zařazení vhodného stop-kritéria pro ukončení iterací. Kromě podmínky typu ||xfc — x^_i H2 < £ lze použít také \o~k — řTfc—11 < £• Spolehlivější kritérium na ukončení iterací založené na výpočtu levých a pravých vlastních vektorů lze najít třeba v [42]. Pro chybu platí, viz [56], přičemž ± znamená, že uvedený vztah platí v každém kroku jen pro jedno ze znamének plus a mínus. 7.2.2. Inverzní iterace. Protože vlastní čísla matice A-1 jsou převrácenými hodnotami vlastních čísel matice A, mocninná metoda aplikovaná na A-1 konverguje k vlastnímu vektoru příslušnému nejmenšímu vlastnímu číslu A. Místo abychom v každém kroku počítali y^ = A_1Xfc_i, řešíme soustavu rovnic LlJy^ = x/í_1, přičemž LU rozklad A = LU provedeme jen jednou, před začátkem iterací. Tak dostaneme jedné. 165 Algoritmus 7.3 : inverzní iterace 1. x0 je libovolný nenulový vektor, ||x0||2 = 1 2. for k := 1,2,... do 3. vypočti yfc řešením rovnice Ay^ = Xfc_i 4. xfc := yfc/||yfc||2 5. ak := x^Axfc 6. end Pak xfc ->• vi, || vi_ || 2 = l,aaH Ai, kde |Ai| < min2 Vj, ||vj||2 = 1 a o"fc —^ Aj. Pro chybu platí, viz [56], |xfc - (±vť /x - Aj /x A, Ať)| =0 /x - Aj /X — Aj (7.9) význam ± je stejný jako v (7.8). Inverzní iterace s posunem je užitečná zejména tehdy, když nějakou metodou získáme přibližné hodnoty vlastních čísel a chceme k nim dopočítat odpovídající vlastní vektory. Další modifikací mocninné metody je následující Algoritmus 7.4 : metoda Rayleighových podílů 1. 2. 3. 4. 5. 6. Xo je libovolný nenulový vektor, ||xo ||2 = 1 for k := 1, 2,... do o-fc = x|,_1Axfc_i vypočti yk řešením rovnice (A — OfcI)yfc = x^_i Xfc := yk/\\ykh end Metoda konverguje pro skoro každý startovací vektor xo. Je-li Xo dostatečně dobrá aproximace vlastního vektoru Vj, pak (a^x^) —y (Aj,Vj), kde Aj je vlastní číslo odpovídající vlastnímu vektoru Vj. Nastane-li konvergence, je kubická, tj. |xfc+i - (±)Vj O Xfc (±)v,||3) Ai| =0(\ak- A,|3) viz [56]. Efektivnost jinak velmi rychlého algoritmu částečně snižuje to, že v každé iteraci musíme znovu faktorizovat matici A — o^I. Má-li však matice A speciální tvar umožňující snadnou faktorizaci, například když je třídiagonální, je metoda Rayleighova podílu vynikající. 166 7.2.3. Redukce. Předpokládejme, že jsme mocninnou metodou vypočetli dominantní vlastní číslo Ai, |Ai| > max2 max3 |A21 > ••• > |AP| > |Ap+i| > ••• > |An| a nechť v j je vlastní vektor příslušný k A«. Označme S = span(v1; v2,..., vp) a dále Sk = span(Xfc) = span(AfcXo). Jestliže žádný ze sloupců matice Xo není kolmý k S, pak Sk —> S, tj. vektorový prostor generovaný sloupci matic X& konverguje k vektorovému prostoru generovanému p dominantními vlastními vektory. Stejně jako v mocninné metodě hrozí podtečení nebo přetečení. Navíc dochází ke zhoršování podmíněnosti matic X&, takže sloupce X& tvoří špatně podmíněnou bázi prostoru Sk- Oba tyto nedostatky můžeme překonat, když v každém kroku budeme sloupce X& ortonormalizovat pomocí QR rozkladu. Algoritmus 7.6 : ortogonální iterace 1. X0 je libovolná matice typu (n,p) hodnosti p 2. for k := 1,2,... do 3- Yfc := AXfc_x 4. proveď redukovaný QR rozklad Q^Rfe = 5. Xfc = Qk 6. end Redukovaným QR rozkladem rozumíme vyjádření = Q^R^, kde je matice typu (n,p) s vlastností Q^Qfc = I a R& je horní trojúhelníková matice řádu p. Redukovaný 167 QR rozklad určíme některou z metod uvedených v kapitole 3.4. Q R rozklad používáme k sestrojení ortonormální báze v prostoru tvořeném sloupci matice Yk- Za zde bereme místo Yk- Protože prostor generovaný sloupci matic Qfc a Yfc je stejný, vytváříme stejné podprostory Sk jako v algoritmu 7.5, tentokrát však s ortonormální bází. Věta (o ortogonální iteraci) Matice konvergují k matici Q; jejíž sloupce tvoří ortonormální bázi prostoru S. Matice Tk = QjTAQ& konvergují k horní blokově trojúhelníkové matici T = QTAQ. Jesliže |Ai| > |A2| > • • • > |AP| > Ap+i > ... > \n, pak T = {Uj}íj=1 je horní trojúhelníková matice a na její diagonále jsou vlastní čísla A« = ta, i = 1, 2,... ,p. Důkaz lze najít např. v [11] a [30]. Je-li A navíc symetrická, pak T = diag(Ai, A2,..., Ap) a Q = (vi, v2,..., vp) je matice odpovídajících vlastních vektorů. Ortogonalizace prováděná v každém kroku je nákladná, navíc konvergence může být velmi pomalá. V další kapitole ukážeme, jak lze tyto nepříznivé okolnosti zmírnit. 7.2.5. QR metoda Efektivní implementace QR metody patří mezi vůbec nejpoužívanější programy pro výpočet všech vlastních čísel a vlastních vektorů plných (tj. neřídkých) matic. Proto budeme Q R metodě věnovat náležitou pozornost. Algoritmus 7.7 : Q R metoda 1. A0 := A 2. for k := 1,2,... do 3. proveď QR rozklad Q^Rfe = Ak-± 4. Ak := RfcQfc 5. end Ukažme si, že jde o postup, který je ekvivalentní s ortogonální iterací pro p = n a Xo = A. Pomocí řádků 3 a 4 algoritmu QR metody odvodíme, že Afc = RfcQfc = Qfc Afc_iQfc = Qfc Qfc_!Afc_2Qfc_iQfc = • • • = Q^AQk , kde Qfc = QiQ2 ... Qfc je ortonormální matice. Pak platí následující Věta(o QR algoritmu) Jestliže |Ai| > |A2| > ••• > |An|; pak Ak konvergují k horní trojúhelníkové matici T = QTAQ; kde Q = lim^oo Známe-li vlastní čísla, můžeme k nim dopočítat aproximace odpovídajících vlastních vektorů, např. některou z metod uvedených v [30]. Použít lze třeba inverzní iteraci s posunem, v níž jako posuny bereme vypočtené aproximace vlastních čísel. Je-li A navíc symetrická, pak T = diag(Ai, A2,..., An) a Q = (v1; v2,..., vn) je matice odpovídajících vlastních vektorů. Přeformulování ortogonální iterace na QR metodu dává elegantní algoritmus, který však stále neřeší jeho dříve zmíněné nedostatky: vysoké výpočetní náklady v jedné iteraci a pomalou konvergenci. QR metoda zapsaná ve formě algoritmu 7.7 může být dokonce 168 zcela nepoužitelná: pro ortonormální matici A (jejíž všechna vlastní čísla leží na jednotkové kružnici v komplexní rovině) dostáváme A& = A. Redukce nákladů na jednu iteraci. QR rozklad matice Ak-i je výpočetně náročný, pro plnou matici vyžaduje 0(n3) operací. Je-li však Ak-i horní Hessenbergova matice, stačí 0(n2) operací, a je-li Afc_i třídiagonální, pak jen 0(n) operací (k anulování nenulových poddiagonálních členů v Afc_i je výhodné použít Givensovy rovinné rotace, viz kapitola 3.4.2). Jak uvidíme, každou matici lze pomocí 0(n3) operací transformovat na podobnou horní Hessenbergovu matici. Protože symetrická Hessenbergova matice je třídiagonální, symetrickou matici lze pomocí 0(n3) operací transformovat dokonce na podobnou matici třídiagonální. Snadno se ověří, že QR metoda zachovává typ matice: je-li matice Afc_i horní Hessenbergova resp. třídiagonální, je taková také matice A& = R^A^-iR^T1. Proto je zcela běžné ještě před startem Q R metody matici A transformovat na horní Hessenbergův resp. třídiagonální tvar pomocí 0(n3) operací a pak v každé iteraci provádět již jen 0(n2) resp. O (n) operací. Transformace na horní Hessenbergův tvar. Algoritmus lze popsat takto: položíme Ao = A a počítáme Afc = PfcAfc_iPfc, k = l,2,...,n-2, kde Pfc je ortonormální Householderova matice, P*. = I - 2wfcw^, v níž Wfc je sloupcový vektor jednotkové euklidovské délky, Zfc 2 a složky z\ ,i 1,2 ..., n, sloupcového vektoru jsou Pak An_2 je horní Hessenbergova matice podobná s maticí A a platí A ■n-2 — Q AQ kde Q = P1P2...P n-2 je ortonormální podobnostní matice. Následuje několik komentářů k uvedenému algoritmu. 1) Householderova matice P^ je tvaru 169 kde 1^ je jednotková matice řádu k, O je nulová matice typu (k,n — k) a je redukovaná Householderova matice, I n—k 2wfcwfc kde \n-k je jednotková matice řádu n—k a je sloupcový vektor tvořený posledními n — k. n — k prvky vektoru w^, tj. w, 2) Jestliže Afc_i (k) (k) ■ 0 -wUi,i = 1,2,...,. ( B C 1=[ O b D k n — k (7.10) k — 1 1 n — k kde O je nulová matice, pak A/« = P/«Afc_1Pfc = B CPfc O PfcDPfc k — 1 1 n — k k n — k (7.11) 3) Vektor je určen tak, aby P/«b = (—/?/«, 0,..., 0)T. Vzorce pro složky vektoru wk, , , , o (k) , vyplývající ze vzorcu pro z\ ,i = k + l,k + 2,...,n, odvodíme stejně jako v kapitole 3.4.1. Stačí si uvědomit, že b = (ak+1 (k-i) (fc-i) afc+2,fc' • • • i ^nk 4) Výpočet Ak = PkAk-iPk provádíme podle (7.10) a (7.11). Matici P k nesestavu ...,a (k-i),T jeme, při výpočtu CP/« a PfcDPfc pracujeme přímo s vyjádřením P& = ln-k—Žw^w^. Celkový počet operací potřebný k výpočtu An_2 je řádu 0(n3). 5) Je-li A symetrická, jsou také Ak-i i A& symetrické, takže v (7.10) a (7.11) je C = (O b)1 , CPfc = (O Pfcb)T. Vzhledem k symetrii D dále platí PfcDPfc = D - wfcq^ - qfcw^, kde Qfc = Pfc - (Pfc Wfc)wfc a pfc = 2Dwfc . Celkový počet operací potřebný k výpočtu An_2 je opět řádu 0(n3), je však méně než poloviční oproti případu, když A je nesymetrická, viz [30]. (7.12) 6) V MATLABu lze k transformaci na Hessenbergův tvar použít funkci nes s. 170 Zrychlení konvergence lze dosáhnout podobně jako ve variantách mocninné metody pomocí vhodně volených posunů. Algoritmus 7.8 : Q R metoda s posuny 1. A0 := A 2. for k := 1,2,... do 3. vyber posun 3. proveď QR rozklad QfcRfc = Ak-i — /x^I 4. Afc := RfcQfc + yUfcl 5. end Protože Afc = RfcQfc + /ifcl = Qfc (Afc-i — //fcI)Qfc + /^fcl = Qfc Afc_iQfc = • • • = Q^AQfc , jsou matice A& opět podobné s A. Pro vhodně zvolené posuny lze však konvergenci značně urychlit. Nejjednodušší volba pro posun je prvek cinn ^ v pravém dolním rohu matice Afc_i, známý jako Rayleíghův posun. Q R iterace s Rayleighovým posunem atn ^ konverguje kubicky pro skoro všechny symetrické třídiagonální matice. Robustnější alternativu představuje Wílkínsonův posun. Nechť a _ i -"-11 "^12 ~ 1 a(*-1) a(*-1) ^-21 ^-22 je bloková matice s bloky A^ ^ řádu n — 2 a A22 ^ řádu 2. Pak Wilkinsonův posun je roven tomu vlastnímu číslu fi submatice A22 ^, které je bližší k atn ^■ Je-li A symetrická, je také A22 ^ symetrická a její vlastní jsou čísla reálná. Pro symetrickou třídiagonální matici Q R metoda s Wilkinsonovým posunem vždy konverguje, nejméně lineárně, pro skoro všechny matice však kubicky. Problém nastane, když vlastní čísla jsou komplexní. Pak je Wilkinsonův posun komplexní a následující výpočty musejí probíhat v komplexní aritmetice. V případě reálné matice A se počítání s komplexními čísly můžeme vyhnout. Předpokládejme, že vlastní čísla matice A22 ^ jsou komplexně sdružená čísla fi a /Z. Dá se ukázat, že dvě po sobě jdoucí iterace, jedna s posunem fi a následující s posunem /Z, dávají reálný výsledek. Šikovná implementace založená na této skutečnosti je známa jako Francísův posun. Bohužel existují matice, pro které ani Francisův posun nevede ke konvergenci. Praktické algoritmy proto používají ještě další doplňkové posuny, pomocí nichž se pokoušejí stagnující konvergenci znovu nastartovat. Až se to zdaří, přejde se opět na Francisův posun. Závěr. Profesionální programy založené na QR metodě používají řadu dalších opatření ke zvýšení jak spolehlivosti tak rychlosti. Proto lze propracované implementace QR metody považovat prakticky za neiterační procesy, neboť pro většinu matic k dostatečně přesnému výpočtu jednoho vlastního čísla potřebují typicky jen dvě až tři iterace, takže celkový 171 počet iterací je malý celočíselný násobek řádu n matice. Profesionální programy pro výpočet vlastních čísel, včetně QR metody, jsou součástí balíku programů LAPACK [1]. 7.2.6. Metoda iterací v podprostorech Při řešení problému vlastních čísel pro rozsáhlé řídké matice často vystačíme se znalostí menšího počtu vlastních čísel a vektorů. Varianty mocninné metody kombinované s redukcí se příliš nehodí, pokud počet požadovaných vlastních čísel a vektorů není v jednotkách, nýbrž spíše v desítkách či stovkách. QR metoda se zase nehodí proto, že pro velké matice, řádů v tisících, je zbytečné a neúnosně nákladné počítat všechna vlastní čísla a vektory. Z metod, kterými jsme se doposud zabývali, připadá v úvahu algoritmus 7.6 ortogonální iterace. V této kapitole si uvedeme jeho modifikaci známou jako metoda iterací v podprostorech. Algoritmus 7.9 : metoda iterací v podprostorech 1. X0 = (x^ ,..., xp ) je matice p lineárně nezávislých startovacích vektorů 2. for k := 1,2,... do 3- Yfc := AXfc_x 4. proveď redukovaný QR rozklad Q^Rfe = 5. Bk := Qfc AQfc 6. urči vlastní čísla af^ a vlastní vektory matice tj. 8. end K algoritmu připojíme několik poznámek. 1 Pokud by Zk byla jednotková matice, dostaneme algoritmus ortogonální iterace 7.6. 2) Vlastní čísla a vlastní vektory matice určíme například Q R metodou. 3) Vlastní čísla af^ matice B& se nazývají Rítzova čísla a vektory x^ = Q^zf^ se nazývají Rítzovy vektory. Přitom span(Xfc) C span(Qfc) = span(Yfc) = span(AfcXo). Je-li Zfc regulární (pro symetrickou matici A je Zk dokonce ortonormální), pak span(Xfc) = span(Qfc). Protože Q^(AX^ — X^D^) = O, ortogonální projekce vektorů Axf — čt^x^ do prostoru Sk '■= span(Q^) je rovna nule. Říkáme také, že oj^ (k) , <-< resp. x4- jsou Ritzova čísla resp. Ritzovy vektory v podprostoru Sk- Je-li matice A regulární, pak vektory x^, i = 1,2,... ,p, jsou lineárně nezávislé, tj. tvoří bázi prostoru Sk- To nastane třeba tehdy, když A je pozitivně definitní. 4) Nechť pro vlastní čísla A platí |Ai| > |A21 > ••• > |AP| > |Ap+i| > ••• > |An|. Předpokládejme, že žádný ze sloupců matice X0 není kolmý k S a že matice Zk, k = 1,2,... jsou regulární. Nechť v j je vlastní vektor příslušný k Aj, i = 1, 2,... ,p, 7. ~^>kLk — kde Zfc = (z-Xfc := QfcZfc 172 X = (vi, v2,..., vp) a S = span(X). Pak Sk —> S, X& —> X, Qk —> Q, D& —> D. Protože Q^(AXfc-XfcDfc) -> QT(AX-XD) = O aspan(Q) = S, span(AX-XD) je k S kolmý. Protože současně span(AX — XD) C S, AX — XD = O nebo-li AX = XD, tj. Ritzova čísla konvergují k vlastním číslům Ai, A2,..., Ap a Ritzovy vektory konvergují k příslušným vlastním vektorům. 5) Konvergence k největším vlastním číslům je nejrychlejší. Chceme-li určit q největších vlastních čísel a odpovídajících vektorů, zvolíme počet p iteračních vektorů větší než q, např. ve [5] se pro pozitivně definitní matici A doporučuje volit p = min(2g, q + 8). 5) Pokud nás zajímají nejmenší vlastní čísla, tj. |Ai| < |A2| < • • • < |AP| < j > p, nahradíme řádek 3 řádkem 3. urči Qfc jako řešení soustavy rovnic AQ& = ~Kk-i - - - (k) Je-li A symetrická, lze k ověřeni toho, že jsme našli Ritzova čísla o\\ , i = 1, 2,..., q, aproximující q nej menších vlastních čísel Aj, využít následující Sturmův test (důsledek Sylvesterovy věty o setrvačnosti). Je-li A — /xl = LDLT; kde L je dolní trojúhelníková matice s jedničkami na hlavní diagonále, pak počet záporných diagonálních prvků matice D je roven počtu vlastních čísel menších než /x. Pro /Xfc = (1 + sm)o-qk^ určíme počet rik záporných prvků matice D. Když rik < , , , (k) , , , některá z Ritzových čísel o\\ , i = 1, 2,..., q, nejsou vlastni čísla menši než Jednou z možností je pokračovat v iteracích tak dlouho dokud nebude rik = Další možností je opakovaný výpočet s větším počtem iteračních vektorů, tj. s větším p. Metoda iterací v podprostorech pro výpočet nej menších vlastních čísel a odpovídajících vlastních vektorů symetrických matic je detailně zpracována v [5]. 7.2.7. Arnoldiho metoda Zvolíme startovací vektor Xj/oav A;—té iteraci se počítáme Ritzova čísla a Ritzovy vektory v Krylovových podprostorech = 3Cfc(A,x0) = span(x0, Ax0,..., Afc_1x0). Ortonormální bázi {qi, q2,..., q^} v OCk vypočteme modifikovaným Gramovým-Schmid-tovým algoritmem, viz algoritmus AGSM v kapitole 1. Současně dostaneme také horní Hessenbergovu matici = Q^AQ^, kde = (qi, q2,..., q^). V A;—té iteraci se spočtou koeficienty h^, i = 1,2,... ,k, k—tého sloupce matice a koeficient fofc+i,fc = ||qfc+i||2-Je-li ||qfc+i||2 = 0, iterace končí, neboť 0C,i = OCk Pro i > k. Ritzova čísla a Ritzovy vektory v podprostoru 0C,i jsou už pak vlastní čísla a vlastní vektory matice A. Algoritmus 7.10 : Arnoldiho metoda 1. xq o je daný startovací vektor, qi = xo/||xo||2 2. for k :- = 1,2,... 3. ■ = Aqfc 4. for i :=1,2,.. 5. hik := Vk+lCÍÍ 173 6. qfc+i :— qfc+i — ^q* 7. end 8. hk+itk ■— llqfc+ilb 9. if /ifc+i,fc = O then stop 10. qfc+i := qfc+i/^fc+i,fc 11. urči vlastní čísla af^ a vlastní vektory y^ matice H^, tj. HfcYfc — YfcDfc, Mezi Ritzovými čísly {a\ }h=1 a Ritzovými vektory {Q^yj }h=i bývají již při malém k, tj. po několika málo iteracích, obsaženy velmi dobré aproximace extrémních vlastních čísel a příslušných vlastních vektorů matice A. Přitom extrémním vlastním číslem rozumíme vlastní číslo, které je výrazně odděleno od zbývajících vlastních čísel. Pro zjištění konvergence lze využít vztah kde [y4- ]& je k-tf prvek vektoru y4- , viz. [45]. Je-li tedy číslo |/ifc+i,fc|' |[yj ]k\ dostatečně malé, je i—té Ritzovo číslo a i—tf Ritzův vektor dostatečně přesnou aproximací nějakého vlastního čísla a odpovídajícího vlastního vektoru matice A. S rostoucím počtem iterací vzrůstá dimenze Krylovových podprostorů, což má za následek rychlý nárůst objemu výpočtů v každé iteraci. Proto v praktických implementacích běží Arnoldiho metoda jen několik iterací a pak se provede restart s vhodně zvoleným novým startovacím vektorem. Několik opakování restartovaného Arnoldiho procesu obvykle poskytne vynikající aproximace extrémních vlastních čísel a odpovídajících vlastních vektorů při přijatelném objemu výpočtů. Lanczosova metoda je modifikace Arnoldiho metody pro případ, kdy matice A je symetrická. Pak Hfc je symetrická třídiagonální matice, což vede ke zjednodušení. Algoritmus Lanczosovy metody dostaneme, když označíme = hkk, fik = ^fc+i,fc = ^fc,fc+i, položíme /3q = 0 a řádky 4 až 10 v Arnoldiho algoritmu nahradíme takto: ak ■= q/T+iqfc qfc+i := qfc+i — ctfcqfc — As-iq^-i As := llqfc+ilb if /3k = 0 then stop qfc+i ;= qfc+i//3fc V důsledku zaokroulovacích chyb dochází v Lancozsově metodě poměrně rychle ke ztrátě ortogonality vektorů q!,q2,...,qfc a proto je třeba čas od času provádět jejich reortogonalízací, více k tomu viz [27], [45], [5] aj. Profesionální programy založené na Arnoldiho a Lanczově metodě umožňují efektivní výpočet několika vlastních čísel a vektorů velkých řídkých matic, viz soubor programů ARPACK [27], který využívá také funkce eigs v MATLABu. \\(A - af>I)Qky\ hk+i,k \ ■ IÍYí ]k 174 7.2.8. Jacobiho metoda je jednou z nejstarších metod pro výpočet všech vlastních čísel symetrických matic. Položíme Aq = A a počítáme A fc+i Jfc+iAfcJfc+i kde J(Pk, Qk, 9k ck = cos Vk Sk /l o o o 0 0 0 0 0 0 sin uk 0 0 1 0 o o o o o o o Pk o o o o o o Ck 0 0 1 o o o o -Sk 0 o o o o o o Qk o o o o o o 0 sk 0 0 0 0 o o o o 0 ck O O O 1 o o o o o o o 0 1 o o o\ o o o o o o o o o v Pk Qk je Jacobiho matice rovninné rotace s úhlem 9k vybraným tak, aby se anuloval jeden pár symetricky položených prvků a (k) VkQk L1h'ph matice Ak. Matici 3(pk,qk,9k) dostaneme z jednotkové matice tak, že v ní nahradíme prvky v pozicích (pk,pk), (pk,Qk), (Qk,Pk) a (qk,qk) postupně čísly ck, sk, —sk a ck. Matice 3(pk,qk,9k) je ortonormální. Označme p = pk, q = qk, a a s určíme tak, aby matice lpp i a (k) a. a b b d c2 a pq Ý 0, d = 2csb + s2d (k) gg i ck, s = Sk- Koeficienty c c2b + cs(a — d) — s2b c s -s c J \c2b + cs(a — d) — s2b c2d + 2csb + s2a byla diagonální. Rovnici c2b + cs{a — d) — s2b = 0 dělíme — c2b a dostaneme d — a ť + 2rt 0 kde T 2b a t = s/c = tg9 . takže c=l/Vl + í2 a s = ct. Za t zvolíme kořen kvadratické rovnice s menší absolutní hodnotou, což je sign(r) t jak se snadno přesvědčíme. Protože |ŕ| < 1, je |#| < ^7r, což je numericky výhodné, jak se ukazuje v [30]. 175 Matice Jfc+i nesestavujeme, pomocí indexů pk, qk, koeficientů ck, sk a matice Ak přímo určíme transformovanou matici A^+i. Výpočet organizujeme v cyklech: v jednom cyklu procházíme postupně všechny poddiagonální prvky a když absolutní hodnota některého z nich je větší než zadaná tolerance, anulujeme ho pomoci Jacobiho matice rovinné rotace. V dalších krocích se mohou vynulované pozice opět zaplnit. Dá se však ukázat, že součet čtverců nediagonálních prvků se v každém cyklu zmenší nejméně q—krát, kde q < 1 je konstanta, což znamená, že posloupnost matic konverguje k diagonální matici alespoň lineárně, asymptoticky je konvergence dokonce kvadratická. Protože Afc = J^AJ^, kde 3k = JxJ2 ... Jfc, jsou matice Ak podobné s maticí A a mají tedy stejná vlastní čísla. To znamená, že když jsou mimodiagonální prvky matice Afc dostatečně malé, lze její diagonální prvky považovat za dostatečně dobré aproximace vlastních čísel matice A. i—tý sloupec matice 3k je pak aproximací vlastního vektoru příslušného k odpovídající aproximaci vlastního čísla. Jacobiho metoda se jednoduše programuje, vlastní čísla dokáže spočítat s velkou přesností. Je však poměrně pracná, jeden cyklus vyžaduje řádově stejný počet operací jako celý výpočet Q R metodou. I když k dosažení požadované přesnosti stačí obvykle provést pět až deset cyklů, je Jacobiho metoda pět až desetkrát pracnější než Q R metoda. V poslední době získala Jacobiho metoda znovu jistou popularitu díky tomu, že ji lze poměrně snadno a efektivně implementovat na paralelních počítačích. 7.2.9. Metoda bisekce Každou symetrickou matici můžeme pomocí Householderových reflexí transformovat na podobnou třídiagonální matici. Ukážeme si jednoduchou metodu, jak určit vybraná vlastní čísla takové matice. Nechť tedy f a-i h \ b2 a2 b3 a definujme polynomy po(x),pi(x),... ,pn(x) předpisem Po(x) = 1, pr{x) = det(Ar — xl) pro r = 1, 2,..., n, kde Ar je submatice tvořená prvními r řádky a sloupci matice A. Zřejmě pi{x) = aľ — x a pro další polynomy lze snadno odvodit rekurenci pr(x) = (ar - x)pr_1(x) - b2rpr_2(x), r = 2, 3,..., n . Protože vyhodnocení pn(x0) pro dané x0 je výpočetně nenáročné, lze kořen charakteristického polynomu pn(x) efektivně určit metodou bisekce. Je-li a < b a pn(a)pn(b) < 0, pak v intervalu (a, b) leží vlastní číslo, které pro danou přesnost e určíme takto: while b — a > e do x ■= (a + b)/2 if pn{o)Pn{x) > 0 then a := x else b := x (7.13) b >n-l a, V 176 Někdy je třeba spočítat A;—té největší vlastní číslo matice A pro předepsané k. Ukažme si, jak to lze provést. Předpokládejme, že matice A je íreducíbílní, tj. že všechny koeficienty 6j jsou nenulové. To není žádné omezení, neboť když 6j = 0, pak je matice A=(At O-\0 Cn_, blokově diagonální, takže stačí počítat vlastní čísla menších matic A« a Cn-i- Pro symetrickou třídiagonální ireducibilní matici A má posloupnost polynomů {pr(x)}^=0 následující vlastnost: je-li V(X) počet znaménkových změn v posloupnosti Po(X),pi(X),... ,pn(A), pak V(X) je rovno počtu vlastních čísel menších než A. Při výpočtu V(X) se přijímá tato konvence: je-li pr_i(A) = 0, považuje se znaménko pr(X) za opačné ke znaménku pr_i(A). Předpokládejme, že Ai < A2 < • • • < An. Z Geršgorinovy věty plyne, že všechna vlastní čísla leží v intervalu (a, b), kde a = min {cti-\bi\-\bi+1\}, b = max {a,t + \hj\ + \bi+1\} , h = bn+1 = 0 . l e do x ■= (a + b)/2 if V(x) < k then a := x else b := x 7.2.10. Metoda rozděl a panuj Metoda rozděl a panuj (anglicky divide and conquer) označuje univerzální rekurzivní algoritmus, který řeší daný „rodičovský" problém tak, že ho rozčlení na několik dílčích „dceřiných" problémů a vhodnou kombinací řešení dceřiných problémů sestaví řešení problému rodičovského. Řešení každého dceřiného problému se získá stejným postupem jako řešení problému rodičovského. Tak postupně vzniká celá řada stále menších dceřiných problémů. Jakmile je dceřiný problém dostatečně malý, přestane se dělit a vyřeší se vhodnou elementární metodou. Známým příkladem algoritmu divide-and-conquer (v dalším stručně DaC algoritmu) jsou třídicí algoritmy quick sort, merge sort nebo algoritmus rychlé Fourierovy transformace, viz kapitola 4.1.3. Mezi metodami pro výpočet vlastních čísel a vektorů se pod metodou DaC míní metoda pro výpočet vlastních čísel a vektorů symetrické třídiagonální matice. Jde o metodu relativně mladou. Publikována byla v roce 1981, trvalo však více než 10 let, než se podařilo sestrojit spolehlivý, stabilní a rychlý algoritmus. V současnosti je třídiagonalizace následovaná DaC metodou nejrychlejším algoritmem pro výpočet všech vlastních čísel a vektorů symetrické matice, více než dvakrát tak rychlá jako třídiagonalizace následovaná QR metodou s Wilkinsonovým posunem. Vysvětleme si hlavní myšlenky, na nichž je DaC metoda založena. Nechť 177 A = (a>i bi \ &m—\ bm—i b b-m @"m+l bm-i-i b-m+1 o,n—i bn—i \ bn—1 Q"n ) (a>i bi \ am—i bm_i Q"n—1 ^n—1 \ bn—1 Q"n ) + Ai O O A2 ,vv kde 0 1 1 o Předpokládejme, že již máme spektrální rozklady Ai = QiAiQf, A2 = Q2A2Q2n. Pak Qľ o \ b b b b l ) A kde u Qi O O Q2 Qľ o Ai O O A2 6muuT O Qľ1' /poslední sloupec Qf O Q2 J V První sloupec Q2 Vlastní čísla matice A jsou stejná jako vlastní čísla podobné matice D + guuT, kde D Ai O O A2 je diagonální a g = bm. Bez ztráty obecnosti můžeme předpokládat, že diagonální prvky di, d,2, ■ ■ ■, dn matice D jsou uspořádány: d\ < d2 < • • • < dn. Předpokládejme dále, že vlastní číslo A matice D + guuT není vlastním číslem D. Charakteristickou rovnici pak můžeme vyjádřit ve tvaru det(D + guuT - AI) = det((D - AI)(I + g(D - AI)_1uuT)) = 0. Protože D — AI je regulární, A musí splňovat det(I + g(D — AI)_1uuT) = 0. Matice I + g(D — AI)_1uuT je součtem jednotkové matice a matice hodnosti jedna. Takový determinant lze snadno vyčíslit pomocí vztahu det(I + xyT) = 1 + xTy, který je speciálním případem lemmatu známého pod anglickým názvem matrix determinant lemma. Proto n 2 det(I + g(D - AI)_1uuT) = 1 + guT(D - AI)_1u = 1 + g V = /(A), takže vlastní čísla A jsou kořeny tak zvané sekulární rovnice /(A) = 0. Jestliže d,i jsou navzájem různá čísla a u,i ^ 0, funkce /(A) má graf, který je pro n = 4, Uí = |, di = i a g > 0 uveden na obrázku 7.1. Protože n 2 je funkce /(A) s výjimkou bodů di pro g > 0 rostoucí a pro g < 0 klesající. Kořeny /(A) leží po jednom v každém intervalu (di,di+1) a jeden další pro g > 0 napravo od dn a pro g < 0 nalevo od dľ. Kořeny sekulární rovnice lze najít velmi přesně pomocí několika kroků jisté varianty Newtonovy metody, viz [11]. Vlastní vektor příslušný vlastnímu číslu a matice D + guuT je (D — al)_1u. Skutečně, (D + £uuT)[(D - al)_1u] = (D - al + al + £uuT)(D - al)_1u = = u + a (D - al)_1u + u[^uT(D - al)_1u] = u f (a) + a[(D - al)_1u] = = a[(D - al)-1*!]. Výpočet vlastních vektorů je třeba ještě modifikovat, při výpočtu (D —al)_1u totiž mohou vznikat velké zaokrouhlovací chyby, více o tom viz [11]. Jestliže Q je ortonormální matice vlastních vektorů matice D + guuT, pak 179 Obr. 7.1: Graf funkce /(A) = 1 + ^ + ^ + ^ + 3^ je ortonormální matice vlastních vektorů matice A. Dá se ukázat, že vyloučené případy di = dj+i a itj = 0 nepředstavují komplikaci, ale naopak zjednodušení a urychlení celého výpočtu, viz [11]. I když hlavní myšlenka algoritmu je jednoduchá, efektivní implementace obsahuje celou řadu specifických postupů, bez nichž by CaD algoritmus nebyl dost dobře použitelný. Pokus o naivní implementaci se proto velmi důrazně nedoporučuje, téměř jistě by Vám přinesl zklamání. Kvalitní implementace DaC algoritmu je součástí balíku programů LAPACK [1]. 7.2.11. Zobecněný problém vlastních čísel spočívá v určení vlastního čísla A a nenulového vlastního vektoru x tak, aby platilo Ax = ABx. Je-li alespoň jedna z matic A, B regulární, lze zobecněný problém vlastních čísel převést na standardní problém vlastních čísel, buďto (B_1A)x = Ax nebo (A_1B)x = (1/A)x. Tuto transformaci však obecně nelze doporučit, neboť při ní může dojít ke • ztrátě přesnosti způsobené zaokrouhlovacími chybami při výpočtu součinu matic, zejména když matice A nebo B je špatně podmíněná; • ztrátě symetrie, když A i B jsou symetrické. 180 Když jsou matice A a B symetrické a jedna z nich je pozitivně definitní, pak lze symetrii zachovat užitím Choleského rozkladu. Tak je-li například B = LLT, můžeme zobecněný problém vlastních čísel převést na standardní problém (L-1AL-T)y = Ay a pak dopočítat x ze soustavy rovnic LTx = y. Tento přístup však pořád neodstraňuje případný rušivý vliv zaokrouhlovacích chyb, navíc je nepoužitelný v případě, že obě matice jsou singulární. Numericky lepší přístup, který funguje i případě, že matice A i B jsou singulární, je QZ metoda. Je založena na zobecněném Schurově rozkladu matic A, B, viz [30]: Nechť A a B jsou reálné matice řádu n. Pak existují unitární matice Q a Z takové, že QHAZ = T = {íjj}™J=1 a QHBZ = S = {síj}^=1 jsou horní trojúhelníkové matice. Protože n det(A - AB) = det(Q(T - AS)ZH) = det(Q)det(ZH) JJ(riť - Asiť), í=i vlastní čísla \ = taj s a (pro s a = 0 klademe A« = oo). Existuje také zobecněný reálný Schurúv rozklad matic A, B: Nechť A a B jsou reálné matice řádu n. Pak existují ortonormální matice Q a Z takové, že QTAZ = T je horní blokově trojúhelníková matice v reálném Schurově tvaru (7.5) a QTBZ = S je horní trojúhelníková matice s nezápornými diagonálními prvky. (Je-li A resp. B symetrická, je T resp. S diagonální.) Q Z metoda je iterační metoda, jejímž výsledkem je Q Z rozklad matic A a B a následný výpočet vlastních čísel a vektorů zobecněného problému vlastních čísel, algoritmus je uveden např. v [30]. V MATLABu lze k výpočtu zobecněného Schurova rozkladu použít funkci qz, zobecněný problém vlastních čísel umožňují v MATLABu funkce eig a eigs. Zobecněný problém vlastních čísel je možné řešit také modifikacemi dalších metod, například metody iterací v podprostorech [5], Jacobiho [5], Arnoldiho a Lanczose [27]. 7.2.12. Výpočet singulárních čísel a vektorů Připomeňme, že A = USVT je singulární rozklad matice A typu (m,n), jestliže U = (ui, U2,..., um) je ortonormální matice řádu m, V = (vi, v2,..., vn) je ortonormální matice řádu n a S = diag(o"i, a2,..., a2 > ■ ■ ■ > o~p > 0. o i jsou singulární čísla a Uj resp. v j je i—tý levý resp. pravý singulární vektor. Zřejmě Avj = o-jUj, Avj = o-jUj, Ta T n (to není žádné omezení, neboť v případě n > m lze singulární rozklad matice A sestavit pomocí singulárního rozkladu AT = VSTUT matice AT). Nechť Ui je matice typu (m, n) sestavená z prvních n sloupců matice U a U2 je matice typu (m,m — n) sestavená z posledních m — n sloupců matice U, tj. U = (Ui,U2). Definujeme-li ortonormální matici Q předpisem n= WUx -Ux v^UA ^ v^VV V O j' pak snadno ověříme, že QTÁQ = diag(o"i,..., an, —tri,..., — an, 0,..., 0) = D nebo-li ÁQ = QD . Jestliže Q je ortonormální matice vlastních vektorů matice Á a D je odpovídající diagonální matice vlastních čísel, tj. Ä Q = QD, pak ze struktury matic Q a D plyne existence permutační matici P takové, že QP = Q a PTDP = D. Z matic D a Q pak získáme S = diag(o"i,..., an), U = (Ui, U2) a V. Jak uvidíme, singulární čísla a singulární vektory matice A úzce souvisejí také s vlastními čísly a vlastními vektory symetrických matic ATA a AAT. Platí totiž ATA = (USVT)T(USVT) = VSTSVT (ATA)V = V(STS), AAT = (USVT)(USVT)T = USSTUT (AAT)U = U(SST). Protože STS = diag((j2, a2,..., čt2), SST = diag(of, ..., a2n, 0,..., 0), vidíme, že pravé singulární vektory v j resp. levé singulární vektory Uj jsou vlastní vektory matice ATA resp. AAT, a že odpovídající singulární čísla o"j, i = 1, 2,..., n, jsou nezáporné druhé odmocniny vlastních čísel matice ATA i AAT. K výpočtu singulárních čísel a vektorů lze tedy použít metody pro výpočet vlastních čísel symetrických matic ATA a AAT. Jednoduchý postup může vypadat třeba takto: 1. vypočti C = ATA; 2. pomocí QR metody vypočti Vf CVx = diag(o"2, a|,..., a2); 3. proveď QR rozklad matice AVi se sloupcovým pivotováním: UT(AVi)P = R, kde R = {rij}™j=1 je horní trojúhelníková matice a P je permutační matice zvolená tak, aby rn > r22 > • • • > rnn. Jak se snadno přesvědčíme, matice RTR je diagonální, což znamená, že sloupce matice R jsou navzájem ortogonální, a protože R je horní trojúhelníková, musí být diagonální. Proto R = S a A = USVT, kde V = ViP, je hledaný singulární rozklad. Při výpočtu ATA však dochází ke ztrátě informace. Proto se používají lepší metody, které se přímému formování součinu ATA vyhýbají. Stručně lze standardní postup výpočtu singulárního rozkladu popsat takto: 1) Pomocí finitního Golub-Kahanová bidiagonalizačního algoritmu obdržíme rozklad A = UiBVf, kde B je bidiagonální matice, jejíž nenulové prvky se mohou nacházet jen na hlavní diagonále a v první naddiagonále, a kde Ui i Vi jsou ortonormální matice, viz např. [30], [11]. 182 2) Využijeme toho, že vlastní čísla třídiagonální matice Tr = BTB jsou kvadráty singulárních čísel matice B a že vlastní vektory Tr jsou pravé singulární vektory B. Nechť Tr = V2DrV2r je spektrálni rozklad matice Tr. Použijeme-li = BBT, ze spektrálního rozkladu = U^D^L^ dostaneme levé singulární vektory B. Výpočet vlastních čísel a vektorů matic Tr resp. lze efektivně provést pomocí modifikace QR metody známé jako dqds algoritmus, viz např. [11]. 3) Nakonec dostaneme singulární rozklad A = UiU2S(V1V2)T, matici S sestavíme z odmocnin diagonálních prvků matice Dr nebo D^. V MATLABu singulární rozklad počítá funkce svd. Pro řídké matice je k dispozici funkce svds, která umožňuje vypočítat několik singulárních čísel a odpovídajících singulárních vektorů tak, že pomocí funkce eigs počítá několik vlastních čísel a odpovídajících vlastních vektorů matice A. 183 8. Obyčejné diferenciální rovnice: počáteční úlohy V této kapitole se budeme zabývat problematikou numerického řešení počátečních úloh pro obyčejné diferenciální rovnice. 8.1. Formulace, základní pojmy Počáteční problém pro ODR1 spočívá v určení funkce y(t), která vyhovuje diferenciální rovnici y'(t) = f(t,y(t)) (8.1) a splňuje počáteční podmínku y(a) = 77. (8.2) Je-li v nějakém okolí D bodu [a,rj\ funkce f(t,y) spojitá a splňuje-li v tomto okolí Lip-schitzovu podmínku s konstantou L vzhledem k proměnné y, tj. platí-li \f(t,u)-f(t,v)\ y(tn). Pro praktické účely, například pro řízení délky kroku, je nutné pracovat s tzv. lokální chybou (anglicky local error) definovanou předpisem len = un{tn+i) — yn+i, 186 kde un(t) je tzv. lokálni řešeni počátečního problému = /(*, un(t)) , un(tn) = yn . Lokální chyba len je tedy chyba, které se skutečně dopustíme při reálném výpočtu v kroku od tn do tn+i. Dá se ukázat, že pro výpočet s dostatečně malými délkami kroků je rozdíl mezi oběma lokálními chybami prakticky zanedbatelný. Obr. 8.1. Diskretizační chyby Hromaděním lokálních chyb vzniká globální diskretizační chyba &n y(tn) V n ■ V případě rovnoměrného dělení lze dokázat, že \en\ = \y(tn) - yn\ < Cr, n = 0,l,...,Q, (8.9) kde C je konstanta nezávislá na r = (b — a)/Q. Tuto skutečnost stručně vyjádříme tvrzením, že globální diskretizační chyba EE metody je řádu 0(t). Říkáme také, že EE metoda je řádu 1. Protože en —> 0 pro Q —> oo, numerické řešení získané EE metodou konverguje k řešení přesnému. Říkáme také, že rychlost (řád) konvergence EE metody je rovna 1. Lokální chyby lten, len a globální chyba en+1 jsou zakresleny v obrázku 8.1. Tvrzení (8.9) lze snadno ověřit v případě, že f(t,y) = f(t) nezávisí na y. Pak totiž y{tk+1) = y{tk) + rf(tk) + \r2 f (&), Uk+l = Vk + Tf{tk) . 187 Odečtením druhé rovnice od prvé dostaneme e^+i = + |r2/'(£&), a protože eo = 0, je en = |r2[/(£0) + //(£i) + --- + //(£n-i)]. Označíme-li M = maxa<^<51 /'(£)|, pak |e„| < |r2nM < ±[tQ]Mt = \{b - a)Mr, neboť rQ = b - a. Zaokrouhlovací chyby. Dopustíme-li se v kroku od tn do tn+1 zaokrouhlovací chyby, jejíž velikost |Aí/n+i| = \yn+i — Vn+i\ nepřesáhne e, pak lze dokázat, že po Q krocích délky r velikost zaokrouhlovací chyby nepřesáhne Ker^1, kde K je konstanta nezávislá na e a r. Pro celkovou chybu EE metody pak platí max \y(tn) - yn\ < Cr + eKt'1 , 0• u{t) = ext v'(t) = Xv(t), í;(0) = 1 + 6 =^ v(t) = (1 + 5)ext, pak \u{t)-v{t)\ < \5\ ■ le^+^l = \5\eat ■ \ cos/3ŕ + isin/3r| = \5\eat < \5\. Pro řešení y(t) = ext testovací úlohy (8.10) rovněž platí \y(t)\ = \ext\ = eat\cos/3t + i sin/3t\ ^ 0 pro t ->• oo . Je proto přirozené požadovat, aby na rovnoměrném dělení tn = nr, n = 0,1,..., numerické řešení yn testovací úlohy (8.10) splňovalo analogickou relaci, tzv. podmínku stability yn —> 0 pro n —> oo. (8.11) Aplikujeme-li EE metodu na testovací rovnici (8.10), dostaneme Vn+i =Vn + T~\yn = (1 + rX)yn = (1 + rA)2í/n_i = ••• = (! + r\)n+1y0 . 188 Podmínka stability (8.11) bude splněna, právě když |1 + r\\ < 1, neboli když r A leží v tzv. oblastí absolutní stability Ra- r\eRA = {zeC\\z + l\< 1}. Oblast absolutní stability EE metody je tedy vnitřek jednotkového kruhu \z + l \ < 1 komplexní roviny C se středem v bodě [—1,0]. Průnik oblasti absolutní stability se zápornou částí reálné osy je interval absolutní stability Ia- Pro EE metodu Ia = (—2, 0). Pro reálné A < 0 podmínka stability (8.11) vyžaduje volit krok r < 2/|A|. Z ilustračního obrázku 8.2 vyčteme, že pro zvolené A musíme r zvolit tak, aby rX byl vnitřní bod úsečky PQ. Tvar a velikost oblasti absolutní stability metody je spolu s řádem metody základní charakteristikou kvality numerické metody. EE metoda z tohoto pohledu příliš kvalitní není: je pouze řádu 1 a oblast její absolutní stability je malá. EE metoda se používá jen výjimečně. Obr. 8.2. Oblast absolutní stability EE metody Lineární stabilita. Testovací úloha (8.10) je dobrým modelem pro posouzení tzv. lineární stability obecné počáteční úlohy y'(ť) = f(t,y(t)), y(ta) = ya. Když v Taylorově rozvoji okolo bodu (ta,ya), f(t,y{t)) = f(ta,ya) + ď/(^a)(r - ta) + df(tgyya\y(t) - ya) + 0((í- taf), zanedbáme chybový člen, dostaneme aproximující lineární problém y'(t) = Xay(t)+ga(t), y(ta) = ya, (8.10') kde Xa = dyf(ta,ya), ga(t) = dtf(ta,ya)(t - ta) - dyf(ta,ya)ya. Jestliže u' = Xau + ga(t), u(ta) = ya, v' = Xav + ga(t), v(ta) = ya + Sa, pak \u(t)-v(t) \ = |5a|eAa(í_ía) -> 0 pro t —> oo, právě když Re(Aa) < 0. V testovací úloze (8.10) si tedy pod A můžeme představit hodnotu dyf(ta,ya) v nějakém bodě (ta,ya). 189 Implicitní Eulerova metoda. Vyjdeme opět z Taylorova rozvoje y(tn) = y(tn+i ~r) = y{tn+1) - ry'{tn+1) + ±r2y"(£n), £n G (tn,yn+1) . (8.11) Vypuštěním členu \y"{£,n) a užitím rovnosti y'(tn+i) = f(tn+i,y(tn+i)) obdržíme implicitní Eulerovu metodu (stručně IE metodu) jako předpis Ž/n+i = yn + rf(tn+1,yn+1) . (8.12) V anglicky psané literatuře se IE metoda označuje jako implicit Euler method resp. back-ward Euler method. O implicitní metodě mluvíme proto, že neznámá yn+± je rovnicí (8.12) určena implicitně. Pro dostatečně malé r má rovnice (8.12) jediné řešení yn+±, dokažte! Určit yn+i znamená řešit obecně nelineární rovnici. To je ve srovnání s EE metodou problém navíc. Aby mělo použití IE metody nějaký smysl, musí mít IE metoda oproti EE metodě také nějakou přednost. Pokusme se ji najít. Nejdříve prozkoumáme přesnost IE metody. Lokální diskretizační chyba IE metody je definována rovnicí y(tn+i) = y(tn) +rf(tn+1,y(tn+1)) + lten, kde y(t) je řešení úlohy (8.1), (8.2). Z (8.11) plyne lte„ = 4rV(£n) = 0(r2) . IE metoda je tedy řádu 1 stejně jako EE metoda. Při podrobnějším zkoumání lze zjistit, že ly"(tn)r2 + 0(r3) pro EE metodu, — \y"{tn)r2 + 0(t3) pro IE metodu. Hlavní členy lokálních diskretizačních chyb (v případě Eulerových metod to jsou členy obsahující r2) jsou co do absolutní hodnoty stejné, liší se jen znaménkem. Můžeme proto oprávněně soudit, že obě metody jsou stejně přesné. Podívejme se také na stabilitu IE metody. Pro testovací úlohu (8.10) je 1 / 1 \n+1 Ž/n+i =yn + rXy-a+i, odtud yn+1 = _ yn = ■■■ = I ^ ^ I y0 a tedy podmínka stability (8.11) platí, právě když |1 — r\\ > 1, neboli když rX leží v oblasti absolutní stability Ra- rX G RA = {z G C I \z - 1| > 1}. Oblast absolutní stability IE metody je tedy obrovská, je to celý vnějšek \z — 1| > 1 jednotkového kruhu komplexní roviny C se středem v bodě [1,0]. Interval Ia absolutní stability IE metody je Ia = (—oo,0). Podmínka stability (8.11) délku kroku IE metody zřejmě nijak neomezuje, viz obrázek 8.3. 190 Je to právě mimořádná stabilita, která je onou hledanou předností IE metody ve srovnání s EE metodou. Tento klad je však třeba vykoupit nutností řešit obecně nelineární rovnici. yn+± získáme jako přibližné řešení rovnice g(z) = 0, kde g (z) = z-yn- rf(tn+1,z). Protože dobrou počáteční aproximaci lze získat extrapolací z hodnot yn,yn-i,..., dá se očekávat rychlá konvergence Newtonovy metody (pro řešení nelineárních rovnic). Praktická zkušenost potvrzuje, že tomu tak skutečně je. Obr. 8.3. Oblast absolutní stability IE metody Lichoběžníkovou metodu dostaneme jako aritmetický průměr EE metody a IE metody: Vn+i =Vn + lr[f(tn,yn) + f(tn+1,yn+1)] . (8.13) Pro lokální diskretizační chybu lten, definovanou rovnicí y(tn+i) = y{tn) + \r[f{tn,y{tn)) + f(tn+1,y(tn+1))] + lten, užitím Taylorovy věty odvodíme lten = -±T3y'"(tn) + 0(r4). Lichoběžníková metoda (stručně TR metoda podle anglického trapezoídal rule) je tedy implicitní metoda řádu 2. Stabilitu TR metody zjistíme řešením testovací úlohy (8.10): yn+i = yn + lr\[yn + yn+1], odtud yn+1 = ^ + T\n = ■■ ■ = Z — TA Není těžké ověřit, že podmínka stability (8.11) platí, právě když tA G Ra = {z e C I Re(z) < 0}. Oblast absolutní stability TR metody tedy obsahuje celou zápornou polorovinu komplexní roviny C, interval absolutní stability Ia = (—oo,0). TR metoda (s podporou IE metody) je v Matlabu implementována jako program ode23t. 2 + rA 2 - tA yo 191 8.3. Explicitní Rungovy-Kuttovy metody Obecný tvar s-stupňové explicitní Rungovy-Kuttovy metody je Un+i =Un + + b2k2 H-----h bsks), (8.14) kde koeficienty ki, i = 1,2,s, jsou určeny předpisem h = f(tn,yn), k2 = f(tn + rc2, yn + Ta21k1), h = f(tn + rc3, yn + r(a31kľ + a32k2)), (8.15) ks = f(tn + rcs,í/n + t(asifci + as2^2 H-----h aS)S_iA;s_i)), a kde 6j, q, a^- jsou konstanty definující konkrétní metodu. Rungova-Kuttova metoda (8.14), (8.15) je explicitní: nejdříve spočteme k\, pak k2 pomocí k\, pak k3 pomocí k\, k2 a tak dále, až nakonec spočteme ks pomocí k\,k2,..., ks_\. Vypočtené koeficienty ki, i = 1, 2,..., s, dosadíme do (8.14) a dostaneme yn+i- V dalším budeme hovořit jen o Rungových-Kuttových metodách (stručně RK metodách), tj. slůvko „explicitní" vynecháme. Je však třeba připomenout, že existují také implicitní Rungovy-Kuttovy metody, těmi se však zabývat nebudeme. RK metody jsou zřejmě jednokrokové: k výpočtu yn+i potřebujeme znát jen yn, předchozí hodnoty yn-i,yn-2, • • • v kroku od tn do tn+i nepoužijeme. Koeficient ki je směrnicí lokálního řešení procházejícího bodem [t*,y*], kde [tl,yl] = [tn,yn], t*=tn+TCi, y* = yn+T{aiiki-\-ai2k2-\-----ha^-i^-i), i = 2, s. Do bodu [tn+i, yn+i] se tedy dostaneme z bodu [tn, yn] tak, že se posuneme po přímce, jejíž směrnice k* = b\k\ + b2k2 + • • • + bsks je váženým průměrem směrnic k\,k2,... ,ks (podle (8.16) pro všechny prakticky používané metody řádu alespoň jedna platí X^í=i b% = 1)- Abychom dostali konkrétní metodu, musíme určit stupeň s a dále konstanty q, fa, a^. Konstanty RK metod je zvykem zapisovat do tabulky známé jako Butcherova tabulka: c2 a-21 a-31 asi as2 ... as,s-l bi b2 ... bs-i b s Jedním z kritérií při volbě konstant RK metody je dosažení dostatečné přesnosti. Tu 192 měříme pomocí lokální diskretizační chyby lte„ = y(tn+1) l(tn) + T^2biki(tn,y(tn)) í=l kde hitn^itn)) = f(tn,y(tn)), i-1 ki(tn,y(tn)) = f(tn + rchy(tn) + r ^ a,tjkj(tn, y(tn))), i = 2,3,..., s. Lokální diskretizační chyba je chyba, které se dopustíme v jednom kroku za lokalizačního předpokladu yn = y(tn). RK metoda je řádu p, pokud lokální diskretizační chyba je řádu 0(tp+1). Pro p = 1, 2, 3 lze odvodit následující tzv. podmínky řádu: řád 1: i=l řád 2: s i=i s / j ui^"i 2 ' i=2 řád 3: s i=i s s s i—l = 2' bící= 3' ha^cj=^ i=2 i=2 i=2 i=2 (8.16) Odvození podmínek řádu pro p = 1, 2, 3,4, 5 lze najít třeba v [50]. Protože všechny prakticky používané metody splňují podmínku C'i = 0"il + 0"i2 H-----h 2, 3,..., s , (8.17) budeme i my předpokládat, že podmínka (8.17) platí. RK metoda řádu p > 1 má globální diskretizační chybu řádu 0(rp). Předpokladem pro platnost tohoto tvrzení je dostatečná hladkost pravé strany /, konkrétně je třeba, aby funkce f(t,y) měla spojité derivace až do řádu p včetně. Pokud / má spojité derivace jen do řádu s < p, pak lze pro globální chybu dokázat pouze řád 0(rs), viz [50]. Označme p(s) maximální dosažitelný řád s-stupňové RK metody. Platí p(s) = s pro s = 1, 2, 3,4, p(5) = 4, p(6) = 5, p(7) = 6, p(8) = 6, p(9) = 7 p(s) < s — 2 pro s = 10,11,... Vidíme, že s-stupňové RK metody řádu s existují jen pro 1 < s < 4. Například metoda řádu 5 je nejméně 6-ti stupňová. Uveďme si několik nejznámějších metod. Metoda řádu 1. Pro s = p = 1 existuje jediná explicitní metoda a tou je nám již známá EE metoda yn+1 = yn + rf(t n i V n ) ■ 193 Metody řádu 2. Pro s = p = 2 má explicitní RK metoda Butcherovu tabulku Podmínky (8.16) pro metodu řádu 2 stanoví c2 021 bi b2 1 2 ' h + b2 = 1, 62c2 a protože ve shodě s (8.17) předpokládáme 021 = c2, dostáváme tabulku kde ab = |. Parametry a, 6 jsou tedy svázány jednou podmínkou, takže zvolíme-li a ^ O, je b = 1/(2a). a a 1-6 6 Pro a = |je6 = la dostáváme metodu Vn+i =Un + rk2, kde k2 = f(tn + \r,yn + |rA;i), fci = f(tn,yn), (8.18) známou pod názvem modifikovaná Eulerova metoda. Budeme ji značit EM1 jako první modifikace Eulerovy metody. V anglicky psané literatuře je metoda (8.18) známa jako midpoint Euler formula. Pro a = lje6 = |a dostáváme metodu yn+i=yn + \r(k1 + k2), kde kx = f(tn,yn), k2 = f(tn + r,yn + rfci). (8.19) Budeme ji značit EM2 jako druhou modifikaci Eulerovy metody. Metoda (8.19) se také často uvádí pod názvem Heunova metoda. Pro a = |je6 = |a dostáváme metodu Vn+i =Un + \r{h + 3fc2), kde kx = f(tn,yn), k2 = f(tn + \r,yn + fr/ci), známou jako Ralstonova metoda řádu 2 (stručně R2 metoda). Metody řádu 3. Pro s = p = 3 dostáváme Butcherovu tabulku a 4 podmínky pro metodu řádu 3: 61 + 62 + 63 = 1 , 62C2 + 63C3 = 62C2, + 63c| = I, b3a32c2 = I. Když zvolíme dva parametry O < c2 < c3, jsou tím všechny koeficienty metody jednoznačně určeny. Volba c2 = |, c3 = | vede na Ralstonovu metodu řádu 3 (stručně R3 metodu): \ Vn+i =yn + \r (2fci + 3fc2 + 4fc3), O f k1 = f(tn,yn), h = f(tn + \r,yn + ^rfci), 3, c2 c2 C3 c3 — a32 032 bi &2 &3 1 2 ' 2 14 9 3 9 h = f(tn + |r,yn + frfc2). Ralstonova metoda řádu 3 je základem Runge-Kutta-Bogacki-Shampine metody, viz [50], která je implementována do Matlabu jako funkce ode23 a jejíž popis uvedeme v této kapitole později. 194 1 1 2 2 1 0 1 to 2 1 0 0 1 1 1 1 1 6 3 3 6 Metody řádu 4. Pro s = p = 4 je nejznámější klasická Rungova-Kuttova metoda Un+i =yn + \r (h + 2k2 + 2k3 + kA), k\ = f(tn,yn), k2 = f(tn + \r,yn + \rki), k3 = f(tn + \t, yn + \rk2), h = f(tn + r,yn + rk3). Klasická Rungova-Kuttova metoda (stručně cRK4) byla velmi populární v době, kdy se ještě nepoužívaly samočinné počítače a kdy proto velmi významným kritériem byla jednoduchost metody. Toto hledisko však v současné době ztratilo na významu a proto se používají jiné metody. Kvalitní dvojice metod řádu 4 a 5 jsou součástí metod Runge-Kutta-Fehlberg nebo Runge-Kutta-Dormand-Prince, viz např. [26]. Posledně jmenovaná dvojice metod je použita v matlabovské funkci ode45, popis uvedeme v této kapitole později. Řízení délky kroku. V profesionálních programech uživatel zadá toleranci e a program délku kroku vybírá tak, aby velikost odhadu estn lokální chyby len nabývala pořád přibližně stejné hodnoty e. Krok od yn do yn+± je úspěšný, když |estn| rmax, položí se r = rniax, kde je rmax = 0,1(6 - a). 3) V případě neúspěšného kroku navrženou délku r* redukujeme: r* = max(r*,gmínr) , kde qmin = 0,5 resp. 0,1 v ode23 resp. ode45 při prvním neúspěchu v rámci jednoho kroku a r* = 0,5r při opakovaném neúspěchu v temže kroku. 4) V případě úspěšného kroku délku kroku r* redukujeme předpisem r* = mm{r*, qniaxr), kde qniax = 5. 5) V kroku bezprostředně následujícím po neúspěšném kroku se délka kroku nesmí zvětšit. 6) Počáteční délka kroku r = de1/^ max(\V\,ea/er)/\f(a,V)\, (8.22) přičemž pro r < rmin změníme r na rmin a pro r > rmax změníme r na rmax. 7) Při programování je třeba postupovat opatrně. Příkazy programu je nutné uspořádat tak, aby nemohlo dojít k dělení nulou, viz (8.21) a (8.22). Podrobnější informace týkající se řízení délky kroku lze najít v [50]. Odhad lokální chyby. Základní myšlenka je jednoduchá. Použijí se dvě metody, z nichž jedna je řádu p a druhá řádu p+1. Z výchozí hodnoty yn spočteme yn*+1 přesnější metodou a yn+í méně přesnou metodou. Použitelný odhad lokální chyby je estn = yn+1 — yn+i- Obě metody používají tutéž množinu koeficientů {kj}j=l. V tom případě je totiž získání odhadu „laciné". Dvojice Rungových-Kuttových metod se popisují pomocí rozšířené But-cherovy tabulky, c2 a2i přičemž %2 Vn+l = Vn + t "Y^j-i b*kj je metoda řádu p, cs a-si as2 ■ ■ Cťs,s-1 Vn+1 = Vn + t Yfj-i Je metoda řádu p K b* b* us-l K estn = r Y,Sj _1 Ejkj je odhad lokální chyby, bl* h** u2 h** K* E1 E2 Es-i Es takže Ej = b*;-b*,j = i,2,...,s. 196 Pokud ve výpočtu pokračujeme přesnější metodou, tj. když yn+i = y**+i = y*n+i + estn, říkáme, že jsme použili dvojici metod s lokální extrapolací. Tento postup se v současných programech upřednostňuje. Druhou možností je pokračovat méně přesnou metodou, tj. položit yn+i = yn+i- V t°m případě se přesnější metoda použije jen pro získání odhadu chyby a říkáme, že jsme dvojici metod použili bez lokální extrapolace. Obě níže uvedené metody BS32 a DP54 se používají jako metody s lokální extrapolací. Příkladem metody, která se obvykle používá bez lokální extrapolace, je Runge-Kutta-Fehlbergova metoda řádu 4, označovaná stručně jako RKF45, viz např. [26]. Na vysvětlenou k použitým zkratkám uveďme, že první číslo značí řád metody a druhé číslo řád pomocné metody použité pro odhad lokální chyby. Bogacki Shampine metoda, stručně BS32 metoda, je implementována v Matlabu jako funkce ode23. Rozšířená Butcherova tabulka BS32 metody je Přesnější z obou metod páru je Ralstonova R3 metoda Vn+l =Vn + r + \k2 + %fa] = Ž/n+1 řádu 3. Pomocná metoda Vn+i = Vn + r [^fci + \k2 + \h + \ki] řádu 2 používá kromě koeficientů ki, k2 a ks navíc ještě koeficient k& = f(tn+i,yn+i). V každém kroku se tedy počítají jen 3 nové hodnoty funkce /, neboť koeficient k\ ve stávajícím kroku je roven koeficientu A;4 z kroku předchozího, takže nově se počítají jen koeficienty k2, k3 a A;4. Zařazení koeficientu k± do metody řádu 2 nás tedy téměř nic nestojí, umožní však zlepšit vlastnosti této metody a tím i celého páru. Metoda, ve které ks = f(tn+i, yn+i), bývá označována jako FSAL podle anglického First Same As Last. Zdůrazněme, že BS32 metoda se používá jako metoda s lokální extrapolací, tj. yn+± = yn*+1- Hodnoty přibližného řešení pro t G (tn,tn+1) spočteme dostatečně přesně pomocí kubického Hermitova polynomu Hs(t) určeného podmínkami H3(tn) = yn, H'3(tn) = fci, Ftz{tn+i) = yn+i, H^(tn+1) = k/±. Metoda BS32 je tedy skvělá: je řádu 3, v každém kroku se pravá strana / počítá jen 3-krát, a to stačí jak na řízení délky kroku tak na výpočet řešení mezi uzly tn a ín+i. Dormand-Prince metoda, stručně DP54 metoda, je definována rozšířenou Butcherovou tabulkou 8.1. Metoda DP54 je typu FSAL, neboť kj = f(tn+i,yn+i). Proto se v každém úspěšném kroku metody počítají jen koeficienty k2,..., k7, koeficient k\ byl už vypočten jako koeficient k7 v předchozím kroku. Zdůrazněme, že DP54 metoda se používá jako metoda s lokální extrapolací, tj. yn+i = yn*+i- 1 1 2 2 3 0 3 4 4 1 2 1 4 1 9 3 9 7 1 1 1 24 4 3 8 2 1 4 n 9 3 9 u 5 1 1 1 72 12 9 8 197 1 5 1 5 3 10 3 40 9 40 4 5 44 45 56 15 32 9 8 9 19 372 6 561 25 360 2187 64448 6 561 212 729 1 9 017 3168 355 33 46 732 5 247 49 176 5103 18 656 1 35 384 0 500 1113 125 192 2187 6 784 11 84 5179 57600 0 7 571 16 695 393 640 92 097 339 200 187 2100 1 40 35 384 0 500 1113 125 192 2187 6 784 11 84 0 71 0 71 71 17 253 22 1 57600 16 695 1920 339 200 525 40 Tab 8.1. Dormand-Prince (5,4) metoda Hodnoty přibližného řešení pro t G (tn,tn+i) spočteme dostatečně přesně pomocí in-terpolačního polynomu H^{t) = yn + rkBq, kde k = (k\, k2, ks, k±, k§, k§, kj), 183 37 _145 -i 64 12 128 0 0 0 1500 1000 1000 371 159 371 125 125 375 32 12 64 ' 9 477 729 25 515 3 392 106 6 784 _ 11 11 _55 7 3 28 3 _4 5 2 ^ 2 J q = (q, q2, q3, <74)T, přičemž q= (t- tn)/r. Metoda DP54 je rovněž vynikající: je řádu 5, v každém kroku se pravá strana počítá jen 6-krát, a to stačí jak pro řízení délky kroku tak pro výpočet řešení v intervalu (tn, tn+1). Stabilita. Řešíme-li testovací rovnici (8.10) RK metodou na rovnoměrném dělení s krokem r, dostaneme Vn+i = Ps(r\)yn , kde Ps je polynom stupně s určený pomocí konstant bi, definujících RK metodu. Podmínka stability (8.11) tedy platí, právě když |Ps(tA)| < 1, neboli když r X leží v oblasti absolutní stability R a- t A G R a = {z G C | \Ps(z) | < 1}. Explicitní RK metody mají omezenou oblast absolutní stability, neboť |PS(^)| —> oo pro \z\ —> oo. Dá se ukázat, že pro p = s < 4 je Ps(z) = X^í=o z% 1^-- Proto každá explicitní s-stupňová RK metoda řádu p = s < 4 (stručně RKs metoda) má stejnou oblast absolutní B 1 0 0 0 o o o 198 stability. Oblasti absolutní stability RKs metod pro s = 1,2,3,4 a metody DP54 jsou uvedeny v obrázku 8.4. Intervaly absolutní stability těchto metod jsou Ia = («,0), kde metoda RK1 RK2 RK3 RK4 DP54 a -2 -2 -2,51 -2,79 -3,31 Zdůrazněme, že z pohledu stability je BS32 metoda ekvivalentní s RK3 metodou, obě metody tedy maií steinou oblast a steinv interval absolutní stabilitv. Obr. 8.4. Oblast absolutní stability RK metod 8.4. Lineární mnohokrokové metody V této kapitole se budeme zabývat metodami, které počítají přibližné řešení yn+i v uzlu tn+i pomocí dříve spočtených aproximací yn,yn-i,yn-2, • • • a odpovídajících hodnot f(tn,yn), /(ŕn-i,ž/n-i),/(ŕn-2,ž/n-2), • • • pravé strany diferenciální rovnice. Tyto hodnoty jsou znovu použity tak, abychom získali yn+± s vysokou přesností pomocí jen několika málo nových vyhodnocení funkce f(t,y). Nejznámějšími metodami tohoto typu jsou Adamsovy metody a metody zpětného derivování Obě skupiny metod patří do obecné třídy metod známých jako lineární mnohokrokové metody, stručně LMM. 199 8.4.1. Obecná lineární mnohokroková metoda LMM je předpis "ož/n+i + aiVn H-----I- ctkUn+i-k = r[P0f (tn+1,yn+1) + f31fn H-----h Pkfn+i-k] , (8.23) ze kterého počítáme yn+i- Přitom aj a /3j jsou číselné koeficienty, které formuli jednoznačně určují, a f j je zkrácený zápis pro f(tj,yj). V dalším budeme předpokládat, že platí normalizační podmínka a0 = 1. Jestliže alespoň jeden z koeficientů nebo f3k je různý od nuly, metoda je k-kroková. Pro /?o 7^ 0 je nová hodnota yn+i určena implicitně, hovoříme proto o implicitní metodě, pro /3q = 0 máme metodu explicitní. Abychom v implicitní metodě určili yn+i, musíme vyřešit obecně nelineární rovnici. LMM lze použít, jen když jsou zadány startovací hodnoty y0, y1}..., yu-i- yo = i] určíme z počáteční podmínky, zbývající startovací hodnoty je však třeba získat jinou vhodnou metodou, yr metodou nejvýše r-krokovou. Lokální diskretizační chyba je chyba, která vznikne, když do formule (8.23) dosadíme místo přibližného řešení yn+i-j přesné řešení y(tn+i-j), tedy k k lte„ = ^Qjí/(ín+i_j) -T^Pjf(tn+l-j,y(tn+l-j))-j=0 j=0 Jestliže lten = Cp+lrp+1y^+1\tn) + 0(^+2), řekneme, že metoda je řádu p. Clen Cp+iTp+1y(-p+1\tn) se nazývá hlavní člen lokální diskretizační chyby, konstanta Cp+i je tzv. chybová konstanta. LMM je tím přesnější, čím je vyššího řádu. Z několika metod téhož řádu je pak nejpřesnější ta metoda, pro kterou je velikost chybové konstanty |Cp+i| nejmenší. D-stabilita. Řekneme, že LMM je stabilní ve smyslu Dahlquista (stručně D-stabilní), jestliže všechny kořeny prvního charakteristického polynomu g(0 = e + + • • • + afe-ií + «fc leží uvnitř jednotkového kruhu \z\ < 1 komplexní roviny C a pokud některý kořen leží hranici \z\ = 1, pak je jednoduchý. Význam D-stability lze vysvětlit na rovnici y' = 0. Její řešení pomocí LMM vede na předpis X^=o ajVn+i-j = 0. Zvolíme-li startovací hodnoty yj = er\ j = 0,1,..., k — 1, kde g(r) = 0 a e je libovolné číslo, pak yn = ern pro každé n. Skutečně, k k ajern+1-j = £rn+1-k ^ ajrk-j = ern+1-kg(r) = 0. j=0 j=0 Pro \r\ > 1 a e ^ 0 je limn^00 \yn\ = oo, což je nepřijatelné: pro e = 0 je yn = 0 přesné řešení rovnice y' = 0, avšak pro e ^ 0, \e\ 1, tj. již pro nepatrnou poruchu startovacích 200 hodnot yj, j = 0,1,..., k — 1, dostaneme řešení zcela nevyhovující. Dá se ukázat, že vyloučit musíme také případ, kdy \r\ = 1 je kořen £)(£) násobnosti větší než 1. Konvergence. Uvažujme D-stabilní LMM řádu p > 1. Jestliže startovací hodnoty zadáme s chybou řádu 0(rp), pak globální diskretizační chyba je rovněž řádu 0(rp). Precizní formulaci a důkaz této věty lze najít např. v [59], [26]. Předpokladem její platnosti je dostatečná hladkost pravé strany /, konkrétně je třeba, aby funkce f(t,y) měla spojité derivace až do řádu p včetně. Pokud / má spojité derivace jen do řádu s < p, pak lze pro globální chybu dokázat pouze řád 0(rs). Absolutní stabilita. Řešíme-li testovací úlohu (8.10) LMM na rovnoměrném dělení s krokem r, dostaneme k ^2(aj-rX^j)yn+1-j = 0. (8.24) j=0 Řešení hledejme ve tvaru yn = rn. Po dosazení do diferenční rovnice (8.24) obdržíme k k J2(aJ - r\Pj)rn+1-j = rn+1-k ^(^ - rX^r^ = rn+1-k7i(r,rX) = 0 , j=0 j=0 k kde Tr(£,z) = y,(aj-zl3j)Zk-t j=0 je tzv. polynom stability LMM. Jestliže 7r(r, rA) = 0, pak yn = rn je řešením diferenční rovnice (8.24) a podmínka stability yn —> 0 pro n —> oo platí, právě když |r| < 1. Oblast R a absolutní stability LMM metody definujeme jako množinu takových bodů z komplexní roviny C, pro které každý kořen £ polynomu 7r(£, z) leží uvnitř jednotkového kruhu komplexní roviny, tj. |£| < 1. Podmínka absolutní stability (8.11) tedy platí, když rA G RA = {z e C I tt(£, z) = 0 =>• |£| < 1}. 8.4.2. Adamsovy metody Integrací diferenciální rovnice (8.1) od tn do tn+i dostaneme Ptn+l y(tn+1) - y(tn) = / f{t,y{t))át. Funkci f(t,y(t)) aproximujeme pomocí interpolačního polynomu Pk-i(t) stupně k—l, tj. Ptn+l y(tn+i) ~ y(tn) + / Pk-i{t)át, kde Pfc-i(rn+i-j) = f(tn+1-j,y(tn+1-j)). J tn Když přibližnou rovnost nahradíme rovností a přesné řešení nahradíme řešením přibližným, dostaneme předpis ľtn+l yn+i = yn+ Pk-i(t)dt, kde Pk-i{tn+i-j) = f(tn+i-j,yn+i-j). (8.25) 201 Adams-Bashforthovy metody dostaneme, když v (8.25) zvolíme j = 1,2,... ,k. Konstrukci polynomu Pk-i(t) lze přehledně vyjádřit tabulkou t tn—1 tn+l—k Pk-l(ť) f n fn-1 fn+l-k Adams-Bashforthovu metodu lze zapsat ve tvaru k Vn+1 =yn+T^2 Pk,j fn+l-j ■ 1.5 0.5 ! o -0.5 -1 l -ab1 -ab2 _ arq — ab4 -ab5 ab6 Na -2.5 -2 -1.5 -1 -0.5 0 0.5 1 Re(z) Obr. 8.5. Oblast absolutní stability ABk metod Stručně ji budeme označovat jako ABk metodu. ABk metoda je explicitní, fc-kroková, řádu k, D-stabilní. Pro konstantní délku kroku, tj. když tn+i-j = tn+i — 3Ti j = 1) 2,..., k, jsou koeficienty ABk metod pro k = 1,2,...,6, spolu s chybovými konstantami Ck+1 a dolními mezemi a*k intervalů absolutní stability («£,0), uvedeny v následující tabulce: 202 k #,2 P k,i #,5 Uk+1 1 1 1 2 -2 2 3 2 1 2 5 12 -1 3 23 12 16 12 5 12 3 8 8 11 4 55 24 59 24 37 24 9 24 251 720 3 10 5 1901 720 2 774 720 2 616 720 1274 720 251 720 95 288 90 551 6 4 277 1440 7 923 1440 9 982 1440 7 298 1440 2 877 1440 475 1440 19 087 60 480 5 57 Všimněte si, že AB1 metoda je totožná s EE metodou, tj. AB1=EE. Adams-Moultonovy metody dostaneme, když v (8.25) zvolíme j = 0,1,..., k — 1. Konstrukci polynomu Pk-i(t) lze přehledně vyjádřit tabulkou t tn+l tri t'n+2-k Pk-l(t) fn+1 f n fn+2-k Adams-Moultonovu metodu lze zapsat ve tvaru fc-i Vn+i =yn + rf3kfi f(tn+1,yn+1) + r ^2 Pk,j fn+l-j ■ i=i Stručně ji budeme označovat jako AMk metodu. AMk metoda je implicitní, pro k = 1 je jednokroková a pro k > 1 je {k — l)-kroková, je řádu k a D-stabilní. Koeficienty AMk metod pro konstantní délku kroku a pro k = 1,2,... ,6, spolu s chybovými konstantami Ck+i a dolními mezemi intervalů absolutní stability («&, 0), jsou uvedeny v následující tabulce: k /V Pk,2 &,3 Am As,5 Ck+1 C*k 1 i 1 2 —oo 2 1 2 1 2 1 12 —oo 3 5 12 8 12 1 12 1 24 -6 4 9 24 19 24 5 24 1 24 19 720 -3 5 251 720 646 720 264 720 106 720 19 720 3 160 90 49 6 475 1427 798 482 173 27 863 45 1440 1440 1440 1440 1440 1440 60 480 38 Všimněte si, že AM1 metoda je totožná s IE metodou, tj. AM1=IE, a že AM2 metoda je totožná s TR metodou, tj. AM2=TR. 203 Metody prediktor-korektor. AM metody jsou přesnější a stabilnější než AB metody. Nevýhodou AM metod je jejich implicitnost. Abychom určili yn+±, musíme řešit rovnici fc-i ÍJn+i = fiVn+i), kde ip(z) = yn + r(3kfi f(tn+1, z) + r ^ (3kJ fn+i-j ■ Použít můžeme metodu prosté iterace: zvolíme počáteční aproximaci y^+i a postupně počítáme yns+í = s = l,2,...,S, a nakonec položíme dostaneme metodu prediktor-korektor, kterou schématicky označujeme P(EC)'SE. Přitom P značí předpověď počáteční aproximace AB metodou, C korekci AM metodou a E vyhodnocení pravé strany f{tn+i-,yn%i)- Zvolíme-li jako prediktor metodu ABk a jako korektor metodu AMk, dostaneme metodu, kterou značíme ABk-AMk-P(EC)'sE. Její chybová konstanta je rovna chybové konstantě Cp+i korektoru, oblast absolutní stability se blíží oblasti absolutní stability korektoru AMk až pro S —> oo. Nejčastěji se používá schéma PECE, kdy se korekce provede jen jednou a pravá strana se počítá dvakrát. V dalším se omezíme právě na schéma PECE. Abychom mohli řídit délku kroku, potřebujeme znát odhad estn lokální chyby. Jestliže y*l+l = yn°li spočteme prediktorem ABk a y**+í = y^+i korektorem AMk, pak tzv. Milneův 204 odhad lokální chyby dává C odvození viz [26]. Nakonec položíme Vn+l = Vn+l + estn- (8.27) Korekce yn*+í pomoci odhadu lokálni chyby estn se nazývá lokálni extrapolace. Celý krok označujeme zkratkou ABk-AMk-PECLE, přičemž písmeno L vyznačuje použití lokálni extrapolace. Metoda ABk-AMk-PECLE je řádu k + 1, oblast absolutní stability je větší než u prediktoru ABk ale menší než u korektoru AMk, viz [26], [2]. Alternativní odhad lokální chyby lze získat také tak, že yn+i spočteme metodou AM(k+l) a položíme estn = yn+1 - y**+1. (8.28) Výslednou metodu lze označit jako ABk-AM(k+l)-PECE. Odhady (8.27) a (8.28) nejsou sice totožné, pro malé r jsou však prakticky nerozlišitelné. Konkrétně pro metodu AB2-AM2-PECLE organizujeme výpočet následovně: AB2: y*n+1 = yn + ±r(3/n - fn^) fn+l = f(tn+l,yn+l) AM2: y*n*+1 = yn + \r{f:+1 + /„) estn = — g(yn+i — yn+i), Vn+l = ÍJn+l + eS^n fn+l = f(tn+li Vn+l)- V případě AB2-AM3-PECE metody nahradíme řádek L řádkem C: AM3: yn+1 = yn + ^r(5/*+1 + 8/„ - fn-i), estn = yn+1 - y**+1. Startovací hodnotu yľ lze získat třeba pomocí EM2 metody. Na obrázku 8.7 je vyznačena oblast absolutní stability metod ABk-AM(k+l)-PECE pro k = 2, 3,..., 6: je větší než oblast absolutní stability prediktoru ABk, viz obrázek 8.5, avšak menší než oblast absolutní stability korektoru AM(k+l), viz obrázek 8.6. Řízení délky kroku a řádu metody. Kvalitní programy založené na metodách predik-tor-korektor mění jak délku kroku tak řád metody. Tak například matlabovský program odell3 používá metody ABk-AM(k+l)-PECE pro k = 1, 2,..., 12. Změna řádu se provádí současně se změnou délky kroku. Algoritmy tohoto typu se označují jako VSVO (variable step varíable order). Základní myšlenka je jednoduchá. Předpokládejme, že jsme vypočetli yn+i metodou ABk-AM(k+l)-PECE s krokem délky r. Určíme odhad est^ lokální chyby podle (8.27) nebo (8.28). Jestliže |est^| > e, jde o neúspěch a výpočet yn+± je třeba opakovat, v opačném případě pokračujeme výpočtem přibližného řešení yn+2- V každém případě je však třeba stanovit novou délku kroku a nový řád. Rád 205 2 1.5 -1.5 _2i-1-1-1-1-1- -2.5 -2 -1.5 -1 -0.5 0 0.5 Re(z) Obr. 8.7. Oblast absolutní stability pro metody ABk-AM(k+l)-PECE, k = 2, 3,..., 6 se může změnit nejvýše o jednotku, tj. v metodě ABk-AM(k+l)-PECE místo k může být nově také k — 1 nebo k + 1. Odhady odpovídajících lokálních chyb est^1 a est^+1 lze získat snadno, viz [50]. Nové délky kroků r^_1? t£ a t£+1 stanovíme podobně jako pro jednokrokovou metodu, Tg = 0r(e/|est* pro l = k - 1, k, k + 1, a největší z čísel r^_1? t£, t£+1 určí jak novou délku kroku tak nový řád. Konkrétně, je-li největší t£, k se nemění a jako novou délku kroku vezmeme r* = t£, je-li největší t£+1, zvětšíme A; o jedničku a pokračujeme s krokem délky r* = t£+1 a je-li největší r^_1? A; o jedničku snížíme a pokračujeme s krokem délky r* = r^_x. Pro krok délky r* 7^ r je třeba vypočítat hodnoty f^+i-j Pro tn+i-j = tn+i — jf*. To lze snadno provést interpolací pomocí fn+i, fn, ■ ■ ■ ■ Podrobný popis strategie VSVO lze najít např. v [26], [50]. Start metody není žádný problém: začneme metodou AB1-AM2-PECE, počáteční délku kroku určíme např. podle (8.22) a algoritmus VSVO se už sám rychle vyladí na správné hodnoty jak délky kroku tak řádu metody. 8.4.3. Metody zpětného derivování Při řešení tzv. tuhých problémů, viz kapitola 1.5, je vhodné používat metody s neomezenou oblastí absolutní stability. Metody zpětného derivování (stručně BDF podle backward differentiation formulas) tuto vlastnost mají. Pro fc-krokovou metodu zpětného derivování použijeme zkrácený zápis BDFk metoda. Dostaneme ji tak, že v rovnici y\tn+1) = f(tn+1,y(tn+1)) 206 nahradíme derivaci y'(tn+i) pomocí derivace P'k(tn+i) interpolačního polynomu Pk(ť) stupně k procházejícího body [tn+1,y(tn+1)], [tn, y(tn)], [tn+i-k, y(tn+i-k)]- Když pak nahradíme y(tn+1_j) přibližnými hodnotami yn+1_j, j = 0,1,..., k, dostaneme metodu -Pfc(Wl) = /(ín+liľn+l)' Přehledné vyjádření aproximujícího polynomu Pk(t) uvádí následující tabulka t tn+1 tn tn+1—k Pk{t) Vn+1 Vn Vn+l-k BDFk metodu zapíšeme ve tvaru k Ctk,0Vn+l + ^2ak,jVn+l-j = T(3k,of(tn+1,yn+1) . Metoda BDFk je implicitní, fc-kroková, řádu k a D-stabilní pro k < 6. Pro konstantní délku kroku jsou koeficienty akj, fik,o a chybové konstanty Ck+i BDFk metod uvedeny v následující tabulce: k C^kfi otk,i ®k,2 "fc,3 "fc,4 "fc,5 "fc,6 Pkfl Ck+1 ctk 1 1 -1 1 1 2 90° 2 1 4 3 1 3 2 3 2 9 90° 3 1 18 11 9 11 2 11 6 11 3 22 88° 4 1 48 25 36 25 16 25 3 25 12 25 12 125 73° 5 1 300 137 300 137 200 137 75 137 12 137 60 137 10 137 52° 6 1 360 147 450 147 400 147 225 147 72 147 10 147 60 147 20 343 18° Všimněte si, že BDF1 metoda je totožná s IE metodou, tj. BDF1=IE. BDFk metody jsou implicitní, ve srovnání s implicitními AMk metodami ale mají značně větší chybové konstanty. Na druhé straně však metody zpětného derivování mají jednu ohromnou přednost, která plně ospravedlňuje jejich používání, a tou je neomezená oblast Ra absolutní stability. Pro metody BDF1 a BDF2 oblast Ra absolutní stability obsahuje celou zápornou polorovinu komplexní roviny C, tj. D {z E C\Rez < 0}. Takové metody se nazývají A-stabilní. Abychom mohli popsat oblast absolutní stability zbývajících BDFk metod, zavedeme si jeden nový pojem. Řekneme, že numerická metoda je A(a)-stabilní, a G (0,7r/2), jestliže její oblast absolutní stability Ra obsahuje nekonečný klín Wa = {relíp G C I r > 0, \

— oo, pak £ —> 0. Pro a = | dostáváme L-stabilní metodu. BDF1 a BDF2 jsou tedy L-stabilní. Uhel 18° metody BDF6 je příliš malý a proto se tato metoda obvykle nepoužívá. V matlabovském programu odel5s jsou implementovány metody zpětného derivování řádů 1 až 5. Program odel5s je typu VSVO, tj. volí optimální délku kroku i řád metody. Základní metodou programu odel5s je metoda NDF (podle numerical differentiation formula). NDFk metody jsou modifikace BDFk metod, mají o něco menší chybové konstanty (o 26% pro fc = 1,2,3 ao 15% pro k = 4 ) a poněkud menší úhly A(a) stability (o 7% pro k = 3 a o 10% pro k=4) než odpovídající BDFk metody. Podrobnosti týkající se NDFk metod lze najít v [52]. Nelineární rovnice pro výpočet yn+± se řeší pomocí několika málo kroků Newtonovy metody. 8.5. Tuhé problémy Tuhý počáteční problém (v anglicky psané literatuře stiff problem) lze nepřímo popsat pomocí jeho charakteristických projevů. Jinak to nejde, neboť přesná definice tuhého systému neexistuje. Praktická a snadno ověřitelná je Charakteristika 1. Počáteční problém je tuhý, když počet kroků, který k jeho vyřešení potřebuje metoda s omezenou oblastí absolutní stability, je podstatně vetší než počet kroků, který k jeho vyřešení potřebuje metoda s neomezenou oblastní absolutní stability. Použitelnost této charakteristiky ukážeme v následujícím Příklad 8.1 (žM-iocS -looDfc). -m. (Si)-(-i)- (829» Řešení je y\ = —e~*, y2 = e_í- Úlohu (8.29) jsme řešili matlabovským programem ode45 (DP54 metoda řádu 5 s omezenou oblastí absolutní stability) a matlabovským programem odel5s (BDF metody VSVO řádů 1-5 s neomezenými oblastmi absolutní stability). Oba programy jsme použili se stejným požadavkem na přesnost: er = 10~3 a ea = 10~6. Efektivnost obou metod lze přibližně porovnat podle počtu úspěšně provedených kroků pk a počtu pf vyhodnocení pravé strany. V následující tabulce jsou uvedeny hodnoty pk/pf pro několik délek l intervalu integrace. í io-2 ío-1 10° 101 102 ode45 10/61 22/151 269/1747 2 953/18 919 30 071/192 475 odel5s 10/24 10/24 12/28 42/88 71/146 Pro malé l = 10 2 se na intervalu (0; 10 2) řešení poměrně rychle mění. Délku kroku zde určuje požadavek na přesnost a protože obě metody jsou téhož řádu, potřebují přibližně 208 stejný počet kroků. Jak však í vzrůstá, délku kroku stále více začíná ovlivňovat podmínka stability. □ Abychom porozuměli dalším charakteristikám tuhosti, je vhodné pochopit, co je to Stabilní problém. Počáteční problém y' = f (ŕ, y), y (a) = rj, je stabilní, když malá změna dat f, a, rj způsobí malou změnu řešení y. Zabývejme se speciálně stabilitou vzhledem k počáteční podmínce, konkrétně jak změna počáteční hodnoty rj ovlivní řešení y. Pro ilustraci prozkoumejme stabilitu lineárního počátečního problému y' = Ay + g(r), y(a) = r), (8.30) kde A je číselná matice řádu d, která má navzájem různá vlastní čísla {Xj}j=l. Nechť u je řešení problému (8.30) a v je řešení téže diferenciální rovnice, avšak s porušenou počáteční podmínkou, tj. u' = Au + g, u(a) = 77, v' = Av + g, v(a) = T] + 5. Pro w = v — u dostaneme problém w' = Aw, w(a) = 6, který popisuje šíření počáteční poruchy 6. Pak d w(t) = ^e^-'S, i=i kde v j jsou vlastní vektory příslušné vlastním číslům Xj a Kj jsou konstanty, které určíme z počáteční podmínky: Vc = ô, kde V = (vi, v2,..., vd), c = (cu c2,..., cd)T. Odtud w(ť) = VS^V^ó, kde S = diag{eAl(*-a), ex^-a\ ..., eA"(í-«)}. Můžeme tedy vyslovit tyto závěry: 1) Jestliže Re(Xj) < 0 pro všechna j, pak ||w(ŕ)|| —y 0 exponenciálně pro t —> 00, tj. porucha se velmi rychle zmenšuje. 2) Jestliže Re(Xj) < 0 pro všechna j, pak ||w(r)|| < ||V|| • ||V_1|| • \\ô\\, tj. porucha bude omezená, přitom ||w(ŕ)|| —y 0 pro ô —> o. 3) Jestliže nějaké vlastní číslo Xj má kladnou reálnou složku a počáteční porucha ô je taková, že Cj ^ 0, pak ||w(ŕ)|| —y 00 exponenciálně pro t —y 00, tj. porucha se velmi rychle zvětšuje. Problém (8.30) je tedy stabilní (vzhledem k počáteční podmínce), jestliže všechna vlastní čísla matice A jsou navzájem různá a mají nekladnou reálnou složku. 209 Toto tvrzení lze rozšířit a připustit i násobná vlastní čísla se zápornou reálnou složkou: Problém (8.30) je stabilní (vzhledem k počáteční podmínce), jestliže: (a) všechna vlastní čísla matice A mají nekladnou reálnou složku, (b) ryze imaginární vlastní čísla jsou navzájem různá. Řešení úlohy (8.30) lze zapsat ve tvaru d y(t)=yh(t) + p(t), kde yh(t) = YJCJex^J je obecné řešení přidružené homogenní rovnice, p je partikulární řešení a Cj jsou konstanty, které určíme z počátečních podmínek. Předpokládejme, že Re(Aj) < 0, j = 1, 2,..., d. Pak y(t) —> p(t) pro t —> oo. Z toho důvodu mluvíme o funkci y^ jako o přechodovém řešení a o funkci p jako o ustáleném řešení. Označme jako Xmax a Xmin taková vlastní čísla, pro která |Re(Ama:c)| > |Re(A,)| > |Re(Amm)| , j = 1,2,..., d. Chceme-li určit ustálené řešení, musíme úlohu řešit alespoň do toho bodu, v němž je už nejpomaleji klesající exponenciála v přechodovém řešení zanedbatelná. Rešíme-li homogenní úlohu y' = Ay numericky, pak lze snadno ukázat, že podmínka stability yn —y o pro tn = nr —> oo platí, právě když {Air, A2r,..., Xdr} C RA, (8.31) kde R a je oblast absolutní stability uvažované numerické metody. Podle (8.31) tedy pro délku kroku dostaneme omezení r|Re(Amjn)| < \Ia\i kde je délka intervalu absolutní stability. Počet q kroků potřebných k uspokojivému vyřešení úlohy (8.30) lze tedy přibližně odhadnou výrazem Q = — =Cl^^}l kde C-lln£l i |Re(Amín)| \IA\ Ve shodě s charakteristikou 1 je proto přirozené považovat podíl |Re(Ama:c(A))| S(A) |Re(Amín(A) nazývaný poloměr tuhosti matice A, za měřítko tuhosti soustavy (8.30). Můžeme proto vyslovit další Charakteristiku 2. Problém (8.30) je tuhý, jestliže všechna vlastní čísla matice A mají zápornou reálnou část a poloměr tuhosti S (A) matice A je velký. Podobná je Charakteristika 3. Problém (8.30) je tuhý, jestliže všechna vlastní čísla matice A mají zápornou reálnou část a jestliže součin spektrálního poloměru g(A) matice A a délky intervalu integrace b — a je velký, tj. když g(A)(b — a) ^> 1. 210 Vraťme se nyní k úloze (8.30). Příklad 8.1 — pokračování. Pravá strana diferenciální rovnice je f = Ay kde A 1000 0 1001 1 ) Vlastní čísla matice A jsou Xľ = —1, X2 = —1000, takže S(A) = g(A) = 1000. Pro větší l je g(A)(b — a) = 1000 £ ^> 1, tj. jde o tuhý problém. Metoda DP54 má interval absolutní stability (—3,31; 0), takže podmínka stability (8.31) vyžaduje, aby —3,31 < —lOOOr, tj. r < 0,00331. Na intervalu délky l je tak třeba ri£ > £/0,00331 kroků délky menší než 0,00331, což je v souladu s tabulkou uvedenou v první části příkladu 1.1. Skutečně, na intervalu(10; 100) délky 90 je třeba alespoň 90/0,00331 = 27190 kroků délky 0,00331, ve skutečnosti program ode45 provedl přibližně stejný počet 30 071 — 2 953 = 27118 kroků proměnné délky. Protože přesná řešení y\ = —e~* a y2 = e~* jsou na intervalu (10; 100) téměř konstantní, rovná nule, je zřejmé, že délka kroku je omezena z důvodu stability a ne z důvodu přesnosti. Nenechte se zmást tím, že nestabilita se projevuje prostřednictvím lokální chyby, tj. pomocí nástroje pro měření přesnosti metody: jestliže délka kroku nesplňuje podmínku stability, dojde v několika málo krocích k takovému nárůstu lokální chyby, že na to zareaguje mechanismus automatického řízení délky kroku a krok patřičně zkrátí. □. Právě uvedený příklad vystihuje charakteristikou vlastnost tuhých soustav ODR. Tuto vlastnost sformulujeme jako Charakteristika 4. Tuhost soustavy ODR se projevuje tím, že pří jejím numerickém řešení délku kroku omezuje spíše stabilita metody než její přesnost. Lineární stabilita. Až dosud jsme naše úvahy o stabilitě numerické metody zakládali na analýze jejího chování při řešení lineární soustavy (8.30) s konstantní maticí A. Je jistě rozumné požadovat, aby numerická metoda fungovala dobře na speciální třídě rovnic (8.30), je však třeba mít na paměti, že tak dostáváme jen hrubou informaci o možném chování numerické metody při řešení problémů složitějších. Ukažme si nyní, proč se můžeme domnívat, že taková informace má vůbec nějakou vypovídací hodnotu. Pro obecný problém u' = f (ŕ, u), u(ta) = ya, aproximujeme funkci f v blízkosti bodu (ta, y a) funkcí lineární v proměnné u, df df f(í,u) « í(ta,ya) + — (ta,ya)(t - ta) + — (ta,ya)(u - ya), a doufáme, že chování numerického řešení původního problému lze v blízkosti bodu (ta, ya) objasnit z chování numerického řešení aproximujícího lineárního problému kde Aa = íy(ta,ya), ga(t) = í(ta,ya) + ít(ta,ya)(t - ta) - Aaya. Aproximující problém je téhož typu jako problém (8.30), takže stabilitu numerické metody můžeme posoudit známým způsobem pomocí délky kroku a vlastních čísel konstantní matice Aa. Jestliže to uděláme, tak vlastně tiše předpokládáme, že stabilita metody aplikované na aproximující problém je stejná jako stabilita metody aplikované na (8.32) 211 problém obecný. To obecně není pravda, přesto však tento přístup může být pro praxi přínosem, nesmíme ale zapomenout, že případná podmínka stability omezující délku kroku má lokální charakter, tj. platí jen v okolí zvoleného bodu (ta,ya). Právě uvedený postup odpovídá klasickému postupu, který se používá v teorii diferenciálních rovnic, kdy se stabilita řešení nelineárního problému zkoumá prostřednictvím stability aproximujícího lineárního problému. V našem případě je třeba analyzovat navíc ještě stabilitu numerické metody aplikované na aproximující problém. Z teorie obyčejných diferenciálních rovnic je známo, že analýza lineární stability je užitečná, je však třeba mít na zřeteli její omezenou působnost. Totéž platí tím spíše i pro analýzu lineární stability numerických metod. Dokonalejší nástroje pro posuzování stability numerických metod při řešení nelineárních problémů vycházejí z teorie nelineární stability ODR, tím se však my zde zabývat nebudeme, základní informace k tomuto tématu lze najít např. v [26]. Příklad 8.2 Uvažujme počáteční problém y' = y2-y3, t g (0,2/5), y(0) = ô. (8.33) Diferenciální rovnice má dvě konstantní řešení y = 0 a y = 1: zvolíme-li počáteční podmínku y(0) < 0, pak y(t) —> 0 pro t —> oo, zatímco pro y(0) > 0 dostaneme y(t) —> 1 pro t —> oo. Zvolíme-li ô > 0 velmi malé, pak pravá strana y2 — y3 diferenciální rovnice nabývá malých kladných hodnot, tj. funkce y(t) velmi pomalu roste a na poměrně dlouhém intervalu zůstávají její hodnoty blízké k 0. Konkrétně pro ô = 10~4 je y(t) < 10~2 ještě pro t = 9 900, pak y(t) začíná prudce růst a pro t > 10 020 je už y(t) prakticky rovno jedné. Tuhost úlohy (8.33) posoudíme pomocí lineární stability, viz předchozí odstavec. Aproximující lineární problém v bodu (ta,ya) je podle (8.32) tvaru y' = Aay, kde Aa = 2ya - 3y2a. Spektrální poloměr g(Aa) = \2ya — 3y%,\. Pro malé ya 0 je \2ya — 3í/2,) ~ 0, pro ya ~ 1 je však \2ya — 3y^,\ ~ 1. Pro ta g (0,9 900) je výraz \2ya — 3y^,\ta charakterizující tuhost poměrně malý, nejde zde proto o tuhý problém, takže délka kroku se řídí především přesností metody. V intervalu (9 900; 10 020) se řešení prudce mění, to mechanismus automatického řízení délky kroku zachytí a krok zkrátí. Důvodem zkrácení kroku je zde spíše prudká změna řešení než narůstající tuhost. Poté, co je řešení rovno přibližně jedné, je délka kroku řízena stabilitou. Skutečně, pro ta g (10 020,20 000) je \2ya - 3?/2|(20 000 - ta) = 20 000 - ta, pro ta = 10 020 dostaneme velké číslo 9 980 signalizující tuhost. Úlohu (8.33) jsme řešili explicitní metodou DP54 (matlabovský program ode45) a implicitní TR metodou (matlabovský program ode23t). Oba programy jsme použili se stejnou přesností (er = 10~4, ea = 10~7). DP54 je explicitní Rungova-Kuttova metoda řádu 5 s intervalem absolutní stability (—3,31; 0). Délka kroku proto musí splňovat podmínku stability r\2y — 3y2\ < 3,31, což pro t > 10 020 znamená volit r = 3,31. TR metoda je A-stabilní metoda řádu 2, takže tato metoda délku kroku z důvodu stability nijak neomezuje. Vidíme, že v intervalu (10 020, 20 000), kde přesné řešení je prakticky rovno 1, je TR-metoda velmi efektivní, na zdolání intervalu (10 020, 20 000) potřebovala jen 8 kroků. Zato 212 metoda DP54 na tomto intervalu provedla 3 005 kroků délky r = 3,31, takže její použití rozhodně vhodné není. □ 1 0.8 0.6 0.4 0.2 0 I I I I I I I I I i 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 ,4 1.0001 0.9999 x 10 Obr. 8.8 Příklad 8.2 řešený DP54 metodou, celý výpočet x 10 Obr. 8.9 Příklad 8.2 řešený DP54 metodou, detail x 10 Obr. 8.10 Příklad 8.2 řešený TR metodou, celý výpočet 213 1.0001 - 1 - 0.9999 - 0.98 1.02 1.04 1.06 1.08 1.1 1.12 x 104 Obr. 8.11. Příklad 8.2 řešený TR metodou, detail Výsledky příkladu 8.2 umožňují vyslovit praktické kritérium, podle něhož lze vcelku spolehlivě zjistit, zda uvažovaný problém je tuhý. Charakteristika 5. Jestliže numerická metoda s omezenou oblastí absolutní stability, aplikovaná na počáteční problém, je nucena v jistém intervalu integrace používat krok, jehož délka je nepřiměřeně malá vzhledem k hladkosti přesného řešení v tomto intervalu, pak to znamená, že problém je v tomto intervalu tuhý. Velmi zjednodušený postup řešení počáteční úlohy, o níž nevíme, zda je či není tuhá, je tedy tento: zkusíme úlohu vyřešit přesnou explicitní metodou (v MATLABu třeba programem odell3 založeným na Adamsových formulích řádů 1 až 13) a pokud řešení bude trvat příliš dlouho v důsledku volby extrémně krátkých kroků, výpočet přerušíme a zkusíme program pro řešení tuhých úloh (v MATLABu třeba program odel5s založený na metodách zpětného derivování řádů 1 až 5). Pokud pravá strana diferenciální rovnice není příliš hladká, je vhodnější použít metody nižších řádů, třeba explicitní metodu BS32 (v MATLABu program ode23) a v případě neúspěchu A-stabilní implicitní metodu, třeba TR (v MATLABu program ode23t) nebo TR-BDF2 (v MATLABu program ode23tb). Pokud dopředu víme, že problém je resp. není tuhý, neexperimentujeme zbytečně a přímo použijeme program určený pro řešení příslušného typu úloh. Chceme-li efektivně využít všechny možnosti, které nám dostupné programy nabízejí, je třeba se seznámit s jejich vlastnostmi, vybrat správný program a vhodně nastavit jeho řídicí parametry (v kolekci programů v MATLABu jsou to například parametry ovlivňující řízení délky kroku, výstup výsledků, u implicitních metod je třeba určit způsob výpočtu Jacobiho matice pravé strany f, a jsou ještě další parametry, o nichž se lze poučit z programové dokumentace). Metody pro řešení tuhých problémů. Pro řešení tuhých problémů je třeba používat metody s neomezenou oblastí absolutní stability. V Matlabu jsou to metody NDF a BDF implementované v programu odel5s, TR metoda implementovaná v programu ode23t a dvě L-stabilní metody řádu 2: TR-BDF2 metoda (jde o kombinaci metod TR a BDF2) implementovaná v programu ode23tb a Rosenbrockova metoda implementovaná v programu ode23s, podrobnosti viz [32]. Programy odel5s, ode23t a ode23tb vyžadují řešení nelineárních soustav rovnic tvaru kde parametr 7 je charakteristická konstanta metody a je vektor nezávislý na yn+i. (8.34) 214 Například pro TR metodu (8.13) je 7 = I at/,=yn + \ri(tn,yn). Rovnici (8.34) řešíme zjednodušenou Newtonovou metodou. Počáteční aproximaci yn+i získáme dostatečně přesnou extrapolací z hodnot yn, Yn-i, • • • • Další aproximace yns+1'> získáme řešením soustav lineárních rovnic (I - r7J) (y£? - yit) = r7f (Wi, yns+1) + - yiti, (8-35) kde I je jednotková matice a J je Jacobiho matice fy(ín+i-fc, Yn+i-fc) Pro nějaké k > 0 (jedná se tedy o zjednodušenou Newtonovu metodu, pokud by J = fy(ín+i, yn+i), šlo by o klasickou Newtonovu metodu). Výpočet organizujeme takto: označíme G = I - r7J, ds = y^i0 - y21; gs = r7f (tn+1, y^jj + V ~ yi+i a vypočteme nejdříve ds jako řešení soustavy lineárních rovnic Gds = gs a pak dopočítáme yi+i ^ = yi+i + ds. Je-li přírůstek ds dostatečně malý, klademe yn+i = y^+i Matice soustavy G obsahuje tři členy, které se mohou měnit: r při změně délky kroku, 7 při změně metody (třeba ve VSVO implementaci metod zpětného derivování) a J při přepočítání Jacobiho matice. Pokud se žádný z těchto členů nezmění, zůstává matice G stejná. Toho je třeba využít: pouze při změně G provedeme výpočetně náročný LU rozklad matice soustavy G = LU, kde L je dolní trojúhelníková matice a U horní trojúhelníková matice. V následujících iteracích, kdy se matice soustavy G nemění, provádíme výpočetně nenáročná řešení dvou soustav lineárních rovnic s trojúhelníkovou maticí soustavy, tj. Lôs = gs a pak Uds = ôs. Program, který má pracovat efektivně, musí mít promyšlenou strategii, podle níž rozhodne, kdy změní J, což je výpočetně nej náročnější, a kdy jen r nebo 7, což znamená nový LU rozklad matice G. Používá se „konzervativní strategie": přepočítání Jacobiho matice se provede až tehdy, když Newtonova metoda nekonverguje dostatečně rychle, délku kroku případně metodu změníme, až když očekávaný zisk takové akce převýší náklady spojené s LU rozkladem. Jacobiho matici lze zadat přesně nebo ji lze spočítat přibližně numericky (Matlab užívá funkci odenumjac z privátní knihovny toolboxu matlab\f unf un). Pokud je Jacobiho matice řídká a uživatel zadá pozice jejích nenulových prvků, výpočet Jacobiho matice lze značně urychlit. Do dalších podrobností už zacházet nebudeme, zájemce odkazujeme na skvělou monografii [50] a na matlabovskou dokumentaci [32]. Významným zdrojem poučení je studium kódů jednotlivých matlabovských programů, příliš snadné čtení to však není. Program ode23s, založený na implementaci Rosenbrockovy metody, se od zbývajících programů odel5s, ode23t a ode23tb liší v tom, že se vyhýbá řešení nelineárních rovnic. V každém kroku Rosenbrockovy metody je třeba sestavit Jacobiho matici fy (tn, yn) a vektor derivací ft(ín,yn) = {dfí(tn,yn)/dt}f=1, provést LU rozklad matice I — 7Tfy(rn,yn) a užitím tohoto rozkladu vyřešit tři soustavy lineárních rovnic, podrobnosti viz [52]. Statistika o činnosti matlabovských programů pro řešení ODR. Kvalitní programy uživateli vždy poskytují informaci o tom, jak úspěšně si při řešení konkrétního 215 problému počínaly. V Matlabu se dodávají tato čísla: pk počet úspěšných kroků pn počet neúspěšných kroků pf počet vyhodnocených pravých stran f pj počet sestavených Jacobiho matic J pr počet LU rozkladů J = LU ps počet řešených soustav lineárních rovnic LUds = gs Pro ilustraci uvádíme Příklad 8.3 Robertsonův problém y[ = -0,04^ + 104žM/3, ž/i(0) = 1, y'2 = 0,04 Vl - 104 y2y3 - 3 • 107 y\ , y2(0) = 0 , y'3 = S-107y22, 2/3(0) = 0 popisuje koncentrace tří příměsí v chemické reakci, tj. 0 < yi,y2,y3 < 1, nezávisle proměnná t je čas, blíže viz [50]. Jacobiho matice této soustavy je /-0,04 ÍO4^ W4y2\ 3=1 0,04 -104y3-6-107y2 -104y2 . \ 0 6 • 107y2 0 / V čase t = 0, tj. pro yľ = 1, y2 = y3 = 0, má Jacobiho matice vlastní čísla {—0,04; 0; 0}. Z fyzikálních úvah plyne, že yľ, y2 —> 0 a y3 —> 1 pro ŕ —)• oo. Vlastní čísla Jacobiho matice pro y± = y2 = 0, y3 = 1, jsou { — 10 000,04; 0; 0}. Při řešení na intervalu (0,1010) je Robertsonův problém tuhý. O tom se lze ostatně snadno přesvědčit experimentálně: explicitní metody selhávají, metody pro řešení tuhých problémů zabírají. Numerickým výpočtem lze zjistit, že již pro t > 0,01 je spektrální poloměr g(3) > 2 • 103, takže Robertsonův problém lze považovat za tuhý již na nepoměrně kratším intervalu délky řádově v jednotkách. Úlohu jsme řešili dvěma matlabovskými programy určenými pro tuhé problémy: programem ode23t (TR metoda) a programem odel5s (metody BDFk, k=l,2,... ,5). Délku kroku jsme řídili pomocí tolerancí er = 10~3, ea = 10~6, činnost programu odel5s jsme omezili tak, aby pracoval jen s BDF metodami řádů 1, 2 a 3. Do následující tabulky jsme zapsali „statistiku" výpočtu, tj. čísla pk, pn, pf, pj, pr, ps: pk pn Pf PJ pr ps ode23t 238 74 794 37 188 644 odel5s 245 15 504 11 67 458 Z tabulky plyne, že oba testované programy Robertsonův problém úspěšně vyřešily, program odel5s se podle statistiky jeví jako efektivnější. 216 9. Obyčejné diferenciální rovnice: okrajové úlohy Okrajový problém pro soustavu ODR1 spočívá v určení funkce y(x), která v intervalu (a, b) splňuje diferenciální rovnici y'(x) = í(x,y(x)) (9.1) a v koncových bodech intervalu (a, b) vyhovuje okrajové podmínce r(y(a),y(6)) = o. (9.2) Stejně jako v kapitole 8.1 předpokládáme, že počet rovnic jakož i počet okrajových podmínek je roven d, tedy y(x) = (yi(x),y2(x),... ,yd(x))T, y'(x) = (y[(x),y'2(x),...,y'd(x))T, í(x, y(x)) = (f(x, y(x)),f2(x, y(x)),fd(x, y(x)))T, r(y(a), y(b)) = (n(y(a), y(b)), r2(y(a), y(b)),..., rd(y(a), y(6)))T. Ve speciálním případě, když r(y(a),y(&)) = y (a) ~ V = o nebo-li y(á) = 77, (9.3) přechází problém (9.1)-(9.2) v počáteční problém (8.4). Pokud je však v podmínkách (9.2) obsažena alespoň jedna složka vektoru y (a) a současně také alespoň jedna složka vektoru y(b), jde o problém okrajový. Právě tímto případem se budeme v dalším zabývat. Podstatný rozdíl mezi počáteční a okrajovou úlohou spočívá v tom, že zatímco řešení úlohy s počátečními podmínkami existuje a je jediné pro dosti širokou třídu diferenciálních rovnic, u okrajové úlohy s velmi jednoduchou diferenciální rovnicí je možné, že řešení neexistuje nebo naopak, že řešení je nekonečně mnoho. Tuto skutečnost si ukažme na rovnici y' = y, jejíž obecné řešení je y = Cex. Odtud plyne, že pro okrajovou podmínku (a) y(0) = y(l) existuje jediné řešení y = 0, (b) e y (ti) = y(l) existuje nekonečně mnoho řešení y = Cex, C libovolné, (c) e y (ti) = y(l) + 1 řešení neexistuje. V kapitole 9.1 ukážeme, jak řešit okrajový problém pro soustavu ODRI metodou střelby. V následujících kapitolách pak popíšeme tři nejznámější metody řešení okrajového problému pro ODR2: v kapitole 9.2 diferenční metodu, v kapitole 9.3 metodu konečných objemů a v kapitole 9.4 metodu konečných prvků. 217 9.1. Metoda střelby Metoda střelby je založena na numerickém řešení počátečního problému y'(x) = í(x,y(x)), y(a) = r], za omezující podmínky r(*7,y0)) = o. (9.4) (9.5) Neznámá počáteční hodnota rj je určena implicitně rovnicí (9.5). Lichoběžníková metoda. Nechť a = x0 < X\ < ■ ■ ■ < x^ = b je dělení intervalu (a, b), hi = Xí+i — Xi je délka kroku a h = maxj hi. Přibližné řešení y^, i = 0,1,..., N, dostaneme jako řešení soustavy d(N + 1) rovnic Yí+i = Yí + ^hi[f(xhyi) + f(xi+i,yi+i)], r(yo,yiv) = 0. 0,1,. ..,N (9.6) Soustava (9.6) je obecně nelineární. Její řešení se obvykle počítá pomocí nějaké varianty Newtonovy metody. Aby nastala konvergence, je třeba dodat dosti dobrou počáteční aproximaci y^ y(xi), i = 0,1,..., N. Lichoběžníková metoda je řádu 2, tj. je-li funkce f dostatečně hladká, pro chybu platí y^-y^Oih2), čímž se míní, že řádu 0(h2) je každá složka vektoru y(xi) — y«. Ve speciálním případě, když f(x,y) je lineární v proměnné y a r(u, v) je lineární v obou proměnných u i v, bude soustava rovnic (9.6) lineární. Nechť tedy y' = A(x)y + q(x), Bay(a) + B6y(6) = c. Soustava (9.6) je pak tvaru [-1 - \hiA(xi)\ y i + [I - ±hiA(xi+1)] yi+1 = |^[q(^) + tl(xi+1) Bay0 + B^y^v = c , kde I je jednotková matice. Maticový zápis této soustavy je (9.7) / Ro So Ri Si \ / yo \ yi R N-l &N-1 B yjv-i í v0 \ Vl vjv-i V c J (9.8) 218 kde Rí = -I - \híA(xí) , Si = I - \hiA(xi+1), ví = lhi[q(xi) + q(xi+1)] . Simpsonova metoda. Matlab nabízí pro řešení okrajového problému (9.1)-(9.2) program bvp4c, který je založen na použití Simpsonovy formule Yí+i =Yí + \hi[í(xi,yi) +4f(ari+i/2,yi+i/2) + f (xi+u yi+1)], (9.9) kde xi+1/2 = Xi + \hi, ym/2 = ±(yť + yi+i) + |^[f(^,yí) - f(xi+1,yi+1)] , Simpsonova formule (9.9) je řádu 4, tj. pro chybu platí y{Xi) -yt = 0{hA). Další informace o Simpsonově formuli (9.9) lze načerpat v [51], [26] a také v [32]. V případě lineární úlohy (9.7) řešíme soustavu lineárních rovnic (9.8), matice Rj, S« a vektory v« získáme z formule (9.9), v níž klademe í(x,y) = A(x)y + q(rc). Odvození vzorců pro Rj, S« a v« ponecháváme čtenáři jako cvičení. 9.2. Diferenční metoda Ve zbytku kapitoly 9 se budeme převážně zabývat lineární ODR2 - \p(x)u']' + q(x)u = f(x), x E (0,i) . (9.10) Předpokládejme, že funkce p, p', q i / jsou spojité, dále že p{x) > p0 > 0, q{x) > 0, a uvažujme nejdříve jednoduché okrajové podmínky u(0)=g0, (9.11a) u{i) = gí. (9.11b) Za uvedených předpokladů má úloha (9.10) - (9.11) jediné řešení. Úloha (9.10) - (9.11) může popisovat například problém tahu-tlaku prutu, tedy prutu namáhaného pouze tahem popřípadě tlakem. V tom případě je u posunutí střednicové čáry prutu, p = EA, kde E je Youngův modul pružnosti a A je plocha průřezu prutu, q je měrný odpor podloží, na němž prut spočívá, / je intenzita zatížení a g0 a gi jsou předepsaná posunutí koncových bodů prutu. Jinou aplikací, popsanou stejnou rovnicí a stejnými okrajovými podmínkami, je například stacionární úloha vedení tepla v tyči. Pak u je teplota, p je koeficient tepelné vodivosti, / — qu je intenzita tepelných zdrojů, g0 a gi jsou teploty koncových bodů tyče. Úlohu (9.10) - (9.11) lze přeformulovat do tvaru (9.1)-(9.2), stačí položit yi) = (U), f=f V2,PX r=(yi?Á~9°)i (9-12) y2J \pu'J \qyi-fj \yi{£)-gej a následně řešit metodou střelby, viz kapitola 9.1. My si ale vysvětlíme jinou techniku, známou jako diferenční metoda (stručně FDM podle anglického finite difference method). 219 FDM je klasická diskretizační metoda, zevrubně popsaná a analyzovaná v celé řadě publikací, viz např. [29], [59]. Nechť 0 = x0 < X\ < ■ ■ ■ < Xn = l je dělení intervalu (0, l) a h,i = x,i — Xí_i je délka kroku. Body x i nazýváme uzly a množinu {xi}f=Q uzlů nazýváme sítí. Pro jednoduchost se omezíme na ekvidistantní dělení, takže hi = h = Í/N a Xi = ih, i = 0,1,..., N. Splnění rovnice (9.10) budeme vyžadovat pouze ve vnitřních uzlech sítě, tj. ipu,y\x=xi+qiu(xi) = fi, i = l,2,...,N-1, (9.13) kde q,i = q{xi) a fi = f{xi). Clen — {pu')'\ nahradíme diferenčním podílem. Pomocí označení Xí-l/2 =Xi~\h, Xi+1/2 =Xi + \h, Pi-X/2 = p(Xi_1/2) , Pí+1/2 = p(xi+1/2) lze přibližně položit _/ ,y| ^ PU'\x=xi+1/2 ~PU'\x=Xi_1/2 = Pi+l/2u'(xi+1/2) - Pi-1/2u'(xi_1/2) iPu > \x=xí ~ h ~ h u(xi+1) - u(x,j) u(x,j) - m(Xj_i) . Pt+1/2 h ~pt-1/2 h h Užitím Taylorova rozvoje snadno ověříme, že tato aproximace je řádu 0(h2), tj. že platí -i.Pu)\x=x% =-^2-+ 0{h). (9.14) Po zanedbání chyby 0(h2) tak z (9.14) a (9.13) dostáváme pro přibližné řešení Ui ~ u(xí) soustavu rovnic -Pí-l/2Uí-l + (Pí-1/2 + Pí+1/2 + h2qi)ui - pi+1/2ui+1 - = fi, (9-15) h2 pro i = 1,2,... ,N — 1. Z okrajových podmínek máme u0=g0, (9.16a) un = 9i ■ (9.16b) To nám umožní dosadit do první rovnice u0 = g0 a člen —pi/29o/h2 převést na pravou stranu. Podobně v poslední rovnici položíme = ge a člen —pN-i/29e/h2 převedeme na pravou stranu. Matice takto upravené soustavy rovnic (9.15) je třídiagonální, pozitivně definitní, diagonálně dominantní (pro g« > 0 ryze). Tyto vlastnosti zaručují, že matice soustavy je regulární a soustava rovnic má jediné řešení. Jsou-li funkce p, q a / dostatečně hladké, pak pro chybu platí u(xí) - Ui = 0(h2), (9.17) přesná formulace a příslušný důkaz viz [59]. 220 Okrajové podmínky s derivací. Okrajové podmínky (9.11) se nazývají Díríchletovy. V aplikacích se objevují ještě další typy okrajových podmínek. Podmínky p(0)u'(0) = a0u(0) - f30, (9.18a) -p(£)u'(£) = cteu(£) - pe (9.18b) se nazývají Newtonovy nebo také Robínovy. Pokud ct0 = 0 resp. cti = 0, hovoříme o Neumannově okrajové podmínce. Aby byla zaručena jednoznačná existence řešení, předpokládejme «o > 0, cti > 0, a pokud uvažujeme okrajové podmínky (9.18a) a (9.18b), pak předpokládejme navíc buďto «o > 0 nebo on > 0 nebo q(x) > qo > 0 alespoň na části intervalu (0,£). Pokud «o = ae = 0 a g(x) = 0 v (0,£), pak úloha (9.10)-(9.18) buďto nemá řešení nebo má nekonečně mnoho řešení. Skutečně, integrací (9.10) a užitím (9.18) dostaneme nutnou podmínku existence řešení, tzv. podmínku rovnováhy pí pí [f + (pu')'] dx = / f dx +pu'^ll = / fdx + p0 + pe = 0. o Jo Jo Pokud podmínka rovnováhy splněna není, řešení neexistuje. Je-li však podmínka rovnováhy splněna a u je řešení, pak je řešením také funkce u + C, kde C je libovolná konstanta. Interpretujeme-li Newtonovy okrajové podmínky v úloze tahu-tlaku prutu, je pu' normálová síla, «o, ae Jsou tuhosti pružin v koncových bodech prutu a /3q, fit jsou zadané síly působící na koncích prutu. V úloze stacionárního vedení tepla je pu' tepelný tok, «o, cti jsou koeficienty přestupu tepla a /3q, fit jsou zadané tepelné toky na okrajích tyče. Tepelné toky se často uvažují ve tvaru j30 = ct0UQ, fig = ct£U^, kde Uq resp. u\ je vnější teplota okolo levého resp. pravého konce tyče. V případě zadané okrajové podmínky (9.18a) eventuálně (9.18b) musíme sestavit rovnici umožňující výpočet neznámé uq eventuálně u^. Ukažme si to třeba pro případ předepsané okrajové podmínky (9.18a). Pomůžeme si tak, že budeme požadovat, aby rovnice (9.10) platila také v levém krajním uzlu x0 = 0, tj. aby rovnice (9.13) byla splněna rovněž pro i = 0. Clen ~(pu')'\x-x vyjádříme nejdříve pomocí jednostranné diference a pak pomocí centrální diference a vztahu (9.18a), tj. pu'\ — pu'\ ( lx=x1/2 ľ \x=x0 - (PU ) \x=x0 =--p- + °(h) = -Pl/2 u-+ CtoU(Xo) ~ Po \h Zanedbáme-li chyby, dostaneme rovnici pro neznámou u0 (pi/2 + hct0 + ±h2q0)u0 - p1/2u1 11 -h*- " h'° + 2/o • (9-19a) V případě okrajové podmínky (9.18b) postupujeme obdobně, tj. požadujeme splnění rovnice (9.13) také pro i = N, a po úpravách obdržíme rovnici pro neznámou -pn-i/2UN-! + (pn-i/2 + ha e + \h2qN)uN 11 , , -h2-~h(5í+2tN- (9-19b) 221 Je-li předepsána okrajová podmínka (9.18a), zapíšeme jako první rovnici (9.19a), pak následují rovnice (9.15) pro i = 1, 2,..., N — 1, a je-li předepsána okrajová podmínka (9.18b), připojíme jako poslední rovnici (9.19b). Jsou-li předepsány Dirichletovy okrajové podmínky, dosadíme qq za uq resp. ge za u^ a příslušné členy převedeme na pravou stranu. Matice výsledné soustavy rovnic je opět třídiagonální, pozitivně definitní a diagonálně dominantní. I když se při odvození rovnic (9.19) dopouštíme chyby řádu 0(h), pro chybu přibližného řešení platí zase vztah (9.17). Rovnice s konvekčním členem. V aplikacích často vzniká potřeba řešit poněkud obecnější rovnici - [p(x)u' - r(x)u}'+ q(x)u = f(x), xe(0,£). (9.20) Tato rovnice popisuje například transport chemické příměsi v tekutině. V tom případě je u koncentrace příměsi v tekutině, r = gv, kde g je hustota tekutiny a v její rychlost, p je koeficient difúze a / — qu je intenzita objemového zdroje příměsi. Rovnici (9.20) lze použít také k popisu teplotního pole v tekutině. Pak u je teplota, r = cgv, kde c je tepelná kapacita, g hustota a v rychlost tekutiny, p je tepelná vodivost a / — qu je intenzita vnitřních tepelných zdrojů. S přihlédnutím k typické fyzikální interpretaci říkáme, že — {pu')' je difúzni člen, (ru)' je konvekční clen a / — qu je zdrojový clen. Pokud jde o okrajové podmínky, budeme postupovat takto: „na vtoku", tj. bodě x = 0 pro r(0) > 0 resp. v bodě x = l pro r{€) < 0, můžeme předpokládat, že veličinu u{x) známe, a proto její hodnotu předepíšeme prostřednictvím Dirichletovy okrajové podmínky. „Na výtoku", tj. bodě x = 0 pro r(0) < 0 resp. v bodě x = l pro r{€) > 0, můžeme zadat jak Dirichletovu tak Newtonovu okrajovou podmínku. V [23] je dokázáno, že rovnice (9.20) doplněná o okrajové podmínky má jediné řešení třeba tehdy, když kromě dřívějších předpokladů navíc platí r'(x) > 0, ct0- ±r(0) > 0, a£ + \r{l) > 0. Jsou-li na obou okrajích x = 0 i x = l předepsány Dirichletovy okrajové podmínky, stačí předpokládat r'(x)>0, xe(0,£). (9.21) Zadáme-li Newtonovu okrajovou podmínku jen na výtoku, pak podmínka "o - M0) ^ 0 resp. + \r(€) > 0 zřejmě platí, takže opět stačí předpokládat jen (9.21). Je-li r(0) < 0 a r{€) < 0, pak levý okraj x = 0 je výtok a pravý okraj x = l je vtok. Je-li r(0) < 0 a r{€) > 0, pak oba okraje představují výtok. Je-li r(0) > 0, pak podle (9.21) také r{€) > 0, takže x = 0 je vtok a x = l je výtok. Oba konce nemohou být vtokem: r(0) > 0 a r(t) < 0 není podle (9.21) možné. V dynamice tekutin se ukazuje, že v nestlačitelné tekutině rychlost v = (vi, v2, v3)T splňuje rovnici kontinuity div v = 0. V jedné dimenzi tedy v' = 0, takže v je konstanta. Volba konstantní funkce r tedy představuje fyzikálně opodstatněnou možnost. Podmínka (9.21) je pro konstantní funkci r triviálně splněna. 222 Věnujme se tedy diskretizaci. Konvekční člen vyjádříme ve vnitřních uzlech pomocí centrální diference M'U = r<+1/2 ; r<-1/2 + 0(h2) (9.22) a v koncových uzlech pomocí jednostranné diference 2/t / V| ru\xN r"U\xN_1/2 s^,,\ M =-p-+ °(h) ■ (9.23) V (9.22) a (9.23) vyjádříme konvekční tok ru ve středech rCj+i/2 úseček (xí,xí+1) interpolací jako aritmetický průměr hodnot u v koncových bodech, ru xi+l/2 ±rt+1/2[u(xt) + u(xt+1)]+0(h2), i = 0,l,...,N-l. (9.24) Po zanedbání chybových členů v (9.22)-(9.24), obdržíme soustavu rovnic, jejíž tvar vyjádříme prostřednictvím dříve odvozených rovnic (9.15) a (9.19) takto: na levou stranu rovnice [^1/2(^0 + ^1) - r0u0] /h, přidáme člen <{ \[ri+1/2(ui + ui+1) - ri_i/2(«i-i + Ui)]/h, (9.25) [rNuN - \rN_1/2(uN-i + uN)] /h. Matice takto vzniklé soustavy rovnic je třídiagonální a nesymetrická. Dá se ukázat, že když |%o| < P1/2, \h\ri+1/2\ < pi+i/2, i = 0,1,... ,N - 1, \h\rN\ < pN-1/2, (9.26) pak je matice soustavy regulární. Pro dostatečně jemné dělení intervalu (0,£) bude podmínka (9.26) jistě splněna. Pro chybu opět platí (9.17). Dominantní konvekce. Podmínka (9.26) může být značně omezující v případě, kdy konvekční koeficient výrazně převažuje nad koeficientem difúzním, tedy pro \r\ ^> p. Pak je účelné vyjádřit konvekční tok ru ve středech xi+i/2 úseček (xí,Xí+i) takto: Íri+1/2u(xi) + O (ti) pro ri+1/2 > 0, (9.27) ri+1/2u(xi+1) + O (ti) pro ri+1/2 < 0. Aproximace (9.27) je z fyzikálního hlediska přirozená: informaci o řešení u v uzlu 3^+1/2 čerpáme ze znalosti řešení proti „proudu", proti „větru": pro ri+i/2 > 0 „fouká zleva", proto použijeme hodnotu u(x,i) v uzlu x,i ležícím nalevo od bodu xi+1/2, pro ri+i/2 < 0 „fouká zprava" a proto použijeme hodnotu u(xi+1) v uzlu xi+1 ležícím napravo od bodu 223 xi+i/2- Jednostrannou aproximaci konvekčního toku podle (9.27) nazýváme upwind aproximací. Pomocí označení a+ = max(a, 0), a~ = min(a, 0), kde a je libovolné číslo, lze (9.27) zapsat v kompaktním tvaru rak+i/2 = rt+i/2u(xi) + r7+i/2u(xi+i) + °(h)> i = 0,1,..., iV - 1. (9.28) Po zanedbání chybových členů v (9.22), (9.23) a (9.28) obdržíme výslednou soustavu rovnic, jejíž tvar vyjádříme prostřednictvím dříve odvozených rovnic (9.15) a (9.19) takto: na levou stranu rovnice (9.19a) j ( [(rt/2-r0)u0 + r-/2Ul]/h, (9.15) l přidáme člen 0 je konstanta. Přesné řešení 1 - ex'e u(x) 1 - e1/* je rostoucí funkce. Diskretizací konvekčního členu pomocí centrální diference (9.252), tj. pomocí druhého vztahu v (9.25), dostaneme rovnici ui+1 - 2uí + Ui_x ui+1 - Ui_x ~£-h2-+ 2h = °' kterou lze při označení k := h/e zapsat ekvivalentně ve tvaru -(1 + + 2uí - (1 - \k)uí+1 = 0 . 224 Pro k = 2 dostaneme u,t = takže řešení je u,t = 0 pro i < N a -u^r snadným výpočtem ověříme, že diferenční rovnici vyhovuje řešení 1. Pro k ý 2 m,- k kde Ci a C2 jsou konstanty, které určíme z okrajových podmínek. Pro k > 2 přibližné řešení Ui osciluje okolo C\, což je v rozporu s chováním přesného řešení u, rostoucí posloupnost {uí}^L0 dostaneme jen pro \k\ < 2, což je podmínka (9.26) pro p = e, r = 1. Naši modelovou úlohu vyřešíme také upwind technikou. Konvekční člen nahradíme levostrannou diferencí podle (9.292) a dostaneme rovnici ui+1 - 2uí + Ui-i Ui - Ui-i 0. h2 h Diferenční rovnici vyhovuje řešení Ui = C1 + C2(1 + k)í, které je rostoucí nezávisle na velikosti k. □ n U 1 m ■ r: ,..n----n. ..A. j *. : : Id "1_r * • • ■ ■ j i ■ ■ □ 0 0.2 0.4 0.6 0.8 x 0 0.2 0.4 0.6 0.8 x Obr. 9.1. £ = ^jQ, ./V = 11, vlevo centrální diference, vpravo upwind aproximace 9.3. Metoda konečných objemů (stručně FVM podle anglického finíte volume method) se používá především pro řešení problémů proudění ve více prostorových proměnných, např. viz [57], [16]. Princip této metody však lze objasnit i pro jednodimenzionální úlohu popsanou diferenciální rovnicí (9.20) a okrajovými podmínkami (9.11) a (9.0). Ke každému uzlu x,i přiřadíme konečný objem E>i (stručně buňku) takto: pro vnitřní uzly Bi = (xi_1/2,Xi+1/2} , i = 1,2,...,N - 1, a pro koncové uzly B0 = (0,x1/2), 225 Bn = (xn_i/2,£). Zřejmě (0,£) = {jf=0Bí. Integrací rovnice (9.20) přes buňku Bí dostaneme bilanční rovnici -\pu' — ru]' dx + / qudx = f dx. (9.31) Bi j Bi j Bí Předpokládejme nejdříve, že Bí přísluší vnitřnímu uzlu. Pak dostaneme _ rxi+i/2 rxi+i/2 -\pu' - rw]z=^±í/2 + / qudx= f dx. (9.32) Difúzni tok aproximujeme pomocí centrální diference, Pí-i/2u'(xí-1/2) = ~^xi-^ + 0(h2), i = l,2,...,N-l, (9.33) a konvekční tok aproximujeme pomocí centrální aproximace (9.24) resp. upwind aproximace (9.28). Integrály v rovnici (9.32) spočteme obdélníkovou formulí, qudx = hqiu(xi) + O(tr) , / /dx = hfc + O(tr). Xi-l/2 JXi-1/2 Zanedbáme-li chyby, dostaneme aproximaci bilanční rovnice (9.32) ve tvaru (9.252) resp. (9.292). Je-li v koncovém bodě x = 0 resp. x = l předepsána Newtonova okrajová podmínka (9.18a) resp. (9.18b), je třeba uvážit bilanční rovnici (9.31) také pro buňku Bq resp. B^. Tak například pro buňku B0 máme — (pv! — ru) _ + / qudx = f dx. i x—xq i i Jxo jxo Difúzni tok v bodě x±/2 aproximujeme centrální diferencí (9.33), konvekční tok v bodě xi/2 aproximujeme pomocí (9.24) resp. (9.28), člen p(0)u'(0) vyjádříme pomocí okrajové podmínky (9.18a) a integrály spočteme levostrannou obdélníkovou formulí, *l/2 fxl/2 qu dx = ^hq0u(x0) + 0(h2) , / f dx = ^hf0 + 0(h2) . x0 J x0 Zanedbáme-li chyby, dostaneme rovnici (9.25i) resp. (9.29i). Rovnici (9.25a) resp. (9.29a) odvodíme obdobně z bilanční rovnice (9.31) zapsané pro buňku B^. Metodou konečných objemů jsme tedy dostali stejné rovnice jako rovnice odvozené metodou diferenční. Přednosti metody konečných objemů ve srovnání s metodou diferenční vyniknou až při řešení parciálních diferenciálních rovnic ve více prostorových proměnných. 9.4. Metoda konečných prvků Nejuniverzálnější metodou diskretizace okrajových úloh je metoda konečných prvků (stručně FEM podle anglického finite element method, česky MKP). V úlohách mechaniky 226 pevné fáze je to jednoznačně nejpoužívanější metoda. I když přednosti MKP lze plně ocenit teprve u úloh ve dvou a třech prostorových proměnných, podstatu metody lze objasnit i na jednodimenzionální úloze. Z řady publikací věnovaných MKP zmiňme např. [18], [61], [5]. Východiskem pro diskretizaci metodou konečných prvků je slabá formulace okrajové úlohy. Proto si teď ukážeme, jak z klasické formulace (9.20), (9.11), (9.18) formulaci slabou dostaneme. Nejdříve zavedeme následující Označení. Symbolem C(0,£) budeme značit prostor všech funkcí, které jsou v intervalu (0,£) spojité, a symbolem Ck(0,£) pak prostor všech funkcí, které jsou v intervalu (0,£) spojité spolu se svými derivacemi až do řádu k včetně (C podle anglického continuous). Říkáme, že bod a je pro funkci f(x) bodem nespojitosti prvního druhu, existuje-li v a konečná limita zprava i zleva [označme tyto limity f (a + 0) resp. f (a — 0)] a je-li f(a + 0)rf(a-0). Funkce f(x) definovaná v intervalu (0, £) se nazývá po částech spojitá v intervalu (0, £), je-li v (0,£) spojitá s výjimkou konečného počtu bodů, v nichž má nespojitost prvního druhu. Prostor funkcí po částech spojitých v intervalu (0,£) označíme PC(0,£) (PC podle anglického piecewise continuous). Symbolem PCk(0,£) značíme prostor funkcí, které jsou v intervalu (0, £) spojité spolu se svými derivacemi až do řádu k — 1 včetně, a jejichž A;-tá derivace je v intervalu (0,£) po částech spojitá. V dalším budeme používat zejména prostor C1(0, £) funkcí, které jsou v intervalu (0, £) spojité spolu se svou první derivací, a prostor PCľ(0, £) funkcí, které jsou v intervalu (0, £) spojité a mají v něm po částech spojitou první derivaci. Slabá formulace. Začneme tím, že zavedeme pojem testovací funkce: funkci v G Cľ(0,£) nazveme testovací, jestliže íi = 0v tom krajním bodě intervalu (0, £), v němž je předepsána Dirichletova okrajová podmínka. Pro konkrétnost se omezíme na okrajové podmínky (9.11a) a (9.18b), takže testovací funkce v splňuje v(0) = 0. Násobme rovnici (9.10) testovací funkcí v a integrujme přes (0,£). Integrací per-partes členu jQ \—(pu' — ru)']vdx a následným užitím okrajové podmínky (9.18b) a vztahu v(0) = 0 obdržíme ŕ x-i fvdx= / [— (pu1 — ru)' + qu] v dx = — (pu1 — ru)v\x + o Jo x~ r-l r-l + / \{PU' ~ ru)v' + quv] dx = \a(u(£) — fiz + r(£)u(£) ]v(£) + / \(pu' — ru)v' + quv] dx. Jo Jo Odvodili jsme tedy, že řešení u úlohy (9.10), (9.11a) a (9.18b) musí splňovat kromě Dirichletovy okrajové podmínky -u(0) = Qq také rovnost \(pu' - ru)v' + quv] dx + [ae + r(£)}u(£)v(£) = / f v dx + /3ev(£) (9.34) o Jo pro každou funkci v G Cľ(0,£), v(0) = 0. Okrajová podmínka (9.18b) Newtonova typu, která se stala součástí integrální rovnice (9.34) a je tak automaticky splněna, se nazývá přirozenou okrajovou podmínkou. Dirichletovu okrajovou podmínku (9.11a), která součástí 227 rovnice (9.34) není a jejíž explicitní splnění proto musíme vyžadovat, nazýváme podstatnou nebo také hlavni okrajovou podmínkou. Rovnice (9.34) je dobře definována i v případě, kdy funkce u a v jsou z prostoru X = PCľ(0,£). Testovací funkce pak volíme z prostoru V = {v G X\ v(0) = 0} testovacích funkcí a řešení u z množiny W = {v G X\ v(0) = go} přípustných řešení. Dále označíme a(u, v) = I \{pu' — ru)v' + quv] dx + [a^ + r(£)]u(£)v(£), 0 (9.35) L{v) = / fvdx +/3ev(£). Jo Pak úlohu najít u G W splňující a(u,v) = L(v) \/v G V (9.36) nazýváme slabou formulací problému (9.10), (9.11a), (9.18b). Řešení úlohy (9.36) nazveme slabým řešením. Slabá formulace je obecnější než formulace klasická, neboť klade nižší nároky na hladkost dat: klasická formulace: p,r G C1(0,£),g, / G C(0,£) , (9.37a) slabá formulace: P,r,q, f G PC(0,£) . (9.37b) Jestliže p, r', q, f G PC(0, £), p > p0 > 0, q + \r' > 0, a£ + \r{£) > 0, pak úloha (9.36) má jediné slabé řešení, viz [23]. Ukázali jsme si, že klasické řešení je vždy také řešení slabé, viz odvození rovnice (9.34). Opak obecně neplatí, tj. slabé řešení nemusí být řešení klasické. Jsou-li však funkce p, r, q a f dostatečně hladké, konkrétně platí-li podmínky (9.37a), pak lze dokázat, že slabé řešení u G C2(0,£) je řešení klasické. Slabá formulace má v úloze tahu-tlaku prutu (kdy r = 0) význam principu virtuálních posunutí a samotné testovací funkce v E V mají význam virtuálních posunutí Su přípustných řešení u G W. Slabá formulace je tedy zcela přirozená, neboť konkrétně pro úlohu tahu-tlaku prutu popisuje základní fyzikální zákon mechaniky kontinua. Slabá formulace pro všechny kombinace okrajových podmínek. Uveďme si tvar V, W, a(u,v) a L(v) pro všechny možné kombinace okrajových podmínek. (DD) Okrajové podmínky (9.11a), (9.11b) V = {v G X | v(0) = v (i) = 0}, W = {v G X | v(0) = g0, v (i) = ge}, (9.38-DD) pí pí a(u, v) = \{pu' — ru)v' + quv] dx, L (v) = fvdx. Jo Jo (DN) Okrajové podmínky (9.11a), (9.18b) V = {v G X | v(0) = 0}, W = {v G X\v(0) = g0}, (9.38-DN) pí pí a{u, v) = \{pu' — ru)v' + quv] dx + [cte + r(£)]u(£)v(£), L (v) = fv dx + fítv(í) . Jo Jo 228 (ND) Okrajové podmínky (9.18a), (9.11b) V = {v G X | v(£) = 0}, W = {v eX\v(£) = ge}, (9.38-ND) pí pí a(u,v) = / [(pu'— ru)v'+ quv]dx + [cto — r(0)]u(0)v(0), L{v) = i f v dx + Pqv(0) . Jo Jo (NN) Okrajové podmínky (9.18a), (9.18b) V = X, W = X, (9.38-NN) a(u, v) = í [{pv! - ru)v' + quv] dx + [a0 - r(0)]u(0)v(0) + [ae + r(£)]u(£)v(£), Jo L{v) = / f v dx + pQv(0) + ptv{l). Jo Ve všech čtyřech případech je zaručena jednoznačná existence slabého řešení úlohy (9.36), pokud p,r',q,f G PC(0,£), p > p0 > 0, q + \r' > 0, a0 - ±r(0) > 0, ae + \r(£) > 0. V případě úlohy (9.38-NN) je třeba navíc předpokládat a0 — |r(0) > 0 nebo nebo q + |r' > go > 0 alespoň na části (0,£), viz [23]. Diskretizace užitím lineárního prvku. Na intervalu (0,£) zvolíme dělení 0 = xq < x\ < ■ ■ ■ < xn = £ a na každé úsečce (xí-i,Xí) délky hi = Xi — Xi-i hledáme přibližné řešení U(x) ve tvaru lineárního polynomu procházejícího body [:Cj_i,itj_i] a [xj,Mj], takže U(x) = Ui-xWi-^x) + UíWí(x), kde w^x) = —, w^x) = - Funkce U(x) je tedy na celém intervalu (0,£) spojitou po částech lineárni funkcí určenou předpisem N U(x) = ^2UíWí(x), (9.39) i=0 kde Wi(x) se jsou tzv. bázové funkce, lineární na každé úsečce (xk-i,Xk) a takové, že 1 pro i = j, (J pro j. Obr. 9.2. Lineární Lagrangeovy bázové funkce 229 Úsečku (xí-i,Xí), na které je definována lineární funkce určená svými hodnotami Ui-i resp. U i v uzlech Xi-i resp. Xi, nazýváme Lagrangeovým lineárním prvkem nebo také Lagrangeovým lineárním elementem. Délku nej většího dílku dělení {x,i}f=Q označíme jako h, tj. h = max!) ^p^i^-^-1®*-®*-1 = mTKaA\ hi hi 230 kde Qi-i K Pi-l/2 (1-1 ti V -1 1 a A* A,; Znovu pomocí obdélníkové formule dostaneme Q\-rUv') = -hlrl_1/2 kde 2 [ J K,2 _ 1, 1 1 -1 -I/" 2ri-V2 Dále pomocí lichoběžníkové formule obdržíme Q\qUv) = Ih^-i^-i^-i + q&i&i) = [0TKí3A\ kde K* = ih*(qiň1 ° 2 V 0 ii a položíme K* = Kjl+Kí2+Kí3. Nakonec, opět pomocí lichoběžníkové formule, dostaneme Q\fV) = ihiifi^Si-i + m) = mTF\ kde r = . Z rovnice 0 = ah(U,v) - Lh(v) = ' N YjQWpU' - rU]v' + qUv) + [a0 - r(x0)]U(x0)v(x0) + [a e + r(xN)]U(xN)v(xN) N 1=1 N Yy^ľW^ - Fť] + e0[(a0 - r0]A0 - /30] + ^[(a* + rN)AN - í3e] i=l a z rovnice (9.42) tak dostaneme rovnost N 6T [KA - F] = J^HKW - Fť] (9.44) i=l ©o[(ao - r0)A0 - (30] + 6jv[(ať + nv)Ajv - Pe], z níž plyne postup, jak pomocí elementárních matic K* = {A;*S}2S=1, elementárních vektorů F* = (F{,Fl)T a čísel «o, ro, Po, ae, rN, Pí sestavit globální matici K a globální vektor F: 231 k1 k1 ^22 + ^11 k2 + k2 k2 -4-P ^22 ' "'U /i22 ^"'ll I.ÍV ft12 I.ÍV ft21 ^22 +<^+7>/ Tab 9.1: Matice soustavy K a vektor pravé strany F. stačí srovnat členy se stejnými indexy u parametrů 0 a A (pro určení prvků matice K) nebo jen u parametru 0 (pro určení prvků vektoru F) na levé a na pravé straně rovnice (9.44). Struktura matice soustavy K a vektoru pravé strany F je patrná z tabulky 2.1. Pro ekvidistantní dělení je výsledná soustava rovnic (9.43) stejná jako soustava rovnic (9.25), kterou jsme odvodili diferenční metodou. Výpočet probíhá podle následujícího algoritmu: 1) Matici K a vektor F vynulujeme. 2) Postupně procházíme jednotlivé prvky (xí-i,Xí), i = 1, 2,..., N, na každém z nich vypočteme elementární matici K* = {kls}2s=l a elementární vektor F* = {F*}2=1 a koeficienty klrs resp. F%r přičteme k odpovídajícím prvkům matice K resp. vektoru F v souladu s tabulkou 9.1. 3) Matici K a vektor F modifikujeme podle uvažovaných okrajových podmínek: a) Je-li v levém krajním bodě předepsána Dirichletova okrajová podmínka (9.11a), odstraníme první řádek matice K a první řádek vektoru F, pak od pravé strany odečteme první sloupec matice K násobený předepsanou hodnotou qq a nakonec vynecháme také první sloupec matice K. b) Je-li v levém krajním bodě předepsána Newtonova okrajová podmínka (9.18a), přičteme k prvku v levém horním rohu matice K číslo a0 — r0 a k prvnímu prvku vektoru F přičteme číslo j30. c) Je-li v pravém krajním bodě předepsána Dirichletova okrajová podmínka (9.11b), odstraníme poslední řádek matice K a poslední řádek vektoru F, pak od pravé strany odečteme poslední sloupec matice K násobený předepsanou hodnotou ge a nakonec vynecháme také poslední sloupec matice K. d) Je-li v pravém krajním bodě předepsána Newtonova okrajová podmínka (9.18b), přičteme k prvku v pravém dolním rohu matice K číslo + a k poslednímu prvku vektoru F přičteme číslo 4) Vyřešíme soustavu lineárních rovnic Ku = F. Podle zvolených okrajových podmínek tak získáme 232 u = (ui,u2, ■ ■ ■ ,un-i)t v případě okrajových podmínek (9.11a), (9.11b), u = (u1,u2, . . . ,Un)t v případě okrajových podmínek (9.11a), (9.18b), u = (uq,ui, ... ,mat_i)t v případě okrajových podmínek (9.18a), (9.11b), u = (uq,ui, ... ,un)t v případě okrajových podmínek (9.18a), (9.18b). Pro chybu u — U a její derivaci platí za předpokladu u G C2(0,£) odhad u - U = 0(h2), u' -U' = O (h). (9.45) Dominantní konvekce. Upwind aproximaci konvekčního členu dostaneme z modifikované rovnosti (9.40), a sice najít U G Wh splňující ah(U,v) + ch(U,v) = Lh(v) Vv G Vh, (9.40') kde člen N ch(U,v) = Y,Ql &U'V') > ôi = lhiWirl (9-46) reprezentuje tzv. umělou difúzi. Vhodnou volbou koeficientů {o~,i}f=1 ovlivňujeme velikost dodané umělé difúze. Rovnost (9.40') dostaneme z rovnosti (9.40) tak, že v ní nahradíme „difúzni člen" ^f=1 Q%(pU'v') členem ^f=1 Ql(\p + ôi\U'v'), tj. na prvku (xí_i,Xí) přidáme k difúzi p umělou difúzi Si. Pomocí obdélníkové formule dostaneme Ql (\hi\0 K—^OO je žádoucí chování: pro dominantní konvekci \ 1, tj. dostaneme čistý upwind, a pro dominantní difúzi \ 0, tj. dostaneme standardní schéma bez umělé difúze. 233 Proto lze doporučit univerzální volbu 1 ri_1/2hi (Ji = coth/íj--, kde Ki =-, i = l,2,...,N, (9.51) Ki 2pi-1/2 která je vhodná pro každou konvekčně-difúzni úlohu, nezávisle na tom, zda je konvekce dominantní či nikoliv. Příklad 9.3. Uvažujme konvekčně difúzni úlohu - u" + (r(x)u)' = x (5 - x), x e (0,5), u(0) = 0, u'(5) + 100(u(5) - 2) = 0, přičemž / 30 j x< 2,5, r (x) = < pro < V ; l 0,1 F \ x > 2,5. Řešení získané MKP pro N = 20 je zakresleno na obrázku 9.3. Červená křivka zobrazuje řešení spočtené programem bvp4c s vysokou přesností, tedy prakticky přesné řešení. Zelené čtverečky zobrazují numerické řešení, vlevo bez umělé difúze, tj. když Kí4 = O, vpravo s umělou difúzí, viz (9.48), (9.49) a (9.51). Pro K*4 = O a N > 75 dostaneme numerické řešení bez oscilací, jak lze experimentálně ověřit. Kritická hodnota N = 75 je v souladu s podmínkami (9.26) pro p=l,r = 30ah = 5/N: Obr. 9.3. ./V = 20, vlevo bez umělé difúze, vpravo s umělou difúzí. 234 10. Parciální diferenciální rovnice Parciálni diferenciální rovnice (stručně PDR) vyjadřuje vztah mezi funkcí několika proměnných a jejími parciálními derivacemi. Parciální rovnice a jejich soustavy jsou matematickým modelem mnoha technických úloh. Četné modely byly vytvořeny již v minulých staletích, jejich praktické řešení však umožnily teprve výkonné počítače. Prostředky klasické matematické analýzy se zkoumá existence, jednoznačnost, hladkost a další vlastnosti řešení v závislosti na koeficientech rovnice, okrajových a počátečních podmínkách a na oblasti, ve které má být rovnice splněna. Tuto oblast budeme standardně značit symbolem íl. Pro některé jednodušší úlohy lze těmito prostředky najít i přesné řešení, často ve tvaru nekonečné řady. Převážnou většinu těchto úloh však dovedeme řešit pouze přibližně, numericky. Označení eliptické, parabolické nebo hyperbolické získaly PDR na základě formální podobnosti s rovnicemi kuželoseček. Stacionárni úlohy jsou na čase nezávislé, úlohy nestacionární na čase závisejí. K jednoznačnému určení řešení nestačí samotná diferenciální rovnice, je nutno zadat ještě okrajové podmínky a u nestacionárních úloh také počáteční podmínky. Ve třech následujících kapitolách uvedeme nej jednodušší rovnice druhého řádu. Omezíme se přitom na PDR ve dvou proměnných, tj. ve stacionárním případě jde o úlohu ve dvou prostorových proměnných x,yav nestacionárním případě se uvažují úlohy s jedinou prostorovou proměnnou x, druhou proměnnou je čas t. Diskretizaci v prostorových proměnných provedeme pomocí diferenční metody, metody konečných objemů a metody konečných prvků. Metoda konečných prvků jednoznačně dominuje při řešení problémů mechaniky pevné fáze, zatímco pro proudění tekutin se více používají programy pracující na bázi metody konečných objemů. Několik pojmů. Uzávěr množiny M G IRd je sjednocením bodů množiny M a bodů ležících na její hranici dM. Uzávěr M značíme M, tj. M = M U dM. Oblastí rozumíme otevřenou souvislou množinu v IRd. Nechť O je oblast. Prostor funkcí, které jsou v Q spojité spolu se svými derivacemi až do řádu k, značíme Ck(Q). Prostor C°(Q) funkcí spojitých v Q značíme stručně C(Q). Řekneme, že funkce u je v Q po částech spojitá, jestliže Q je sjednocením uzávěrů konečného počtu navzájem disjunktních podoblastí, tj. Q = |JÍ2j, fžj H Qj = 0 pro i ^ j, a jestliže u je na každé z podoblastí fžj spojitá a spojitě prodloužitelná až do hranice, tj. existuje spojitá funkce Ui G C(fžj) s vlastností Ui = Ui v fžj. Prostor po částech spojitých funkcí značíme PC(Q). Symbolem PCk(Q) značíme prostor funkcí, které jsou v oblasti Q spojité spolu se všemi svými derivacemi až do řádu k—l včetně a jejichž k-té derivace jsou po částech spojité. Tak třeba PCľ(Q) je prostor funkcí, které jsou v Q spojité a jejichž první derivace jsou v Q po částech spojité. Definici funkce spojité a funkce po částech spojité na hranici lze prostřednictvím parametrického vyjádření hranice převést na definici funkce spojité a funkce po částech spojité na úsečce, viz kapitola 9.4. Pokud jde o značení, tak třeba PC (Tg) je prostor po částech spojitých funkcí na části C díl hranice oblasti Q. 235 10.1. Úloha eliptického typu 10.1.1. Formulace úlohy Buď Q omezená oblast v IR2. O hranící T = díl oblasti Q předpokládejme, že je sjednocením uzávěrů dvou navzájem disjunktních částí Ti a r2, tj. F = r^T^ r1nr2 = 0. Dále n = (n1,n2)T nechť je jednotkový vektor vnější normály hranice a du du du — = n • Vu = m— + n2— on dx dy je derivace ve směru vnější normály. Nechť p(x,y) > p0 > 0, q(x,y) > 0, f(x,y), g(x,y), a(x,y) > 0 a (3(x,y) jsou dané funkce. Naším úkolem je určit funkci u(x,y), která uvnitř Q vyhovuje diferenciální rovnici ô f du \ 0 í 0u \ ~ltev^X,y^~dx) ~ lfyv^X,y^~dy) + q(x,y^u = f(x->y} vQ> (iai) na hranici Ti splňuje Dirichletovu okrajovou podmínku u = g(x,y) na Ti, (10.2) a na hranici T2 splňuje Newtonovu okrajovou podmínku du -p(x, v)-q^ = a(x> y^u ~ ^x'y^ na r2 • (10,3) Je-li v (10.3) a = 0, dostaneme Neumannovu okrajovou podmínku. V případě, že p je konstanta a q = 0, dělíme rovnici (10.1) číslem p a vznikne Poisso-nova rovnice -Au = f(x,y) ví), (10.4) kde Laplaceův operátor A aplikovaný na funkci -uje d2u d2u dx2 dy2 Rovnice Au = 0 se nazývá Laplaceva rovníce. Fyzikální význam. Úlohu (10.1) - (10.3) můžeme interpretovat jako stacionární vedení tepla v nekonečném hranolu o průřezu Q. Pak u je teplota, p tepelná vodivost, —pVu je tepelný tok, q je měrný tepelný odpor, / je intenzita vnitřních tepelných zdrojů, okrajová podmínka (10.2) předepisuje teplotu na povrchu a v okrajové podmínce (10.3) je —pdu/dn tepelný tok ve směru vnější normály, a je koeficient přestupu tepla a /3 je předepsaný tepelný tok. Poissonova rovnice s homogenní Dirichletovou okrajovou podmínkou u = 0 vyjadřuje např. průhyb membrány upevněné na okraji a zatížené tlakem úměrným funkci /. Laplaceova rovnice s Neumannovou okrajovou podmínkou popisuje např. potenciální proudění: u je potenciál vektoru rychlosti v = (vi,v2)T, kde v\ = du/dx, v2 = du/dy. 236 Rovnice 0 = Au = divv = 0 je známa jako podmínka nestlačitelnosti. Neumannova okrajová podmínka du/dn = vn = j3 předepisuje normálovou složku rychlosti vn = v n. Pomocí Gauss-Ostrogradského věty, viz např. [44], dostáváme nutnou podmínku existence řešení. Potenciál u není určen jednoznačně: je-li u řešení, je také u + C řešení, kde C je libovolná konstanta. Rychlost v však už jednoznačně určena je. Existence a jednoznačnost řešení. Podmínky zaručující existenci a jednoznačnost klasického řešení u G C2(Q) problému (10.1)—(10.3) jsou komplikované a proto je zde uvádět nebudeme. V praktických aplikacích vystačíme s existencí tzv. slabého řešeni, které existuje za podmínek v aplikacích běžně splněných. V dalším budeme předpokládat, že Q je mnohoúhelník, p > p0 > 0, q > 0, / jsou po částech spojité v Q, g je spojitá na r1? a > 0, j3 jsou po částech spojité na r2, a pokud r = T2, pak buďto q > qo > 0 na části Q nebo a > «o > 0 na části r2. Za těchto předpokladů existuje jediné slabé řešení u G PCľ(Q) problému (10.1)—(10.3), viz např. [23]. Je-li T = r2, q = 0, a = 0 a pokud jQfdxdy + JTj3ds = 0, pak má úloha (10.1) — (10.3) nekonečně mnoho řešení: je-li u řešení, pak také u + C je řešení, kde C je libovolná konstanta. Zesílením uvedených předpokladů lze docílit toho, že slabé řešení je také řešení klasické. Tyto zesílené předpoklady však obvykle odporují požadavkům praktických aplikací. 10.1.2. Diferenční metoda Diskretizace okrajové úlohy ve dvou dimenzích je analogická diskretizaci jednodimenzionální úlohy, viz kapitola 9.2. Princip metody. Abychom výklad nezatěžovali detaily nepodstatnými z hlediska numerické metody, začneme řešením Dirichletovy úlohy pro Poissonovu rovnici na čtverci, tj. řešíme rovnici (10.4) s okrajovou podmínkou (10.2) pro Ti = T, když Q = (0,£) x (0,£) je čtverec se stranou délky l. Na Q vytvoříme pravidelnou čtvercovou síť. Diferenční metoda se proto také často nazývá metoda sítí. Zvolme tedy N > 1 celé a definujme krok h = Í/N. Označme x,i = ih, i = 0,1,..., N, y j = jh, j = 0,1,..., N. Body [xh yA, i, j = 0,1,..., N, nazveme uzly sítě. Rovnice (10.4) má být splněna ve všech bodech [x,y] uvnitř Q, musí tedy být také splněna ve všech vnitřních uzlech, tj. N-l. (10.5) Parciální derivace vyjádříme pomocí centrálních diferencí + 0{h2) (10.6b) 237 dosadíme do rovnice (10.5) a chybové členy 0(h2) zanedbáme. Po vynásobení h2 dostaneme soustavu sítových rovnic -itj-i o- - Uí + Au, h fíj i h j (10.7) Xi-l Xi Xi+i xN = l Obr. 10.1. Síť kde Uíj je aproximace u(xi}yj) a fy = f(xi,Uj). Z okrajové podmínky (10.2) dostaneme u,ij = Qij pro i = 0 nebo i = N nebo j = 0 nebo j = N, (10.8) přičemž g^- = g(xi,Uj). Když z (10.8) dosadíme do (10.7) a na levé straně ponecháme pouze členy s neznámymi u^, dostaneme soustavu (N—l)2 lineárních algebraických rovnic, kterou můžeme zapsat maticově ve tvaru Ku = F. Pro N = A má soustava rovnic (10.9) následující tvar: (10.9) 4 -1 0 -1 0 0 0 0 0 "\ / un \ ( tf/ii - ^9oi - 1-010 \ -1 4 -1 0 -1 0 0 0 0 h2fi2 - ^902 0 -1 4 0 0 -1 0 0 0 Ul3 h2f13 - ^ 903 - 1-014 - 1 0 0 4 -1 0 -1 0 0 U21 h2Í2i - 1- 020 0 -1 0 -1 4 -1 0 -1 0 U22 = h2Í22 0 0 -1 0 -1 4 0 0 -1 U23 h2Í23 - 1- 024 0 0 0 -1 0 0 4 -1 0 U31 h2Í3i - 1-041 - 1-030 0 0 0 0 -1 0 -1 4 -1 U32 h2Í32 - 1-042 0 0 0 0 0 -1 0 -1 4 y \ U33 ) \ h2f33 - 1-043 " 1- 034 / 238 Pravá strana rovnice odpovídající uzlu, který není sousedem hranice, obsahuje pouze člen h2fij, pro uzly nejbližší vrcholům čtverce přibudou dva členy s funkcí g a pro ostatní sousedy hranice jeden člen s funkcí g. Soustavu (10.9) lze napsat v blokovém tvaru B -I O . . O O ° ^, íU1 ^ -I B -I . . O O O u2 F2 O -I B . . O O o F3 O O O . . -I B -I uN-2 Faí-2 V o o o o I B / V Ujv-i / (10.10) V Fjv-i J kde I je jednotková matice řádu N—l, O je nulová matice řádu N — 1 a B je třídiagonální matice řádu N — 1 tvaru / 4 -1 -1 4 0 -1 B V 0 0 0 o o -1 4 0 o o o o -1 o o o o 4 -1 0 \ 0 o -1 4 / ,Af-l)T, Í 1,2,...,N , Fí,n-i)t, i = 1, jsou části celkového vektoru u 1, jsou části celkového 1,2,. ..,N Vektory Uj = í u,. - ",_>• ■ ■ ■ ,u neznámých, vektory F« = (Fn,Fi2 vektoru F pravých stran. Pro homogenní okrajovou podmínku g (x, y) = 0 je F^ okrajovou podmínku je v některých rovnicích příspěvek z hranice, přesně h2fíj, pro nehomogenní F ■ = l'.ľ,; , 2 1 je počet dílků ve směru osy x a M > 1 je počet dílků ve směru osy y. Položíme h = a/N, k = b/M a definujeme x,i = ih, i = 0,1,..., N, a y^ = jk, j = 0,1,..., M. Síť je tvořena uzly [xí, yj] pro i = 0,1,..., N, j = 0,1,..., M. Při diskretizaci Poissonovy rovnice (10.4) postupuje analogicky jako dříve, jen místo (10.6b) použijeme d2u(xi,yj) _ -uixiiijj-i) + 2u(xi,yj) - u(x,t,yj+1) 0{k2), (10.6b') dy2 k2 a tak místo rovnic (10.7) dostaneme pro i = 1,2,... ,N — 1 a j = 1,2,... ,M — 1 rovnice ~ui-i,j + 2itjj — Uí+ij —u,ij_i + 2u,ij — Uíj+i fa- (10-7') h2 k2 Je-li řešení u dostatečně hladké, pro chybu platí u(xi,yj) - Uíj = 0(h2 + k2) . (10.11') Obecnější rovnice. Při diskretizaci rovnice (10.1) aproximujeme členy — [pux]x a — [puy]y pomocí vzorce (9.14). Tak ve vnitřních uzlech dostaneme místo (10.7') rovnici -Pi-l/2,jUi_ij + (Pi-l/2,j + Pi+l/2,j)Uij — Pi+l/2,jUi+l,j h2 -Pi,j-l/2UiJ-l + (Pi,j-1/2 + Pi,j+l/2)Uij — Pi,j+l/2Uij+l k2 f (10.7") -|- QijUij f i j . Přitom index y-1/2 znamená, že za argument x dosadíme x{ ± \h, a podobně index j±i/2 znamená, že za y dosadíme y j ± ^k. Je-li řešení u dostatečně hladké, pro chybu opět platí (10.11'). Newtonova okrajová podmínka. Při diskretizaci postupujeme obdobně jako v jednodimenzionálním případě, viz odvození vztahů (9.19). Ukážeme si to na příkladu podmínky -p(a, y)dU^V)\x=a = ae(vMa, v) ~ Fiv), 0y)u) +y)u = f(x,y)- (10.15) 241 Nechť r = (ri,r2)T. Na části Ti = {x G díl | r • n < 0} hranice předepíšeme Dirichletovu okrajovou podmínku a na zbývající části ľ2 = {x G díl | r • n > 0} hranice předepíšeme Newtonovu okrajovou podmínku. V dynamice tekutin r\ může být vtok, to když r-n < 0, nebo neprostupná stěna, to když r • n = 0. Část T2 reprezentuje výtok. Abychom zajistili jednoznačnou existenci řešení, předpokládejme, že á\\v{x,y) =-—--1--—- > 0, (x,y)EÍl. (10.16) V dynamice tekutin dřvr(x,y) = 0. Konvekční členy (riu)x a {r2u)y aproximujeme podobně jako v jednorozměrné úloze, viz. kapitola 9.2. Ukažme si to pro konvekční člen (riu)x. Omezíme se přitom jen na vnitřní uzel [xi,yj]. Pomocí centrální diference dostaneme (nu^x^yj) « ([nu](a:i+i/2,í/j) - [r1u](xi_1/2,yj)) /h. Dalším krokem je aproximace konvekčních toků [riu](xi+1/2,yj) a [riu](xi_i/2,yj). Protože aproximace obou těchto toků je založena na stejných pravidlech, věnujme se podrobně jen aproximaci [riu](xi+1/2,yj)- Ta závisí na dvourozměrné analogii podmínky (9.26): pokud platí I^INojI ij\ je délka dBij, \PíPj\ je délka úsečky PiPj, (r • n)ij = r(PÍJ niP,)^ + r2{Pij)nli a nt] = k, r#)T = (P, - P)/\PP3 je jednotkový vektor ve směru vektoru PíPj. Zbývá aproximovat hodnotu u(Pij) ve středu úsečky PíPj. Jestliže je dominantní difúze, třeba když \\PtP3\\{v^\ o, < 0. Dvojné integrály aproximujeme jako součin obsahu \Bij\ buňky B^ a hodnoty integrandu v bodu Pj, tj. / quáxáy « \Bi\q{Pi)u{Pi) , / /áxáy « \Bi\f{Pi). JBí JBí Pro uzel Pj ležící na hranici r\ buňku Bi nepotřebujeme a klademe u(Pi) = g (Pí). Pro vnitřní uzel Pí hranice T 2 sestrojíme hraniční buňku, viz Obr. 10.6. Hranice dBi = [J. dB^ U dBi0 je sjednocením společných částí dB^ = dBi C\dBj buňky Bi a sousedních buněk Bj a dále části OBío = dBi H T2 hranice buňky Bi ležící na hranici T2, dBi0 = ~PPj U P~P~~k na Obr. 10.6. Obr. 10.6. Hraniční buňka Bi Při aproximaci Jlg. využijeme předepsanou Newtonovu okrajovou podmínku (10.3), dBi0 IdBio du ds [au — j3 + (r • rij)it] ds |<9Pí0| HPHP) - f3(P%)} + r(Pť) -[\PiPij\n\j + [PAK] M(P,), kde • resp. iŕik je vektor vnější normály buňky Bi na straně PíPj resp. PjPfc. Zbývající aproximace se provedou stejně jako u vnitřní buňky. Více podrobností o metodě konečných objemů, včetně přesnější varianty upwind aproximace konvekčního členu, lze najít např. v [23]. 247 10.1.4. Metoda konečných prvků Metodu vysvětlíme pro konvekčně-difúzní úlohu (10.15), (10.2), (10.3). Slabé řešení. Stejně jako v kapitole 9.4 úlohu převedeme na tvar vhodný pro nasazení MKP, tj. odvodíme slabou formulaci naší úlohy. K tomu účelu násobíme rovnici (10.1) testovací funkcí v G C1 (Q) s vlastností v = 0 na Ti a integrujeme přes oblast Q, tj. provedeme l(pux — riu)x + (puy — r2u)y\vdxdy + / quvdxdy= / fvdxdy. (10.24) n Jn Jn První člen na levé straně upravíme pomocí Gauss-Ostrogradského věty f A' A A f ( \ A \ A ((PU--r^ / dwwdxdy= / (w • n) ds, kde w = J n J dn \K(pUy — r2u)v/ na tvar \(pux - riu)x + (puy - r2u)y]v dxdy = - / [{pux - r^rix + (puy - r2u)n2]v ds+ Jan \{pux — riu)vx + {puy — r2u)vy] dxdy dxdy. n Křivkový integrál dále upravíme: využijeme toho, že v = 0 na Ti a že na T2 platí okrajová podmínka (10.3). Tak dostaneme [(pux — riu)rii + (puy — r2u)n2]v ds [au — j3 + (r • n)u]v ds . du -p — + mni + r2n2)u on v ds Dosadíme-li z posledních dvou rovností do (10.24) vidíme, že řešení u úlohy (10.15), (10.2), (10.3) splňuje rovnici \p{uxvx + UyVy) — u{j\vx + r2Vy) + quv] dxdy + / (a + r-n)uv] ds = n Jv2 j"v dxdy + / /3vds (10.25) n Jt2 pro každou funkci v G C1(Í2) s vlastností v = 0 na r\. Rovnice (10.25) má zřejmě smysl i v případě, když funkce u a v jsou jen z prostoru X = PCľ(Q). Testovací funkce tedy volíme z prostoru V = {v G X | v = 0 na r\} testovacích funkcí a řešení u z množiny W = {v G X | v = g na r\} přípustných řešení. Označíme-li a(u,v)= / [ p (Vm- Vw) — u (r • Vi>) + quv] dxdy + / (a + r -n)uv ds , (10.26) L{v) = i f'vdxdy + / /3wds, iíí Jt2 248 pak úlohu najít u G W splňující a(u,v) = L(v) \/v G V (10.27) nazveme slabou formulací úlohy (10.15), (10.2), (10.3) a funkci u nazveme slabým řešením. Diskretizace. Omezíme se na případ, že Q je mnohoúhelník. Q vyjádříme jako sjednocení konečného počtu uzavřených trojúhelníků Te, z nichž každé dva jsou buďto disjunktní nebo mají společný vrchol nebo společnou stranu, viz Obr. 10.3. Množinu T všech trojúhelníků nazveme triangulací oblasti Q. Trojúhelníky budeme značit Ti,T2,..., T/vT. Vrcholy trojúhelníků budeme nazývat uzly, značíme je Pi, P2,..., Pm- Předpokládejme, že společné body částí r\ a T2 hranice V jsou uzly triangulace T. Množinu stran trojúhelníků T G T, jejichž sjednocení je r2, označíme jako S. Strany budeme značit S±, S2,..., Sns. Nejdelší stranu trojúhelníků triangulace T označíme jako h. Funkci, která je v Q spojitá a která je na každém trojúhelníku T G T lineární, nazveme spojitou po částech lineární funkcí. Každá taková funkce v(x,y) je jednoznačně určena svými hodnotami v(xi,yi) ve vrcholech Pj = [xi,yi] triangulace T. Prostor všech spojitých po částech lineárních funkcí označíme X^. Speciálním případem funkcí z X^ jsou bázové funkce Wi(x,y), které jsou v P« rovny jedné a v ostatních uzlech jsou rovny nule, tj. w'w = {1 Pro [l = Jl Každá funkce v G X^ může být pomocí svých hodnot v uzlech a pomocí bázových funkcí vyjádřena ve tvaru M i=i Dále definujme prostor testovacích funkcí Vh = {veXh\ v(Xl,yi) = 0 VP, G ľx} a množinu přípustných řešení Wh = {v G Xh | v(xi,yi) = g(xi,yi) VPj G Ti}. Obr. 10.7. Bázová funkce Wi(x,y) Trojúhelník, na němž je definována lineární funkce jednoznačně určená svými hodnotami ve vrcholech, se nazývá Lagrangeův lineární trojúhelníkový prvek. Nyní už máme vše potřebné k dispozici: přibližné řešení U, tzv. MKP řešení, obdržíme z diskrétní slabé formulace najít U G Wh splňující ah(U,v) = Lh{v) \/v e Vh , (10.28) kde ah(U,v) =YJ[QTe(p(^U-Vv)) + QT^-U(r-Vv)) + QT^qUv)]+YJQSe((ct + r-n) Uv), Tee7 see§ Lh{v) = Y;QTeUv) + Y;QSe^v)- (10-29) TeeT se es 249 Přitom symbolem QTe(ip) jsme označili kvadraturní formuli pro výpočet jT Lpdxdy na trojúhelníku Te a symbolem QSe(f) formuli pro výpočet js ip ds na straně Se. Jako vhodné kvadraturní formule lze doporučit: 1) členy p(VU•'Vv) a U(r-Vi>) integrujeme na trojúhelníku T formulí QT(<č) = \T\ ®iWi ) ~ L]l 0 iWí 0'=1 j=N+l i=l J \i=l N N N ^2 ©í ^2 ^(^i' ^)Ai - 5^ @í i=l j=l i=l M Lh(wi) - ^2 ah(wj,wi)9j j=N+l (10.34) 6T [K A - Fl kde 0 = (0i, 02,..., QN)T, K = {hj}fj=1 pro % = a^Wj, w{), A = (At, A2,..., Ajv)t a F = (F1,F2,..., Pat)7" pro Pj = Lh(w,j) - YIjLn+i ah(wj, w^gj. Protože 0 je libovolný vektor, musí platit KA = F. (10.35) Matice K je řídká a při vhodném očíslování uzlů je pásová. Pro r = o je K pozitivně definitní a tedy regulární. Pro r ^ o je K nesymetrická, postačující podmínkou regularity 250 matice K je dostatečně malé h neboli dostatečně jemná triangulace. Vyřešením soustavy lineárních rovnic (10.35) získáme Aj = U(Pj), j = 1, 2,..., N. Za předpokladu dostatečné hladkosti slabého řešení u pro chybu platí u-U = 0(h2 u x PX O (h), uy-Uy = O (h). (10.36) Algoritmus. Matici K a vektor F sestavíme pomocí elementárních matic KTe a elementárních vektorů FTe pro Te G T a elementárních matic K.Se a elementárních vektorů FSe pro Se £ S. Matici K budeme nazývat také globální maticí tuhosti a vektor F globálním vektorem zatížení. Elementární matice a elementární vektor na trojúhelníku. Nechť ELEM je tabulka typu NT x 3, která v řádku e obsahuje čísla vrcholů trojúhelníka Te. Uvažme jeden konkrétní trojúhelník Te triangulace T s vrcholy Pf = [xl,yf], P2 = [x2, y2] a P3e = [x%, y3]. Pro uzel Pre, r = 1,2,3, je r lokálním číslem uzlu na trojúhelníku Te. Globálním číslem uzlu Pre je číslo i = ELEM(e, r). Pre a P« jsou tedy jen různá označení téhož uzlu. Řešení U a testovací funkce v je na trojúhelníku Te tvaru (10.37) U(x, y) = Ue(x, y) = A\w{{x, y) + Ae2we2(x, y) + A>|(rr, y) v(x,y) = ve(x, y) = QelW\(x, y) + 02we2(x, y) + Q%w%{x, y), kde A^ = £/(Pre), 0^ = w(Pre) a kde Wr(x, y) = ďrx + bery + c^; (10.38) je bázová funkce příslušná k uzlu Pre, r = 1,2,3. Z (10.37) a (10.38) dostaneme ' dUe ldx\ ( dve/dxs = BeA , W = dUe/dy I \dve/dy enTe Be0 kde Be rřo ttq bl b2 63 a A3 /Ai\ A 03 0 i2 , w — w2 jsou vektory parametrů na trojúhelníku Te. Koeficienty aer a ber lze snadno spočítat z rovnic <(Pse nebo-li maticově ( x\ y\ 1 \ x\ ye2 1 pro J r \ r = S r, s = 1 2,3 / a\ «3 \ /1 0 o\ b\ bl = 0 1 0 4 c3 ^ \° 0 251 Označíme-li De / x\ y\ 1 \ x% ye2 1 pak BB = [D( l-1 J[1:2,1:3] tj. matice BB je rovna prvním dvěma řádkům matice inverzní k matici DB. Nechť Pq = |(Pf + P| + PÍ) Je těžiště trojúhelníka Te. Užitím kvadraturní formule (10.30) pak obdržíme QTe(p(VU-Vv)) = |Te|p(P0B) (BB0TeJ BeATe = [0 kde elementární matice Xe 1 X J^-Xe, 1 /\Xe K Xe,l |Te|pB[BB]TBB (10.39) (10.40) |Te| = ±|det(DB)| je plocha trojúhelníka Te. Označíme-li we = (wf, w\, w^)T, pak ř7B = [we]TATe podle (10.37). Protože T^T\Be]Tr\we]TAT< -Ue(r-Vve) = -[Vve]TrUe = -[BB0Te]Tr[wB]TATe = pomocí kvadraturní formule (10.30) dostaneme Qt>(-U(t-Vv)) = [6^]T [-|^l[Be]Tr(P0e)(|,|,|)] Ar« = [er«]rKr«-2Ar«, (10.41) kde elementární matice K Xe,2 ■i|TBHBB]rrS(l,l,l) = (sB,sB,sB) pro sB =-||Te|[BB]TrB. (10.42) Užitím kvadraturní formule (10.31) dostaneme QT*(qUv) =i\Te\[q(P?)U(P;)v(PZ) + q{Pe2)U {Pe2)v{Pe2) + q(Pi)U(PI)v(P?)] = §|Te|[g(PB)OeAB + g(P2B)0^AB + g(P3e)eBAB] = [6Te]T'KTe,3 ATe, (10.43) kde elementární matice K~Xe,3 1 xv 3 \Te\ (q\ o o\ 0 g| 0 \0 0 gfV (10.44) Celkem tak J2{QTe(p(VU-Vv)) + QTe(-U(r-Vv)) + QTe(qUv)} = [0Te]TKTeAT% (10.45) xeeT 252 kde KTe = K^'1 + KTe'2 + KTe'3 (10.46) je elementární matice na trojúhelníku Te. Užitím kvadraturní formule (10.31) obdržíme QT-(fv) =l\Te\[f(P[)v(P[) + /(P2>(P2e) + f(Pi)v(Pi)] = i\Te\[f(PZ)Ql + /(P2e)0^ + /(P3e)©3] = [0TefFT% (10.47) kde Mt //í\ \fi) (10.4Í je elementární vektor na trojúhelníku Te. Elementární matice a elementární vektor na straně. Nechť SIDE je tabulka typu Ns x 2, která v řádku e obsahuje čísla krajních bodů strany Se. Uvažme konkrétní stranu Se hranice T2 s koncovými body Pf = [rrf, ] a P| = , . Pro uzel Pre, r = 1,2, je r lokálním číslem uzlu na straně Se. Globálním číslem uzlu Pre je číslo i = SIDE(e, r). Pre a Pj jsou tedy jen různá označení téhož uzlu. Řešení U a testovací funkce v je na straně Se tvaru U(x,y) v(x,y) Ue(x,y) = Ae1we1(x,y) + Ae2we2(x,y) ve(x,y) = QelWl(x,y) + Qe2we2(x,y) kde Aer = U(Pre), = v(P^) a kde w^(rr, y) je bázová funkce příslušná k uzlu Pre, r = 1, 2. Nechť ne = (n^-nl)7" je jednotkový vektor vnější normály na straně Se. Užitím formule (10.32) obdržíme Qs*{{a + r-n)Uv) = l\Se\{[(a + r-ne)Uv](P[) + [(a + r-ne)^](P2e)} = (10.49) i|Se|[6?(a(PÍ) + r(P1e)-ne]A? + 0^(«(P2e) + r(P2e)-ne)A^] = [0s°]TKs{pei)+mxm = i|5e|[/3(p1e)0? + /3(p2e)e^] = [0 (10.51) 253 kde F5e = l\Se\ I'M (10.52) je elementární vektor na straně Se. Sestavení soustavy rovnic. Zkombinujeme-li (10.34), (10.29), (10.45), (10.47), (10.49) a (10.51) vidíme, že pro MKP řešení U a libovolnou testovací funkci v G Vh platí 0 = ah(U, v) - Lh(v) = 9T [KA - F] = = J2[0Tef [KTeATe - FTe] + J][05e]T [KSeASe - FSe] . Tee7 see§ Z této rovnosti lze odvodit pravidla pro sestavení globální matice K a globálního vektoru F z lokálních matic KTe, K.Se a lokálních vektorů FTe, FSe. Postupujeme podle následujícího algoritmu: 1) Matici K řádu N a sloupcový vektor F délky N naplníme nulami. 2) Pro každý trojúhelník Te G T sestavíme elementární matici KTe = {kj^}fs=l, viz (10.46), a elementární vektor FTe = {FrTe}^=1, viz (10.48). Pro r,s = 1, 2, 3 položíme i = ELEM(e, r), j = ELEM(e, s) a i < N aj < N, ( kij kij + kj*, pokud <^ i < N a j > N, provedeme < F;t F;t — k^g(Pj), t), kde I je jednotková matice řádu 2. Matice 5errT reprezentuje umělou směrovou difúzi. Pro řešení konvekčně-difúzních úloh na bázi metody konečných prvků se používají důmyslnější postupy, zejména metoda SUPG (podle anglického Streamlíne Upwínd Petrov-G_alerkín), viz [13], nebo metoda DG-FEM (podle anglického Discontinuous G_alerkin Finite Element Method), viz [15]. 10.2. Úloha parabolického typu Formulace úlohy. Hledáme funkci u(x,t) definovanou pro 2: G (0,1), í £ (O,?1), která vyhovuje diferenciální rovnici du 0 í du \ C^x)~di ~ di V^di) + q^)U = f^X,t)' X E 1 E (°'T) Dirichletovým okrajovým podmínkám u(0,t) = g0(t), u(£,t) = ge(t), t G (0,T), nebo Newtonovým okrajovým podmínkám p(0)^^ = a0u(0,t)-(30(t), t G (0,T), (10.53) (10.54) (10.55) 255 a počáteční podmínce u(x,0) = c0 > 0, p > po > 0, q > 0, a0 > 0, cti > 0. Aby existovalo klasické řešení úlohy (10.53)-(10.56), je třeba pro Dirichletovy okrajové podmínky připojit ještě tzv. podmínky souhlasu 0 pro každý vektor x. Časová diskretizace. Prozkoumejme nejdříve charakter počáteční úlohy (10.60) za zjed- / = 0, u(0,t) = u(£,t) = 0, lze úlohu (10.61) nodušujících předpokladů. Pro (10.60) zapsat ve tvaru c = p = 1, g = ú = Au, t e (0,T), u(0) = = V, kde / 2 -1 0 0 0 \ -1 2 -1 0 0 0 -1 2 0 0 0 0 0 -1 2 -1 y 0 0 0 0 -1 2 J (10.62) Vlastní čísla matice A AN2 . o 7TÍ sin 2iV 1,2, jsou reálná záporná a max« |Aj| —> oo pro N —> oo. Problém (10.61) je tedy pro velké N tuhý. Totéž platí také pro úlohu (10.60), tj. jde o tuhý problém. Vzhledem k (8.31) je proto vhodné řešit počáteční problém (10.60) metodou, jejíž oblast absolutní stability obsahuje celou zápornou reálnou poloosu komplexní roviny. Metody s touto vlastností se nazývají Ao-stabilní. Patří mezi ně všechny metody doporučené v kapitole 8.5 pro řešení tuhých problémů, zejména tedy implicitní Eulerova metoda, lichoběžníková metoda nebo metody zpětného derivování. V Matlabu lze použít některý z programů ode23s, ode23t, ode23tb a odel5s. Při řešení úloh vedení tepla se často používá metoda časové diskretizace známá jako Theta metoda, kterou v následujícím textu stručně popíšeme. Nechť tedy 0 = to < t\ < ■ ■ ■ < tq = T je dělení intervalu (0,T), rn = tn+1 — tn je délka kroku a un je přibližné řešení v čase tn, tj. u™ ~ Ui(tn) ~ u(xi,tn). Nechť 9 je pevně zvolené číslo z intervalu (0,1). Označme tn+g = tn + 0rn. Rovnici (10.60) zapíšeme pro t = tn+g a dostaneme Cún+d + Kun+d = Fn+d , kde Fn+d intervalu (t u(í) F(tn+g), Un+d = U(tr, U n+e ii(tr, (10.63) ). Předpokládejme, že u(t) je na ni U ) lineární funkce, tj. n+l U 258 un+1 - u Pak ůn+0 = - a un+0 = (1 - 9)un + 9un+1. Po dosazením do (10.63) a malé l~ri úpravě dostaneme 9-metodu (C + rn9K)un+1 = (C - rn(l - 0)K)un + rnFn+d . (10.64) Snadno ověříme, že pro | < 0 < 1 je ^-metoda A-stabilní a tedy také Ag-stabilní, a že pro 0 < 9 < | je oblast absolutní stability ^-metody omezená a interval absolutní stability je interval (—2/(1 — 20), 0). Pokud jde o přesnost, 0-metoda je řádu 1 pro 9 ý \ a řádu 2 pro 9 = |. Všimněte si, že z 0-metody dostaneme pro 9 = 0 EE metodu, pro 9 = 1 IE metodu a pro 0 = | TR metodu. Metoda (10.64) pro 9 = | je známa jako Crankova-Nícolsonova metoda. Často se zapisuje v analogickém tvaru (C + ÍTnKK+1 = (C - ±rnKK + K(Fn + F"+1). (10.65) Přesnost i stabilita metody (10.64) pro 9 = | a metody (10.65) je stejná. Matice C + rn9~K soustavy (10.64) nezávisí na čase a je pozitivně definitní. Soustavu (10.64) je proto účelné řešit pomocí Choleského rozkladu, který stačí provést jen jednou. Nelineární úloha vedení tepla vznikne tehdy, když některé z funkcí c,p, q, /, a, j3 závisejí na teplotě u. Odpovídající počáteční úlohu C(u)ů = F(ŕ, u) - K(u)u, t E (0, T), u(0) = (p, (10.60') lze v Matlabu vyřešit programem ode23t nebo odel5s. Řešení jednodimenzionálního parabolického problému, a to i nelineárního, umožňuje matlabovský program pdepe. Rovnice s konvekčním členem du 0 í du \ C^~di~~ V^dx' ~r^U) = /(M), x E (0,£), t E (0,T), (10.53') popisuje šíření tepla v tekutině, r = cv, kde v(x) je rychlost proudění. Diskretizaci kon-vekčního členu provedeme stejně jako v kapitole 9.2, viz (9.24), (9.28), (9.28'). Pro časovou diskretizaci úlohy s dominantní konvekcí lze doporučit metody IE, TR nebo BDF2. Rovinná úloha. Hledáme funkci it(x, t), x = (x,y), která splňuje diferenciální rovnici cut - {pux - riu)x - (puy - r2u)y + qu = f, xefi, íg(0,T), okrajové podmínky u = g, x g r1; du ^ } te(0,T) -p— =au- (3, x g T2, on a počáteční podmínku u\t=0 = ip, x g íl 259 Prostorovou diskretizaci provedeme metodou konečných prvků, viz kapitola 10.1.4. Slabá diskrétní formulace je tvaru J2QTe(cÚv) + ah(U,v) = Lh(v). Užitím kvadraturní formule (10.31) dostaneme QTe(cUv) = [0Te]TCTeATe, kde CTe = \\Te (c\ 0 0\ 0 ď2 0 Vo 0 ďj (10.66) Globální matici C = {cij}fj=l sestavíme z elementárních matic CTe. Protože matice CTe jsou diagonální, je také C diagonální, j2Qn(cúv) = Y,\°Te]TcTe^Te) = 0TcA- Matici C vynulujeme. Pak pro každý trojúhelník Te G T sestavíme elementární matici CTe = {cjg}fs=1, viz (10.66), a pak pro r = 1,2,3 položíme i = ELEM(e,r), a když i < N, provedeme Ca -metodou. V (10.67) přitom: A (ŕ) = (Ai(ŕ), A2(ŕ),..., AN(ť))T, K a F(ŕ) viz kapitola 10.1.4, (p = (ipi,(p2,... ,(Pn)t■ Složky Fi(t) vektoru F(r) lze zapsat ve tvaru Fi(t) = f (xi,yi,t)\Bi\,i = 1,2,..., N, 10.3. Úloha hyperbolického typu Formulace úlohy. Hledáme funkci u(x,t) definovanou pro 2: G (0,1), í £ (O,?1), která vyhovuje diferenciální rovnici ^)^ + c(x)^-^M;r)^)+^;r)M = /(;r'í)' ^e(0,£), ÍG(0,T), (10.68) Dirichletovým okrajovým podmínkám u(0,t) = g0(t), u(£,t) = ge(t), t G (0,T), (10.69) nebo Newtonovým okrajovým podmínkám p(0)^fM = QoU(0,í)-^(í), ÍG(0,T), (10.70) -P(£)^^ = aeu(e,t)-m, 260 a počátečním podmínkám u(x, 0) = ip(x), 0) = tjj(x), x G (0, i). (10.71) Možný je také případ, kdy na jednom okraji je předepsána Dirichletova podmínka a na druhém Newtonova. Tato úloha vyjadřuje příčné kmitání tenké struny (nebo podélné kmitání prutu) délky l. Proměnná x je prostorová, t má význam času, u{x, t) je deformace (tj. příčná výchylka pro strunu nebo podélné posunutí v případě prutu) v bodě x a v čase t, p je hustota, c udává tlumení (pro c > 0 jsou kmity tlumené, pro c = 0 netlumené), p charakterizuje tuhost, q odpor okolního prostředí a / vnější síly. Dirichletovy okrajové podmínky předepisují deformaci, Newtonovy okrajové podmínky vnitřní síly: a0 resp. reprezentuje tuhost pružné podpory a /3q resp. fle bodovou vnější sílu. Počáteční podmínky určují počáteční deformaci ip a její počáteční rychlost ip. Předpokládejme, že funkce p, c, p, q, f, qq, gt, /3q, j3e, ip &ip jsou dostatečně hladké, že jsou splněny podmínky nezápornosti p > p0 > 0, c > 0, p > po > 0, q > 0, a0 > 0, cti > 0 a že platí podmínky souhlasu V(0)=g0(0), i>(0) = 9o(0), vW = 9e(0), = 9e(0), vyjadřující soulad počátečních podmínek a Dirichletových okrajových podmínek. Pak má úloha (10.68) - (10.71) jediné klasické řešení. Podmínky souhlasu v aplikacích někdy nebývají splněny. Také funkce p, c, p, q, f, go, ge, /3q, j3e bývají často jen po částech spojité. V tom případě má úloha (10.53) - (10.56) pouze tzv. slabé řešení (jehož přesnou definici zde ovšem uvádět nebudeme). Pro praktické účely je slabé řešení zcela vyhovující a numerické metody, které si uvedeme, budou poskytovat přibližné hodnoty takového slabého řešení. Úloha (10.68) - (10.71) je okrajovou úlohou druhého řádu vzhledem k proměnné x a počáteční úlohou druhého řádu vzhledem k proměnné t. Při její diskretizaci proto opět použijeme postupy z prvních dvou kapitol. Prostorová diskretizace se provede stejně jako u parabolického problému metodou přímek, viz kapitola 10.2. Opět předpokládáme rovnoměrné dělení a Dirichletovu okraj o- T-. > > > dují) á2uAt) vou podmínku. Pro Ui(t) aproximující u(Xi,t) při označeni Ui(t) =-, Ui(t) =--— dostaneme soustavu rovnic piUi{t) + CiÚi(t) + ^ (—Pi-l/2^i-l(*) + [Pí-l/2 + Pí+l/2 + h2qi]ui(t)- (10.72) - Pi+1/2ui+1(tÝ) =fi(t), t = 1,2,..., N-1, t G (0, T) . Z okrajových podmínek (10.69) máme u0(t)=g0(t), uN(t) = ge(t), ÍG(0,T), (10.73) což dosadíme do (10.72) pro i = 1 a i = N — l. Z počátečních podmínek (10.71) dostaneme Ui(0) = ip(xi), úl{0)=ij{xl), % = 1,2,...,N- 1. (10.74) 261 (10.72) je soustava obyčejných diferenciálních rovnic druhého řádu pro N — 1 hledaných funkcí Ui(t), i = 1, 2,..., N — 1, s počátečními podmínkami (10.74). Počáteční úlohu (10.72)-(10.74) můžeme zapsat maticově ve tvaru Mu + Ců + Ku = F(ŕ), t G (0,T), u(0) = (p, ů(0) = V , (10.75) kde M je diagonální matice s kladnými prvky na diagonále, tzv. matice hmotnosti, C je diagonální matice s nezápornými prvky na diagonále, tzv. matice útlumu, K je třídiagonální pozitivně definitní matice, tzv. matice tuhosti, F(t) je tzv. vektor (vnějšího) zatížení, ip = ((ffa), oo pro N —> oo. Pro c = 0 jsou vlastní čísla ryze imaginární a pro c > 0 mají zápornou reálnou složku. Problém (10.77) je pro velké N tuhý. Protože reálné složky vlastních čísel jsou zdola ohraničené, Re(A«) > —c, a velikost imaginárních složek je neomezená, říkáme, že problém (10.77) je oscilatoricky tuhý. Problém (10.76) se chová obdobně. Vzhledem k (8.31) je proto vhodné řešit úlohu (10.77) pro c > 0 metodou, jejíž oblast absolutní stability obsahuje pás Rc = {z G C | — c < Re(z) < 0}. Pro c = 0 lze odvodit rovnost [u(ŕ)]Tu(ŕ) + [v(ŕ)]TK-1v(ŕ) = cpTcp + VTK-1V, t > 0, vyjadřující stabilitu počátečního problému (10.77) vzhledem k počáteční podmínce. Pro přibližné řešení wn w(íít) spočtené lichoběžníkovou metodou lze odvodit analogickou rovnost ulun + v^k-^n = 0. Z matlabovských programů lze doporučit programy ode23t a ode23tb, které jsou na lichoběžníkové metodě založeny. Lichoběžníková metoda aplikovaná na úlohu (10.76) vede na předpis (R + irnS)w"+1 = (R - ±rnS)w" + \rn(Gn + Gn+1), (10.78) viz (10.65). Pro efektivní výpočet složek un+1 a vn+1 vektoru wn+1 je vhodné soustavu rovnic (10.78) zapsat po složkách, tj. un+1 - \rnvn+1 = un + \rnV\ (M + \rnC)vn+1 + KKu"+1 = (M - ±rnck " l2rnKun + \rn(¥n+1 + F"). Z prvé rovnice vyjádříme vn+1, viz (10.80), dosadíme do druhé rovnice a obdržíme rovnici pro výpočet un+1: Kun+1 = F, kde (10.79) K = 4tM + — C + K , F = f 4tM + —C — K j un + — Mvn + Fn + Fn+1. 9 1 ' 1 i o - 1 n Tyi Tfl V T^ Tri. I Tn. ,n+l Až vypočítáme un+ , dopočítáme vn+1 = —(un+1 - un) - vn. (10.80) Startujeme přitom z počátečních hodnot u° = cp, v° = V- (10.81) Matice K soustavy (10.79) nezávisí na čase a je pozitivně definitní. Soustavu (10.79) je proto účelné řešit pomocí Choleského rozkladu, který stačí provést jen jednou. Metoda (10.79)—(10.81) je speciálním případem Newmarkovy metody hojně používané v inženýrské praxi, viz [5]. 10.4. Hyperbolická rovnice prvního řádu Formulace úlohy. Hledáme funkci u(x,t) definovanou pro 2: G (0,1), í £ (O,?1), která vyhovuje diferenciální rovnici — + a(x,t)— = f(x,t), xe(0,£),te(0,T), (10.82) okrajovým podmínkám u(0,t) = g0(t), a(0,í)>0, pokud t e (0,T), (10.83) u(£,t) = ge(t), a(£,t)<0, 263 a počáteční podmínce u(x, 0) = tp(x) . (10.84) Nechť Q = (0,£) x (0, T) je obdélník, v němž hledáme řešení, a dQ+ ta je část hranice dQ obdélníka Q, na níž je předepsána počáteční nebo okrajová podmínka, tj. dQ+ = {[x, t] G dQ 11 = 0 nebo x= 0 (pokud a(0,r) >0) nebo x= £ (pokud a(£,t)<0)} . Pro každý bod Po = [^Oj^o] £ Q \ dQ+ určeme řešení x(t) počátečního problému dx(t) dt a(x(ť),t) t < tn x(t0) X0. (10.85) Křivka x(t) se nazývá charakteristika příslušná bodu [rr0,ío]- Předpokládejme, že charakteristika protíná dQ+ v jediném bodě P0* = [xq,Íq]- Tomuto bodu říkáme pata charakteristiky. Podle pravidla o derivování složené funkce du(x(t),t) du(x(t),t) dx(t) du(x(t),t) du(x(t),t) du(x(t),t) ďí = ďx ďT+ M = M + "W)'*) Q~x • Úlohu (10.82)-(10.84) proto můžeme na charakteristice x(t) zapsat ve tvaru V(x*) pro í* = 0 , du(x(t),t) dl f(x(t),t), te(ť0,t0), u(x(ť0),ť0) 9o(ť0) 9e(ť0) pro Xq pro Xq 0 (10.86) Předpokládejme, že funkce a, f, qq, ge a ip jsou spojité, že funkce a(0,t) i a(£,t) nemění znaménko a že okrajová podmínka je kompatibilní s počáteční podmínkou, tj. platí ^(0) = 0O(O) (pokud a(0, 0) > 0) , ip{t) = ge(0) (pokud a(£, 0) < 0) . Pak úloha (10.85)-(10.86), a tedy rovněž úloha (10.82)-(10.84), má jediné klasické řešení. T dQ- ■t Pi{xi,ti)cf x2, ^2) /p*{xl,tl) X dQ+ Obr. 10.10. Charakteristiky Rovnice (10.82) bývá označována jako advekční rovnice nebo také transportní rovnice. Úloha (10.82)-(10.84) popisuje třeba šíření příměsi prouděním, tj. bez vlivu difúze: u(x,t) je koncentrace příměsi v tekutině v bodu x a v čase t, a = gv je součin hustoty g tekutiny a její rychlosti v, f je zdrojový člen. Charakteristika x(t) je trajektorie, po které se částečka příměsi pohybuje. Pokud bychom připustili také difúzni šíření příměsi, dostali bychom kon-vekčně-difúzni rovnici 264 c{x)l¥t+di{r{x>t)u)~dx~ \p{x)dx~) = '0M), í e (o,T), v níž p je koeficient difúze, viz (10.53'). Na rovnici advekce lze proto nahlížet jako na limitní případ konvekčně-difúzní rovnice, v níž zanedbáme účinky difúze. Jiná forma advekční rovnice tedy je c(x)— + —(r(x,t)u) = f(x,t), xe(0,£), ÍG(0,T). (10.82') Jestliže rovnice (10.82') popisuje přenos tepla advekcí, pak u je teplota, c je objemová tepelná kapacita (tj. tepelná kapacita vztažená na jednotku objemu), r = cv, kde v je rychlost proudění a / je tepelný zdroj. Metoda přímek. Uvažujme rovnoměrné dělení intervalu (0, £), tj. Xi = ih, i = 0,1,..., N, kde h = £/N. Předpokládejme, že funkce a{x,t) v krajních bodech intervalu (0,£) nemění znaménko. Splnění rovnice (10.82) budeme požadovat ve vnitřních uzlech x±,x2,..., ^at-i a pro a(0,t) < 0 také v uzlu x0 a pro a(£,t) > 0 také v uzlu x^. V rovnici ^)+a(x,,ť)^)=/(x,,ř) aproximujeme člen ux(xi,t) ve vnitřních uzlech centrální diferencí a v krajních uzlech jednostrannou diferencí. Pokud třeba a(0,t) > 0, a(£,t) > 0 pro všechna t G (0,T), dostaneme Ul(t) + ai(t)Mr) - g0(t)]/(2h) = hit), úl(t) + al(t)[ul+1(t)-ul_1(t)]/(2h) = fyt), i = 2,3,...,JV-l, (10.87) úN(t) + aN(t)[3uN(t) - 4ííjv-i(í) + uN-2(t)]/(2h) = fN(t), kde a,i(t) = a(xi,t), fi(t) = f(xi,ť) a Ui(t) je aproximace u(xi,t). Z (10.84) dostaneme počáteční podmínky ^(0) = ^, i = 1,2,...,N, (10.88) kde ifi = íp(xi). Počáteční problém (10.87)-(10.88) řešíme vhodnou numerickou metodou. K jejímu výběru nám poslouží zjednodušený model. Předpokládejme, že a = 1, f = 0 a uvažme periodické okrajové podmínky u(0,t) = u{£,t). Pomocí centrálních diferencí odvodíme ú1(t) + [u2(t)-uN(t)]/(2h) = 0, úi(t) + [ui+1(t)-ui-1(t)]/(2h) = 0, i = 2,3,...,N-l, (10.87') ůN(t) + [u1(t)-uN_1(t)]/(2h) = 0. Počáteční problém (10.87')-(10.88) zapíšeme maticově, tj. ů = Au, rG(0,T), u(0) = (p, (10.89) 265 kde u(t) = (ui(t),u2(t),.. .,uN(t))T, cp(t) A = —- 1 2h ( O -1 O v 0 1 1 o -1 o o 0 1 o o o o o o o -1 -1 \ o 0 1 o .,tpN(t)y a (10.90) Dá se ukázat, že vlastní čísla matice A Aj(A) = 1— sin —rř, I = \/~ 1, riV 2tu JTsm 1,2,...,iV, leží na imaginární ose, maxj \\\ —> oo pro A" —y oo, tj. pro velké N je počáteční problém (10.89) oscilatoricky tuhý. Antisymetrická matice A je diagonizovatelná pomocí unitární matice5 vlastních vektorů, tj. platí VHAV = D, kde D = diag{Ai, X2, ■ ■ ■, A^r}, viz [55]. Řešení počáteční úlohy (10.89) lze zapsat ve tvaru u(r) = VS(t)VH(p, kde S(í) = diag{eAlí, eA2Í,..., eAjví}. Ověřte! Odtud již snadno obdržíme ||u(ŕ)||2 = ||y||2 Pro každé t > 0. Ověřte! K numerickému řešení se proto skvěle hodí lichoběžníková metoda, pro kterou ||un||2 = ||y||2 Pro každé n = 1,2,... Ověřte! Problém (10.87)-(10.88) se chová podobně: vlastní čísla odpovídající matice A leží v záporné komplexní polorovině v blízkosti imaginární osy a \Xmax — IN/£\ —> 0 pro N —> oo. Pro řešení počátečního problému (10.87)-(10.88) lze kromě lichoběžníkové metody doporučit také metody, jejichž oblast absolutní stability obsahuje obdélník Raf3 = {z e C I -a< Re(z) < 0,-f3 < lm(z) < f3}. Pro metodu BS32 je (a; (5) = (1,64; 1,73) a pro metodu DP54 je (a; (5) = (3,19; 0,99), viz např. [26]. Délka kroku těchto dvou metod je sice z důvodu stability omezena, toto omezení však není nijak dramatické, délka kroku bude řádu 0(h). Z matlabovských programů lze tedy doporučit programy ode23t, ode23 a ode45. Metoda charakteristik je další vhodnou technikou pro řešení úlohy (10.82)-(10.84). Její podstatu vysvětlíme nejdříve pro zjednodušenou úlohu du du --h a— ot ox u(0,t) = g0(t) u(x, 0) = tp(x] 0, iG (0,1), í G (0,T) t e (0,T), x G (0,f), (10.91) 5Čtvercová matice V je unitární, jestliže V^V = VV^ = I. Přitom je matice Hermitovsky sdružená, tj. transponovaná a komplexně sdružená: když V = {vij}fj=i a = {^}fj=i, pak = v je číslo komplexně sdružené s číslem v ji. jí 266 kde a > O je konstanta. Diferenciální rovnici přepíšeme pomocí charakteristik na tvar du(x(t),t) dt 0. (10.92) Zvolme rovnoměrné dělení intervalu (0,£) s krokem h = £/N, tj. Xi = ih, i = 0,1,..., N, a rovnoměrné dělení intervalu (0,T) s krokem r = T/Q, tj. tn = nr, n = 0,1,... ,Q. Charakteristika vycházející z bodu [xj,ín+i] je přímka Xi(t) = x,i + a(t — tn+1). V čase t = tn je Předpokládejme, že ar < h. Pak pro i = 1, 2,...,iV bod i), zejména tedy x™ G (0,£), takže u(x™,tn) má smysl. Integrací rovnice (10.92) od tn do tn+i obdržíme tn+1 du(xi(t),t) dl dt = u(xí, tn+1) - u(x?,tn) = 0 a odtud u(xi,tn+1) = u(x?,tn), i = 1,2,..., N. (10.93) Numerickou metodu dostaneme tak, že u(x™,tn) určíme přibližně interpolací, tj. počítáme <+1 = Pfc(x?), (10.94) kde Pk{x) je interpolační polynom stupně k > 1 splňující interpolační podmínky Pkixi-i) = urU , Pk(Xi) = <, (10.95) které v případě k > 1 doplníme o dalších k—l vhodně zvolených interpolačních podmínek. Pro lineární polynom Pľ z podmínek (10.95) odvodíme P1(x) = u? + (x — Xi) a odtud P^x™) = u™--j^(uí ~ ui-i) • ln+l i i i i i i _i_i_ Dostali jsme tak upwind metodu x(t)/ J u7+1 = u?- ar- bí-i h (10.96) Xi Xi+i Obr. 10.11. Upwind metoda Název metody nám připomíná, že veličina u v uzlu Xi závisí jen hodnotách této veličiny v uz-x lech ležících „proti proudu, proti větru", pro a > 0 tedy nalevo od Xi. V bodu x0 = 0 užijeme okrajovou podmínku, takže Uq+1 = go(tn+1). 267 Dá se ukázat, že když v:= — < 1, (10.97) h pak za předpokladu dostatečné hladkosti přesného řešení pro chybu platí u(xi,tn) - u? = 0(t) , (10.98) viz [29]. Říkáme, že metoda (10.96) je upwind metoda řádu jedna. Pro v = 1 dokonce un = u(xi,tn) je přesné! Číslo v = ar/h se nazývá Courantovo číslo a podmínka (10.97) se nazývá Courantova-Fríedríchsova-Lewyova podmínka, stručně CFL podmínka. Metodu řádu dva dostaneme tak, že v (10.94) použijeme interpolační polynom druhého stupně. Když k podmínkám (10.95) pro k = 2 přidáme ještě podmínku PÁXi+i) = <+i, (10.99) vypočteme P2(xn) a dosadíme do (10.94), dostaneme Laxovu-Wendroffovu metodu n _ n i n _ on , n n+1 n ui+l Ui-1 , X/ \2Uí+l ^ /lnlnn\ mí +=ui-ar-—-+ -{ar) -—-. (10.100) V bodu xq užijeme okrajovou podmínku, takže Uq+1 = go(tn+i)- Pro aproximaci v uzlu Xn můžeme použít interpolační polynom i^^)? který kromě podmínek (10.95) vyžaduje navíc splnění podmínky P2(;eív-2) = mtv-2- Jestliže pro obecný uzel x,i přidáme k podmínkám (10.95) podmínku P2(Zi-2) =<_2, (10.101) vypočteme P2(xn) a dosadíme do (10.94), obdržíme Beamovu-Warmíngovu metodu ui +=ui-ar-—-+ ^{ar) -—-. (10.102) Jestliže Uq+1 = go(tn+i) a počítáme-li i = 1,2,..., N — l, podle (10.100) a u^1 podle (10.102), je-li splněna CFL podmínka (10.97) a je-li přesné řešení u dostatečně hladké, pro chybu platí u(xi,tn) -< = 0(r2). (10.103) Jestliže Uq+1 = go(tn+i) a počítáme-li podle (10.100) a i = 2, 3,..., N, podle (10.102), je-li splněna CFL podmínka (10.97) a je-li přesné řešení u dostatečně hladké, pro chybu opět platí (10.103). Věnujme se dále případu, kdy konstanta a < 0. Pak okrajová podmínka bude předepsána vpravo, tj. podmínku (10.912) nahradí podmínka u(£,t) = ge(t), te(0,T). (10.912) Charakteristika vycházející z bodu [xj,rn+i] bude směřovat doprava, takže za předpokladu platnosti CFL podmínky \a\r u:=^-