Adamátor Zápisky Hlášky

Výpisky z Numerické matematiky 1

Kontakt

Tomáš Oberhuber, T109

Zdroje

Oberhuberovy implementace numerických metod

Organizace

Skripta od Humhala pokrývají jen část přednášky

Zkouška: vysvětlit dvě dané numerické metody, dokázat, že fungují (na E bez důkazů)

Cíl

Numerická matematika = „matematika na počítači“

Snaží se řešit složité matematické úlohy, které nemají analytické řešení

Hledáme pouze aproximaci, ne přesné řešení, také je dobré mít odhad chyby a umět ji udělat libovolně malou

Chceme se vyhnout chybám počítačové aritmetiky (přetečení, zaokrouhlování)

Matice

Definice. Matice je silně regulární, pokud všechny její hlavní podmatice jsou regulární.

Rozklady matic

Věta. Horní/dolní trojúhelníkové matice jsou uzavřené na sčítácí, násobení a inverzi.
Důkaz. Sčítání a násobení z definice, inverze pomocí adjungované matice.
Věta (LDR rozklad). Každá silně regulární matice 𝐀 se dá jednoznačně zapsat ve tvaru 𝐀≕𝐋𝐃𝐑, kde 𝐋 je dolní trojúhelníková s jedničkami na diagonále, 𝐃 je diagonální a 𝐑 je horní trojúhelníková s jedničkami na diagonále.
Definice. Spektrální poloměr matice 𝐀 je ρ(𝐀)≔max⁡{|λ||λ∈σ(𝐀)}
Definice. Nechť w→ je vektor s euklidovskou normou 1. Householderova reflekční matice je matice ve tvaru 𝐇w→≔𝐈−2w→w→*
Věta. Householderova reflekční matice je hermitovská a unitární.
Věta. Když do Householderovy reflekční matice strčíme vektor, dostaneme jeho zrcadlový obraz podle nadroviny L≔{x→∈𝐂n|w→*x→=0}
Věta. Je-li λ∈σ(𝐀), potom (∃w→)(𝐇w→𝐀𝐇w→e→1=λe→1)
Věta (Schurova). Libovolná matice 𝐀 se dá zapsat ve tvaru 𝐀≕𝐔*𝐑𝐔, kde 𝐔 je unitární matice a 𝐑 je horní trojúhelníková matice.
Věta. Normální trojúhelníková matice je diagonální.

Posloupnosti, normy

Definice. Nechť 𝐀 je pozitivně definitní matice. Potom definujeme energetickou vektorovou a maticovou normu: ‖x→‖𝐀≔‖𝐀12x→‖2 ‖𝐁‖𝐀≔‖𝐀12𝐁𝐀−12‖2
Věta. 𝐀n→n→∞𝟎⟺ρ(𝐀)<1
Věta. 𝐀n→n→∞𝟎⟸(∃norma)(‖𝐀‖<1)
Věta. Pro libovolnou maticovou normu platí ρ(𝐀)≤‖𝐀‖.
Věta. Řada ∑n=0∞𝐀n konverguje právě tehdy, pokud 𝐀n→0. Jejím součtem je potom (𝐈−𝐀)−1.
Věta. Pokud ‖𝐀‖<1, potom ‖(𝐈−𝐀)−1−∑n=0m𝐀n‖≤‖A‖m+11−‖A‖

Numerické výpočty

Obecně úlohu zapisujeme ve tvaru F(x→,d→)=0, kde d→ je vstup a x→ je výstup.

Definice. Úloha je dobře položená alias stabilní, pokud má jednoznačné řešení x→ a pokud se mírně změní vstupní data, potom se řešení také změní jen málo.
Definice. Číslo podmíněnosti matice 𝐀 je κ(𝐀)≔‖𝐀‖‖𝐀−1‖. Pokud je malé (řádově nejvýše 1000), řekneme, že matice je dobře podmíněná.
Věta. Nechť 𝐀x→=b→,𝐀(x→+δx→)=b→+δb→. Potom ‖δx→‖‖x‖≤κ(𝐀)‖δb→‖‖b‖ Pokud je navíc maticová norma indukovaná vektorovou normou, potom pro nějaké nenulové b→,δb→ nastává rovnost.
Definice. Numerická metoda je stabilní, pokud při aplikaci na stabilní úlohu způsobí malá změna vstupu jen malou změnu výstupu.
Definice. Mějme iterační metodu. r∈ℕ+ nazýváme řád metody, pokud existuje odhad ‖x→(k)−x→‖≤C(F,d→)‖x→(k−1)−x→‖r

LU rozklad

Při Gaussově eliminační metodě dostáváme 𝐀≕𝐌−1𝐔≕𝐋𝐔, kde 𝐌 je matice řádkových úprav a 𝐔 je horní trojúhelníková. Také dostáváme 𝐔x→=d→, z čehož plyne 𝐋d→=b→. Tedy jakmile jednou spočteme LU rozklad, můžeme již v čase Θ(n2) vyřešit libovolnou pravou stranu (nejdřív spočtu d→ a potom x→). Akorát nějak potřebujeme zjistit 𝐋. Tu zjistíme jednoduše tak, že budeme provádět vopáčné elementární úpravy. Využijeme následující lemma:

Lemma. Pro i<j je součin (1⋱Ai,iAi+1,i1⋮⋱An,i1)⋅(1⋱Aj,jAj+1,j1⋮⋱An,j1) roven „sjednocení“ obou matic.

Z toho nám vyjde vztah Li,j=Ai,j(j−1). Tedy při algoritmu stačí nenulovat prvky pod diagonálou ani nepřepisovat prvky diagonály na jedničky a získáme zároveň 𝐋 a 𝐔 (kde 𝐔 bude mít na diagonále pomyslné jedničky).

Jiný způsob, jak najít LU rozklad, je kompaktní schéma pro LU faktorizaci. Myšlenka je taková, že vztah 𝐀=𝐋𝐔 rozepíšeme z definice násobení matic do soustavy lineárních rovnic, které budeme schopni postupně vyřešit (s tím, že má být Uii=1). Tato metoda každý prvek matice přepisuje pouze jednou, což způšobuje větší přesnost než u Gaussova algoritmu, ale není možné vybírat pivota. Obecně se tento algoritmus dá vyjádřit vzorci:

Li,j=Ai,j−∑k=1j−1Li,kUk,j,i≥j Ui,j=Ai,j−∑k=1i−1Li,kUk,jLi,i,i<j
Věta (Choleského rozklad). Je-li 𝐀 pozitivně definitní hermitovká matice, dá se vyjádřit jako 𝐀=𝐒*𝐒, kde 𝐒 je horní trojúhelníková matice.

Modifikace Gaussovy eliminační metody

Pokud je matice 𝐀 tridiagonální a silně regulární, můžeme použít Thomasův algoritmus. Povšimneme si, že při použití normálního algoritmu by většina úprav nic nedělala a vznikla by horní bidiagonální matice s jedničkovou diagonálou. Označíme-li μ1,…,μn−1 její horní diagonálu a ρ1,…,ρn prvky upraveného b→, máme vztahy

μ1=b1a1 ρ1=d1a1 μk=bkak−ckμk−1 ρk=dk−ckρk−1ak−ckμk−1 xn=ρn xk=ρk−μkxk+1

Tridiagonální matice se v praxi vyskytují dost často, například při řešení diferenciálních rovnic, proto je Thomasův algoritmus užitečný.

Mějme soustavu rovnic v následujícím blokovém tvaru:

(𝐀1𝐂1⋱⋮𝐀r−1𝐂r−1𝐁1⋯𝐁r−1𝐀r)(x→1⋮x→r−1x→r)=(d→1⋮d→r−1d→r)

Budeme na ni provádět Gaussovu eliminační metodu, ale blokově, takže například místo dělení pivotem bude násobení inverzí. Vznikne z toho pěkný hnus, ale nic, co by se nedalo vymyslet. Konkrétně:

(𝐈𝐀1−1𝐂1⋱⋮𝐈𝐀r−1−1𝐂r−1𝐒)(x→1⋮x→r−1x→r)=(𝐀1−1d→1⋮𝐀r−1d→r−1s→)

kde 𝐒≔𝐀r−∑i=1r−1𝐁i𝐀i−1𝐂i je Schurův doplněk a s→≔d→r−∑i=1r−1𝐁i𝐀i−1d→i.

Při zpětném chodu budeme mít:

x→r=𝐒−1s→ x→i=𝐀r−1−1(d→r−1−𝐂r−1x→r)

To jde spočítat paralelně!

Takhle po blocích jdou dělat i jiné varianty Gaussovy eliminační metody, ale u téhle se to používá často.

Stacionární iterativní metody

Obecný předpis: x→(k+1)=𝐁(k)x→(k)+c→(k), přičemž přesné řešení x→* by mělo být pevný bod pro libovolné k.

Věta. Iterativní metoda konverguje z libovolného počátečního bodu ke svému pevnému bodu právě tehdy, pokud limk→∞⁡∏0i=k𝐁(i)=0

Díky tomuto jsou iterativní metody samoopravující — i když ve výpočtu uděláme chybu, v dalších krocích se budeme opět přibližovat

Definice. Iterativní metoda je stacionární, pokud koeficienty 𝐁,c→ nezávisí na čísle kroku.
Důsledek. Stacionární iterativní metoda konverguje z libovolného počátečního bodu ke svému pevnému bodu právě tehdy, pokud limk→∞⁡𝐁k=0
Důsledek. Stacionární iterativní metoda konverguje z libovolného počátečního bodu ke svému pevnému bodu právě tehdy, pokud ρ(𝐁)<1.
Důsledek. Stacionární iterativní metoda konverguje z libovolného počátečního bodu ke svému pevnému bodu, pokud existuje taková norma, že ‖𝐁‖<1.
Věta (aposteriorní odhad pomocí residua). Pro stacionární iterativní metodu k řešení soustavy lineárních rovnic platí následující odhad chyby: ‖x→(k)−x→*‖≤‖𝐀−1‖‖𝐀x→(k)−b→‖=‖𝐀−1‖‖r→(k)‖ kde maticová norma je souhlasná s vektorovou normou.
Věta (aposteriorní odhad pomocí změny). Pro jakoukoli stacionární iterativní metodu platí následující odhad chyby: ‖x→(k)−x→*‖≤‖(𝐈−𝐁)−1‖‖x→(k−1)−x→(k)‖ kde maticová norma je souhlasná s vektorovou normou.
Věta (apriorní odhad). Pro stacionární iterativní metodu platí následující odhad chyby: ‖x→(k)−x→*‖≤‖𝐁‖k(‖x→(0)‖+‖c→‖1−‖𝐁‖) kde maticová norma je souhlasná s vektorovou normou.
Definice. Metoda postupných aproximací je metoda pro řešení soustavy lineárních rovnic založená na odečítání rezidua: x→(k+1)≔x→(k)−r→(k)=(𝐈−𝐀)x→(k)+b→
Důsledek. Metoda postupných aproximací konverguje z libovolného počátečního bodu ke svému pevnému bodu právě tehdy, pokud ρ(𝐈−𝐀)<1.
Důsledek. Metoda postupných aproximací konverguje z libovolného počátečního bodu ke svému pevnému bodu, pokud existuje taková norma, že ‖𝐈−𝐀‖<1.
Věta. Nechť p je polynom a 𝐀 čtvercová matice. Potom (∀λ∈σ(𝐀))(p(λ)∈σ(p(𝐀)))
Věta. Je-li 𝐀 hermitovská, potom metoda postupných aproximací konverguje právě tehdy, pokud 𝟎<𝐀<2𝐈.

To znamená, že matic, pro které konverguje, není moc. S tím nám pomůže předpodmíněni — vynásobíme obě strany rovnice vhodnou regulární maticí 𝐇.

Věta. Je-li 𝐀 hermitovská a pozitivně definitní, potom předpodmíněná metoda postupných aproximací konverguje právě tehdy, pokud 𝟎<𝐀<𝐖+𝐖*, kde 𝐖≔𝐇−1. V takovém případě je konvergence monotónní vzhledem k energetické normě ‖⋅‖𝐀.

Dá se snadno ukázat, že by bylo hezké, kdyby 𝐇 byla co nejblíž 𝐀−1. Ovšem počítat inverzi samozřejmě nepřipadá v úvahu, takže se ji budeme snažit aproximovat. Dá se použít například takzvaný neúplný LU rozklad (ale v praxi se zrovna pro tohle tolik nepoužívá).

Definice. Nechť θ∈ℝ je relaxační parametr. Richardsonovy iterace jsou iterační metoda pro řešení soustavy lineárnich rovnic daná předpisem x→(k+1)≔x→(k)−θr→(k)=x→(k)−θ(𝐀x→(k)−b→)
Důsledek. Je-li 𝐀 hermitovská a pozitivně definitní, potom Richardsonova metoda konverguje právě tehdy, pokud 𝐀<2θ𝐈.

Jacobiho metoda: v každém kroku vezmeme i-tou rovnici, vyjádříme z ní xi a za ostatní dosadíme z předchozího kroku. Jak to vyjádřit formálně? Zapíšeme si 𝐀≕𝐃−𝐋−𝐑, kde trojúhelníkové matice mají nuly na diagonále a provedeme jednoduché úpravy, z čehož vznikne vzorec

x→(k+1)≔𝐃−1(𝐋+𝐑)x→(k)+𝐃−1b→=(𝐈−𝐃−1𝐀)x→(k)+𝐃−1b→

To je vlastně metoda postupných aproximací s podmíněním 𝐃−1, kterému se zove Jacobiho podmínění.

Věta. Jacobiho metoda konverguje právě tehdy, pokud ρ(𝐃−1(𝐋+𝐑))<1.
Definice. Matice s převládající diagonálou je matice, kde v každém řádku je absolutní hodnota diagonálního prvku ostře větší než součet absolutních hodnot ostatních prvků.
Věta. Je-li 𝐀 matice s převládající diagonálou, potom Jacobiho metoda konverguje.
Věta. Je-li 𝐀 hermitovská a pozitivně definitní, potom Jacobiho metoda konverguje právě tehdy, pokud 𝐀<2𝐃. V takovém případě je konvergence monotónní vzhledem k energetické normě ‖⋅‖𝐀.

Jacobiho metodu můžeme vylepšit tím, že při výpočtu budeme rovnou používat již napočítané složky, čímž získáme Gaussovu-Seidelovu metodu. Jde o metodu postupných aproximací s předpodmíněním (𝐃−𝐋)−1.

Věta. Je-li 𝐀 matice s převládající diagonálou, potom Gaussova-Seidelova metoda konverguje.
Věta. Je-li 𝐀 hermitovská a pozitivně definitní, potom Gaussova-Seidelova metoda konverguje vždy. V takovém případě je konvergence monotónní vzhledem k energetické normě ‖⋅‖𝐀.
Poznámka. Gaussova-Seidelova metoda je obecně lepší než Jacobiho metoda, ale není jednoznačně lepší.

Pokud ke Gaussově-Seidelově metodě přidáme relaxační parametr, dostaneme super-relaxační metodu. Ta je vhodná pro lineární soustavy pocházející z metody konečných diferencí pro řešení parabolických nebo eliptických parciálních diferenciálních rovnic. Abychom pro ni dostali předpis, musíme vztah pro Gaussovu-Seidelovu metodu vyjádřit jako xi(k+1)=xi(k)+Δxi(k). Poté zavedeme relaxační parametr ω∈ℝ a položíme xi(k+1)≔xi(k)+ωΔxi(k). Je to metoda postupných aproximací s podmíněním ω(𝐃−ω𝐋)−1.

Věta. Pro super-relaxační metodu platí ρ(𝐁)≥|ω−1|, tedy metoda nikdy nekonverguje pro ω∉(0,2).
Věta. Je-li 𝐀 matice s převládající diagonálou, potom super-relaxační metoda konverguje pro libovolné ω∈(0,1].
Věta. Je-li 𝐀 hermitovská a pozitivně definitní, potom pro ω∈(0,2) super-relaxační metoda konverguje. V takovém případě je konvergence monotónní vzhledem k energetické normě ‖⋅‖𝐀.

Budeme pro tzv. dvoucyklické shodně uspořádané matice (ty se často vyskytují při řešení diferenciálních rovnic) zkoumat optimální hodnotu ω.

Definice. Čtvercová matice 𝐂 je slabě cyklická s indexem 2, pokud existuje taková permutace 𝐏, že 𝐏𝐂𝐏T=(𝟎𝐌1𝐌2𝟎)
Definice. Matice 𝐀=𝐃−𝐋−𝐑 se nazývá dvoucyklická, pokud její Jacobiho matice 𝐃−1(𝐋+𝐑) je slabě cyklická s indexem 2. Dvoucyklická matice je shodně uspořádaná, pokud vlastní číslo matice α𝐃−1𝐋+α−1𝐃−1𝐑 je stejné pro všechna α∈ℝ≠0.
Věta. Nechť 𝐀 je dvoucyklická shodně uspořádaná matice, ω∈ℝ≠0 a λ≠0 je vlastní číslo matice 𝐁ω ze super-relaxační metody. Nechť pro nějaké μ platí (λ+μ−1)2=ω2μ2λ. Potom μ je vlastní číslo matice 𝐁J z Jacobiho metody, a vopáčně. Navíc ρ(𝐁ω) je nejmenší, a super-relaxační metoda tedy konverguje nejrychleji, pro ωopt≔21+1−ρ(𝐁J)2

Tohle je ale spíš teoretický výsledek, protože je většinou rychlejší dát si pár iterací navíc než počítat nějaký spektrální poloměr. Často se dělá to, že se parametrem ω pohybuje a hledá se, pro jakou hodnotu to konverguje nejrychleji. Ukazuje se, že se vyplatí ho hledat přesně (až na dvě desetinná místa).

Vlastní čísla

Věta. Mějme polynom p. Nalezení jeho kořenů je ekvivalentní nalezení vlastních čísel Frobeniovy matice: (−pn−1pn−pn−2pn⋯−p1pn−p0pn10⋯0001⋯00⋮⋮⋱⋮⋮00⋯10)
Věta (aposteriorní odhad chyby). Nechť 𝐀 je hermitovská matice a λ^,x→^ jsou aproximace vlastního čísla a vektoru. Nechť r→≔𝐀x→^−λ^x→^ je residuum. Potom máme odhad min⁡{|λ^−λ||λ∈σ(𝐀)}≤‖r→‖2‖x→^‖2

Mocninná metoda

Mocninná metoda řeší částečný problém vlastních čísel — nenajde všechny, ale jen to absolutně největší, což je často jediné, co nás zajímá.

Základní myšlenka je taková, že vezmeme nějaký vektor x→, budeme počítat posloupnost 𝐀kx→ (Krylovovu posloupnost) a sledovat, jak rychle roste. Je potřeba ho zvolit tak, aby měl nenulový průmět ve směru největšího vlastního vektoru. Pokud vektor v každém kroku posloupnosti znormalizuujeme (nejčastěji maximovou normou), aby posloupnost neutekla do nekonečna, dostáváme právě mocninnou metodu. Za vhodných podmínek potom bude konvergovat k vlastnímu vektoru a jeho největší složka ρk k největšímu vlastnímu číslu. Pokud ovšem počáteční vektor zvolíme blbě, můžeme dostat jiné vlastní číslo.

Věta. Nechť matice 𝐀 má jedno absolutně největší číslo λ se stejnou algebraickou i geometrickou násobností r. Nechť její Jordanův tvar je 𝐗−1𝐉𝐗, kde 𝐉 začíná r řádky s λ. Potom pro libovolný počáteční odhad x→(0) takový, že (𝐗x→(0))1,…,r≠0→, mocninná metoda najde vlastní číslo λ jako limitu ρk a nějaký příslušný vlastní vektor jako limitu x→(k).

Rychlost konvergence závisí na poměru hledaného vlastního čísla a ostatních vlastních čísel. Metodu můžeme urychlit tím, že spektrum vhodně posuneme (od 𝐀 odečteme nějaké λ*𝐈).

Pokud chceme navopák najít nejmenší vlastní číslo, stačí použít metodu na matici 𝐀−1. Tu ale nechceme počítat, takže místo toho budeme vždy řešit soustavu 𝐀x→(k+1)=x→(k) nějakou iterativní metodou. To půjde rychle, protože pro malá k nám stačí malá přesnost a pro velká k se vektor mění málo, takže máme dobrý počáteční odhad.

Pokud chceme vlastních čísel najít víc, můžeme použít redukční metodu, která z matice „odstraní“ jedno vlastní číslo. K výpočtu kompletního spektra se ale nehodí, protože způsobuje ztrátu přesnosti. Nechť má matice vlastní vektor x→. Pomocí matice přechodu 𝐏 ji převedeme do báze x→,e→2,…,e→n:

𝐏=(x1x21⋮⋱xn1) 𝐏−1=(1x1−x2x11⋮⋱−xnx11) 𝐏−1𝐀𝐏=(λq→T0→𝐁)

Matice 𝐁 bude mít stejná vlastní čísla jako 𝐀, ale bez λ, takže můžeme mocninnou metodou najít nějaké další vlastní číslo μ s vlastním vektorem z→. Ale jak příslušný vlastní vektor převedeme na vlastní vektor 𝐀? Nejprve mu dopočteme první složku

z1≔q→Tz→μ−λ

Pokud λ=μ, vlastní číslo je vícenásobné, takže z→1 můžu volit libovolně. Ze z→ dopočtu vlastní vektor y→ matice 𝐀 jako y→=𝐏z→.

Trojúhelníková metoda, LR algoritmus

Co když chceme najít všechna vlastní čísla? Myšlenka trojúhelníkové metody je taková, že použijeme mocninnou metodu na více vektorů, ale budeme zajišťovat, aby zůstaly lineárně nezávislé. Budeme konstruovat posloupnosti dolních a horních trojúhelníkových matic. 𝐋(0) zvolíme libovolně a následně budeme brát 𝐋(k+1)𝐑(k+1)≔𝐀𝐋(k). Pokud tyto posloupnosti konvergují, pak platí 𝐀𝐋=𝐋𝐑, tedy matice 𝐑 je podobná matici 𝐀 a na její diagonále najdeme vlastní čísla. Vlastní vektory 𝐑 potom najdeme řešením soustavy (𝐑−λ𝐈)x→=0→, ty potom přenásobíme 𝐋 a dostaneme vlastní vektory 𝐀.

𝐋(0) ani nemusí být dolní trojúhelníková, ale 𝐀𝐋(0) musí být silně regulární, abychom mohli provést LU rozklad. Jelikož můžeme začít z prakticky libovolné matice, metoda má samoopravující schopnosti. Zároveň potřebujeme, aby 𝐀𝐋(k) bylo silně regulární pro každé k.

Věta. Je-li 𝐀 silně regulární, potom všechny matice na nějakém okolí jsou silně regulární.
Věta. Nechť 𝐀=𝐈+𝐄≕𝐋𝐑. Potom lim‖𝐄‖→0⁡𝐋=lim‖𝐄‖→0⁡𝐑=𝐈.
Lemma. Mějme matice z trojúhelníkové metody. Existuje-li LU rozklad 𝐀k𝐋(0)≕ℒ(k)ℛ(k), potom platí ℒ(k)=𝐋(k) ℛ(k)=∏1i=k𝐑(i)
Věta (kritérium konvergence trojúhelníkové metody). Nechť je matice 𝐀 regulární a má všechna vlastní čísla jednonásobná a absolutně různá. Nechť existují LU rozklady matic 𝐗, 𝐗−1𝐋(0) a 𝐀𝐋(k) od nějakého k. Potom posloupnosti 𝐋(k),𝐑(k) konvergují a na diagonále 𝐑 je spektrum matice 𝐀 seřazené podle absolutní hodnoty.

Pak je tu ještě LR algoritmus, který spočívá jednoduše v tom, že matici opakovaně rozložíme do LU rozkladu 𝐀(k)≕𝐋^(k)𝐑^(k) a pak ho vynásobíme ve vopáčném pořadí: 𝐀(k+1)≔𝐑^(k)𝐋^(k).

Věta. Všechny členy posloupnosti 𝐀(k) jsou si podobné.

LR algoritmus má menší nárok na paměť — stačí si pamatovat dvě matice a ne tři; nemusíme si pamatovat matici 𝐀. Ovšem tím, že si ji nepamatujeme, ztrácíme samoopravovací vlastnost metody. Algoritmus je obecně numericky nestabilní, proto se moc nepoužívá.

Věta. Existuje-li LU rozklad 𝐀k≕ℒ(k)ℛ(k), potom ℒ(k)=∏i=1k𝐋^(i) ℛ(k)=∏1i=k𝐑^(i)
Důsledek. Pokud konverguje trojúhelníková metoda začínající v jednotkové matici, potom LR algoritmus konverguje k horní trojúhelníkové matici.

Obě tyto metody jsou náročné, protože každá iterace má složitost Θ(n3) (kvůli výpočtu LU rozkladu). Také jsou poněkud numericky nestabilní, ale jsou dobrým teoretickým podkladem pro QR algoritmus, který už je lepší.

QR rozklad

Věta. Nechť 𝐀 je regulární matice. Potom existuje rozklad 𝐀=𝐐𝐑, kde 𝐐 je unitární a 𝐑 je horní trojúhelníková s kladnou diagonálou.

QR rozklad pomocí Gram-Schmidtova ortogonalizačního procesu

Již známe z prváku:

q~i→≔x→i−∑j=1i−1(x→i⋅q→j)q→j q→i≔q~i→‖q~i→‖2

Když z těchto vzorců vyjádříme x→i pomocí q→j, dostaneme 𝐗=𝐐𝐑, kde 𝐗 se skládá z ortonormálníčh vektorů a 𝐑 je horní trojůhelníková s kladnou diagonálou. Tedy Gram-Schmidt je algoritmus na výpočet QR rozkladu!

Ve skutečnosti se pro zvýšení stability používá mírná modifikace, kde při výpočtu q→i nepočítáme skalární součin s x→i, ale s již napočtenou verzí q→i, což samozřejmě v teorii neovlivní výsledek. I tak je ale dost nestabilní, takže se spíš používá v metodách pro řešení soustav rovnic. Každopádně má složitost Θ(n3), takže jsme si zatím moc nepomohli.

QR rozklad pomocí Householderových reflexí

Householderova reflexe nám dává způsob, jak pomocí unitární transformace zobrazit vektor na libovolný jiný vektor se stejnou normou. Takže speciálně pokud si zvolíme správný násobek jednotkového vektoru, můžeme ji použít k tomu, abychom všechny složky kromě jedné vynulovali. Akorát si musíme dávat pozor na numerickou stabilitu — nechceme, aby vektory byly příliš blízko, protože bychom potom dělili malým číslem, takže pokud příslušná složka vektoru bude kladná, budeme ho reflektovat do mínus jednotkového vektoru. Pokud chceme zachovat více složek, tak si Householderovu matici trochu upravíme, aby pár prvních složek ignorovala.

Tohle můžeme podobným způsobem jako u Gaussovy eliminační metody využít k převodu matice do trojůhelníkového tvaru. Nejdřív vynulujeme v prvním sloupci všechno kromě prvního prvku (ten bude nahrazen nějakým kladným číslem). Potom už první řádek necháme na pokoji a pomocí druhého řádku vynulujeme ve druhém sloupci další řádky. A tak dále.

Součinem všech Householderových matic, které jsme použili, dostaneme 𝐐. Ovšem kdybychom ten součin počítali jen tak, vyšla by z toho složitost Θ(n4). Naštěstí to můžeme spočítat efektivněji tak, že si je rozepíšeme z definice a budeme je na sebe navzájem aplikovat:

𝐇w→𝐀=𝐀−2w→w→*𝐀=𝐀−2w→(𝐀*w→)*

QR rozklad pomocí Givensových rotací

Uděláme přesně to samé — budeme unitárně transformovat vektor do násobku jednotkoveho vektoru a tím nulovat složky — ale místo reflexe využijeme rotaci.

Jde tedy o unitární transformaci, která dokáže j-tou složku vektoru nastavit na nulu, i-tou na xi2+xj2 a ty zbylé nechat. Takže přináší „jemnější“ způsob, jak dosáhnout toho samého. Inverzi Givensovy rotace získám jednoduše výměnou sin⁡ a −sin⁡, tedy transpozicí.

Podobně jako předtím: Givensovy rotace nebudeme násobit jako idioti, ale využijeme toho, že se liší jen o pár složek od jednotkových matic. Složitost je potom opět Θ(n3).

QR algoritmus

Funguje úplně stejně jako LR algoritmus, akorát místo LU rozkladu počítáme QR rozklad. Posloupnosti se tentokrát budou jmenovat 𝐓(k), 𝐐(k) a 𝐑(k).

Věta. Všechny členy posloupnosti 𝐓(k) jsou si ortogonálně podobné.

Pokud bude konvergovat ∏i=0k𝐐(i)→𝐔 a 𝐓(k)→𝐑, dostáváme Schurův rozklad: 𝐀=𝐔*𝐑𝐔. Z diagonált 𝐑 opět vyčteme spektrum 𝐀.

Lemma. Existuje-li QR rozklad 𝐀k≕𝒬(k)ℛ(k), potom 𝒬(k)=∏i=1k𝐐^(i) ℛ(k)=∏1i=k𝐑^(i)
Věta. Pokud má matice 𝐀 absolutně různá vlastní čísla, potom posloupnost 𝐓(k) konverguje k horní trojúhelníkové matici s vlastními čísly seřazenými podle absolutní hodnoty na diagonále. Navíc je-li 𝐀 symetrická, potom limitní matice je diagonální.

Zatím to vypadá, že QR algoritmus má stejně jako LR algoritmus složitost Θ(n3). Ale pomocí Hessenbergových QR iterací se dá zredukovat na Θ(n2).

Definice. Matice je v Hessenbergově tvaru, pokud je horní trojúhelníková s tím, že může mít také nenulové prvky na spodní diagonále.

Do Hessenbergova tvaru lze libovolnou matici převést podobnostní transformací přímým algoritmem se složitostí Θ(n3). Použijeme Housholderovy reflexe podobně jako pro výpočet QR rozkladu, ale s tím, že první řádek budeme už od začátku nechávat na pokoji. To nám zajistí, že když matici poté vynásobíme tou samou reflexí i zprava, abychom dostali podobnou matici, nerozbijeme si tím vytvořené nuly.

Vylepšený QR algoritmus bude fungovat tak, že 𝐀 nejprve převedeme do Hessenbergova tvaru. To je sice Θ(n3), ale aspoň to budeme provádět jen jednou a ne při každé iteraci. Posloupnost 𝐓(k) tentokrát budeme značit 𝐇(k). Nyní když chceme spočítat QR rozklad, tak nám stačí eliminovat prvky na spodní diagonále, a na to stačí n−1 Givensových rotací! Ještě se potřebujeme ujistit, že po provedení zbytku kroku opět vznikne matice v Hessenbergově tvaru.

Věta. Součin 𝐑(k)∏i=1n−1𝐆n−1(k) je opět matice v Hessenbergově tvaru.

Nelineární rovnice

Začneme s funkcí jedné reálné proměnné. Nejprve musíme separovat kořeny — najít takové intervaly, aby v každém byl pouze jeden kořen. Metody totiž nemusí konvergovat, když máme kořenů víc. Na separaci není obecně žádná metoda, musí se to udělat pro konkrétní problém.

Nejjednodušší je bisekce — poněkud pomalá, ale velmi robustní. Odhad chyby můžeme provádět přímo pomocí residua |f(x)|. Pokud ale funkce u kořene roste/klesá hodně pomalu, může tím vzniknout zbytečně špatná aproximace. Místo toho tedy můžeme použít odhad |f(x)f′(x)|. Bisekce samozřejmě může naprosto selhat, pokud je funkce nespojitá.

Mějme nějaký odhad x. Využitím Lagrangeovy věty o přírůstku dostáváme pro kořen:

α=x−f(x)f(ξ),ξ∈⁄α,x⁄

Tohoto můžeme využít k vytvoření iterativní metody, ovšem musíme umět nějak odhadnout f(ξ).

Věta. Nechť α∈ℝ,φ:ℝ→ℝ. Nechť platí φ(α)=α, φ je diferencovatelná na V≔⟨α−r,α+r⟩ a sup⁡{|φ′(x)||x∈V}≕K<1. Potom posloupnost xk≔φk(x) konverguje k α pro x0∈V.
Definice. Iterativní metoda daná vztahem xk≔φk(x) má řád konvergence m, pokud pro nějakou konstantu C platí |xk+1−α|≤C|xk−α|m.
Věta. Nechť φ∈𝒞m(Hα) a (∀i∈m−1^)(φ(i)(α)=0). Potom (∀xk∈Hα)(∃ξ∈⁄α,x⁄)(xk+1−α=φ(m)(ξ)m!(xk−α)m)

Metoda regula falsi funguje podobně jako bisekce, ale místo sekání napůl budeme sekat tam, kde se protíná úsečka mezi body s osou x. Abychom to vyjádřili v obecném tvaru, máme

φ(x)≔x−x′f(x)−f(x′)f(x)

kde x′ je druhý bod.

Věta. Nechť f∈𝒞1(Hα) a f′(α)≠0. Potom existuje takové Bα⊆Hα, že metoda regula falsi konverguje na Bα rychlostí prvního řádu.

Pokud v metodě regula falsi pošleme x′→x, dostáváme Newtonovu metodu:

φ(x)≔x−f(x)f′(x)
Věta. Nechť f∈𝒞1(Hα) a f′(α)≠0. Potom existuje takové Bα⊆Hα, že Newtonova metoda konverguje na Bα rychlostí prvního řádu.
Věta. Nechť f∈𝒞2(Hα) a f′(α)≠0. Potom existuje takové Bα⊆Hα, že Newtonova metoda konverguje na Bα rychlostí druhého řádu.

Obecně Newtonova metoda konverguje rychleji, ale vyžaduje přesnější odhad. Dá se udělat to, že pár kroků uděláme bisekcí nebo regula falsi a následně použijeme Newtonovu metodu.

Pomocí Čebyšenovy metody se dají odvodit podobné metody vyššího řádu, ale vyžadují ještě přesnější odhad a v praxi se moc nepoužívají.

Tyto metody často nekonvergují kvůli tomu, že dělají příliš velký krok. To se dá vylepšit tím, že se v každém kroku nejdřív podíváme, kam bychom skočili, a pokud by se tím residuum zvýšilo, tak zmenšíme skok (například na polovinu) a zkusíme znovu. Tomu se potom říká globálně konvergující metoda, protože pro každý počáteční odhad buď konverguje (i když hodně pomalu), nebo selže.

Nyní se podívejme na soustavy nelineárních rovnic. Ukazuje se, že stačí trochu zobecnit Newtonovu metodu:

φ(x→)≔x→−𝐉f→−1(x→)f→(x→)

neboli v praktičtějším tvaru:

𝐉f→(x→(k))(x→(k+1)−x→(k))=−f→(x→(k))

Opět stačí při řešení lineární soustavy provést jen pár kroků iterativní metody, protože pro malá k nám stačí malá přesnost a pro velká k máme dobrý odhad.

Věta (o přírůstku funkce). Nechť f∈𝒞1(H), kde H je konvexní oblast. Potom (∀u→,v→∈H)(∃ξ∈H)(f(u→)−f(v→)=∇→f(ξ→)(u→−v→))
Věta. Nechť f→∈𝒞1(Ha→) a 𝐉f→(a→) je regulární. Potom existuje takové Ba→⊆Ha→, že zobecněná Newtonova metoda konverguje na Ba rychlostí prvního řádu.

Lagrangeův polynom — konstrukce

Máme nějakou funkci a chceme ji aproximovat polynomem. Mohli bychom zkusit Taylora, ale ten potřebuje znát hodně derivací, což často nemáme k dispozici. Místo toho použijeme Lagrangeův polynom, který naopak vyžaduje hodnotu funkce ve více bodech. Dejme tomu, že známe funkční hodnoty v bodech x0,…,xn a chceme na ně napasovat polynom Ln(x)=∑i=0naixi. Poté prostě řešíme soustavu

(x00⋯x0n⋮⋱⋮xn0⋯xnn)(a0⋮an)=(f(x0)⋮f(xn)) 𝐕x0,…,xn(n)a→=f→

kde 𝐕 je Vandermondova matice.

Věta. Vandermondova matice je regulární.

Pokud budou body x příliš blízko k sobě, Vandermondova matice může být špatně podmíněná. Naštěstí existují i jiné způsoby, jak Lagrangeův polynom spočítat.

Lagrangeův tvar: Definujeme polynomy

li≔∏j=0j≠inx−xjxi−xj

Zřejmě li(xj)=δij. Pomocí nich můžeme vyjádřit interpolační polynom jako

ln(x)≔∑i=0nf(xi)lj(x)

Tato konstrukce je však poněkud výpočetně náročná — při každé změně nějakého xi musíme celý polynom přepočítávat.

Lepší je v tomto Newtonova formule. Budeme postupovat indukcí. Víme, že existuje právě jeden polynom stupně n−1, který souhlasí v n−1 bodech. Pomocí něj najdeme polynom stupně n, který souhlasí ve všech n bodech. Budeme ho hledat ve tvaru:

Ln(x)≔Ln−1(x)+cn∏i=0n−1(x−xi)

Snadno si vyjádříme:

cn≔f(xn)−Ln−1(xn)∏i=0n−1(xn−xi)

Jednodušší způsob, jak to spočítat, jsou poměrné diference. Když si to rozepíšeme nerekurzivně, máme

Ln(x)=∑i=0nci∏j=0i−1(x−xj)

Z toho dostaneme lineární soustavu

(100⋯01(x1−x0)0⋯01(x2−x0)(x2−x0)(x2−x1)⋯0⋮⋮⋮⋱⋮1(xn−x0)(xn−x0)(xn−x1)⋯∏i=0n−1(xn−xi))(c0⋮cn)=(f(x0)⋮f(xn)) 𝐁c→=f→

Vidíme, že ck závisí jen na f(x0),…,f(xk), což se z nějakého důvodu zapisuje jako ck=f[x0,…,xk]. Těmto hodnotám se říká poměrné diference.

Věta. f[xi,…,xi+k]=f[xi+1,…,xi+k]−f[xi,…,xi+k−1]xi+k−xi

Takhle si tedy můžeme napočítat postupně všechny poměrné diference se složitostí Θ(n2), přičemž poté využijeme jenom ty, které začínají na x0.

Lagrangeův polynom — analýza

Takže už umíme efektivně najít Lagrangeův polynom, ale jak zjistíme, jestli je dobrou aproximací?

Věta. Nechť Ix⊆Df je nejmenší interval takový, že {x,x0,…,xn}⊆Ix a f má na něm derivaci řádu n+1. Nechť Ln je její Lagrangeův polynom. Definujme ωn(x)≔∏i=0n(x−xi) Potom existuje takové ξ∈Ix, že Rn(x)≔f(x)−Ln(x)=f(n+1)(ξ)(n+1)!ωn(x)

Všimněme si, že ωn mimo interval (x0,xn) roste hodně rychle, takže Lagrangeův polynom se nehodí pro extrapolaci, pouze pro interpolaci.

Také vidíme, že k výpočtu nepotřebujeme znát žádné derivace, ale aby šlo o dobrou aproximaci, musí n+1. derivace existovat a být nízká.

Věta. Rn(x)=f[x0,…,xn,x]ωn(x)
Důsledek. Lagrangeův polynom se dá zapsat ve tvaru Ln(x)=∑i=0nf(i)(ξi)i!∏j=0i−1(x−xj) což je velmi podobné Taylorovu rozvoji.
Definice. Mějme x0∈ℝ,Hx0 a funkce f,g:Hx0→ℝ. Řekneme, že f aproximuje g na Hx0 s přesností řádu r, pokud limx→x0⁡|f(x)−g(x)||x−x0|r=C>0

Pro Lagrangeův polynom máme

limx→x0⁡|f(x)−Ln(x)||x−x0|=limx→x0⁡|f(n+1)(ξ)(n+1)!ωn(x)||x−x0|=limx→x0⁡|f(n+1)(ξ)(n+1)!x−x0∏i=0n(x−xi)|=|f(n+1)(ξ)(n+1)!∏i=1n(x0−xi)|

Tedy Lagrangeův polynom na okolí bodů xi aproximuje funkci s přesností prvního řádu. Toto nezávisí na volbě n a obecně neplatí, že by nám více bodů dávalo lepší aproximaci! Pomůže nám to, pokud všechny vyšší derivace jsou blízké nule, ale jinak dochází k Rungovu jevu.

Tento problém řeší interpolace po částech. Rozkrájíme interval, na kterém chceme funkci aproximovat, a v každém kousku si vytvoříme jiný Lagrangeův polynom. Speciálně pokud na každém intervalu použijeme pouze jeho krajní body, dostaneme aproximaci lomenou čarou. Nevýhoda je, že nemůžeme zajistit, aby výsledná aproximace byla diferencovatelná. To řeší Hermitův polynom, což je v určitém smyslu kombinace Taylora a Lagrange, ale opět k němu potřebujeme znát derivace f.

Lagrangeův polynom se dá zobecnit do více dimenzí. Nejsnadněji se zkonstruuje, pokud známe hodnoty bodů na nějaké mřížce, například v ℝ2 budeme znát f(x1,y1),f(x1,y2),f(x2,y1),f(x2,y2).

Aproximace derivace

Hodí se pro výpočet Newtonovy metody a pro řešení diferenciálních rovnic.

Máme diferencovatelnou funkci f, kterou známe jen v konečném počtu bodů x0,…,xn, a chceme zjisit její derivaci.

Již víme, že f(x)=Ln(x)+Rn(x). Pokud všechny tyhle věci nějak vyjádříme, můžeme vztah zderivovat. Zderivujme si bazické polynomy:

lj′(x)=∑i≠j1x−xi∏k≠jx−xkxj−xk Ln′(x)=∑j=0nf(xj)lj′(x)

Ale prakticky je lepší derivovat konkrétní polynom.

Rn(x)=f(n+1)(ξ(x))(n+1)!ωn(x)

Bohužel nevíme, jak přesně závisí ξ na x. Budeme předpokládat, že je aspoň diferencovatelné.

Rn(k)(x)=∑i=0k(ki)(f(n+1)(ξ(x)))(k−i)ωn(i)(x)(n+1)!

Z toho vidíme, že f musí mít derivaci řádu n+k+1, což není úplně příjemné. Zkusme si obecně zderivovat ω:

ωn(k)(x)=∑i1=0n∑i2=0i2≠i1n⋯∑ik=0ik≠i1∫⋮ik≠ik−1n∏j=0j≠i1∫⋮j≠ikn(x−xj)

Z tohohle výrazu je naprosto evidentní, že derivace ω nemusí být obecně nulová, takže výsledek nebude přesný. Což netuším, proč by někdo očekával. Co kdybychom zkusili přibližovat body k sobě, abychom napodobili limitu v definici derivace? Zvolíme nějaké h∈ℝ+ a budeme brát bydy xi≔x0+ih,h∈{−m1,⋯,m2}. Nechť n≔m1+m2,fi≔f(xi). Zkonstruujeme Lagrangeův polynom. Pokud vezmeme x≔x0+th, můžeme ho vyjádřit jako

Ln(t)≔∑i=−m1m2fili(t) li(t)≔∏j=−m1j≠im2t−jt−i

Pokud vyjádříme předchozí výraz pro ω v závislosti na t, dostaneme

ωn(k)(t)=hn+1−i∑i1=−m1m2∑i2=−m1i2≠i1m2⋯∑ik=−m1ik≠i1∫⋮ik≠ik−1m2∏j=−m1j≠i1∫⋮j≠ikm2(t−j)

To pro h→0 jde k nule! Tedy čím menší zvolíme h, tím lepší máme aproximaci, konkrétně s řádem n+1−k.

Pro aproximaci derivace v některém z uzlů x0,⋯,xn se používají konečné diference.

Věta. Nechť f∈𝒞3⟨x0,x1⟩,h≔x1−x0. Potom |f(x1)−f(x0)h−f′(x0)|=𝒪(h) tedy dopředná konečná diference aproximuje derivaci s přesností prvního řádu.
Věta. Nechť f∈𝒞4⟨x−1,x1⟩,h≔x1−x0=x0−x−1. Potom |f(x1)−f(x−1)2h−f′(x0)|=𝒪(h2) tedy centrální konečná diference aproximuje derivaci s přesností druhého řádu.

Vidíme, že pomocí Lagrange se to dokazuje pěkně blbě a navíc je potřeba dost vysoká trída diferencovatelnosti. Co takhle použít Taylora?

Věta. Nechť f∈𝒞2⟨x0,x1⟩,h≔x1−x0. Potom |f(x1)−f(x0)h−f′(x0)|=𝒪(h) tedy dopředná konečná diference aproximuje derivaci s přesností prvního řádu.
Věta. Nechť f∈𝒞3⟨x−1,x1⟩,h≔x1−x0=x0−x−1. Potom |f(x1)−f(x−1)2h−f′(x0)|=𝒪(h2) tedy centrální konečná diference aproximuje derivaci s přesností druhého řádu.
Věta. Nechť f∈𝒞3⟨x−1,x1⟩,h≔x1−x0=x0−x−1. Potom |f(x1)−2f(x0)+f(x−1)h2−f′′(x0)|=𝒪(h) tedy jiná centrální konečná diference aproximuje druhou derivaci s přesností prvního řádu.
Věta. Nechť f∈𝒞4⟨x−1,x1⟩,h≔x1−x0=x0−x−1. Potom |f(x1)−2f(x0)+f(x−1)h2−f′′(x0)|=𝒪(h2) tedy jiná centrální konečná diference aproximuje druhou derivaci s přesností druhého řádu.
Věta. Nechť f∈𝒞n+1(x0,xn). Potom pro libovolné k∈n^ existuje konečná diference pro aproximaci k-té derivace s přesností řádu n+1−k.

Numerický výpočet integrálu

Mějme reálnou integrabilní funkci f:⟨a,b⟩→ℝ. Chceme aproximovat ∫abf. To uděláme tak, že ji aproximujeme nějakou funkcí, kterou umíme zintegrovat.

Mějme body x0,⋯,xn, kde xi=x0+ih. Můžeme mít buď uzavřené formule, kde x0=a,xn=b, nebo otevřené formule, kde x0=a+h,xn=b−h.

Co takhle Lagrangeův polynom? Z toho dostaneme takzvané Newtonovy-Cotesovy formule. Ale ty se prý na přednášce nestihly, takže je přeskočíme.

Věta. Nechť f∈𝒞2(a,b),x0=a+b2,h=b−a2. Potom obdélníková formule ∫abf≈∫abL0=∫abf(x0)=2hf(x0) je aproximace s přesností třetího řádu.
Věta. Nechť f∈𝒞2(a,b),x0=a,x1=b,h=b−a. Potom lichoběžníková formule ∫abf≈∫abL1=∫ab(f(x0)+f(x1)−f(x0)x1−x0(x−x0))dx=hf(x0)+f(x1)2 je aproximace s přesností třetího řádu.

Vidíme, že přidáním bodu navíc jsme si vůbec nepomohli, akorát jsme si zkomplikovali důkaz. Obecně se dá ukázat, že formule se sudým počtem uzlů mají stejnou přesnost jako formule s lichým počtem uzlů.

Pokud bychom použili L2, dostali bychom Cavalieriho-Simpsonovu formuli, která má přesnost pátého řádu. Ta by se také dala nějak dokázat pomocí Taylora, ale důkaz je zbytečně pracný.

K integraci se také dají využít metody pro řešení diferenciálních rovnic.

Otázky ke zkoušce