[REKLAMA]

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. Hausholderova reflekční matice je matice ve tvaru 𝐇w𝐈2ww*
Věta. Hausholderova reflekční matice je hermitovská a unitární.
Věta. Když do Hausholderovy 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𝐀𝐇we1=λe1)
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𝐀𝐀12x2 𝐁𝐀𝐀12𝐁𝐀122
Věta. 𝐀nn𝟎ρ(𝐀)<1
Věta. 𝐀nn𝟎(norma)(𝐀<1)
Věta. Pro libovolnou maticovou normu platí ρ(𝐀)𝐀.
Věta. Řada n=0𝐀n konverguje právě tehdy, pokud 𝐀n0. Jejím součtem je potom (𝐈𝐀)1.
Věta. Pokud 𝐀<1, potom (𝐈𝐀)1n=0m𝐀nAm+11A
[REKLAMA]

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 δxxκ(𝐀)δbb 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)xC(F,d)x(k1)xr

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 (1Ai,iAi+1,i1An,i1)(1Aj,jAj+1,j1An,j1) roven „sjednocení“ obou matic.

Z toho nám vyjde vztah Li,j=Ai,j(j1). 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,jk=1j1Li,kUk,j,ij Ui,j=Ai,jk=1i1Li,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,,μn1 její horní diagonálu a ρ1,,ρn prvky upraveného b, máme vztahy

μ1=b1a1 ρ1=d1a1 μk=bkakckμk1 ρk=dkckρk1akckμk1 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𝐀r1𝐂r1𝐁1𝐁r1𝐀r)(x1xr1xr)=(d1dr1dr)

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ě:

(𝐈𝐀11𝐂1𝐈𝐀r11𝐂r1𝐒)(x1xr1xr)=(𝐀11d1𝐀r1dr1s)

kde 𝐒𝐀ri=1r1𝐁i𝐀i1𝐂i je Schurův doplněk a sdri=1r1𝐁i𝐀i1di.

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

xr=𝐒1s xi=𝐀r11(dr1𝐂r1xr)

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.

[REKLAMA]

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 limk0i=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=𝐀1r(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*(𝐈𝐁)1x(k1)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)+c1𝐁) 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 ωopt21+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).

[REKLAMA]

Vlastní čísla

Věta. Mějme polynom p. Nalezení jeho kořenů je ekvivalentní nalezení vlastních čísel Frobeniovy matice: (pn1pnpn2pnp1pnp0pn100001000010)
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{|λ^λ||λσ(𝐀)}r2x^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,,r0, 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,e2,,en:

𝐏=(x1x21xn1) 𝐏1=(1x1x2x11xnx11) 𝐏1𝐀𝐏=(λqT0𝐁)

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

z1qTzμλ

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

[REKLAMA]

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ší.

[REKLAMA]

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~ixij=1i1(xiqj)qj qiq~iq~i2

Když z těchto vzorců vyjádříme xi pomocí qj, 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 qi nepočítáme skalární součin s xi, ale s již napočtenou verzí qi, 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𝐀=𝐀2ww*𝐀=𝐀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čí n1 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=1n1𝐆n1(k) je opět matice v Hessenbergově tvaru.
[REKLAMA]

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:

α=xf(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)||xV}K<1. Potom posloupnost xkφk(x) konverguje k α pro x0V.
Definice. Iterativní metoda daná vztahem xkφk(x)řád konvergence m, pokud pro nějakou konstantu C platí |xk+1α|C|xkα|m.
Věta. Nechť φ𝒞m(Hα) a (im1^)(φ(i)(α)=0). Potom (xkHα)(ξα,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)xxf(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 xx, dostáváme Newtonovu metodu:

φ(x)xf(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𝐉f1(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,vH)(ξH)(f(u)f(v)=f(ξ)(uv))
Věta. Nechť f𝒞1(Ha) a 𝐉f(a) je regulární. Potom existuje takové BaHa, že zobecněná Newtonova metoda konverguje na Ba rychlostí prvního řádu.
[REKLAMA]

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

(x00x0nxn0xnn)(a0an)=(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

lij=0jinxxjxixj

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ě n1, který souhlasí v n1 bodech. Pomocí něj najdeme polynom stupně n, který souhlasí ve všech n bodech. Budeme ho hledat ve tvaru:

Ln(x)Ln1(x)+cni=0n1(xxi)

Snadno si vyjádříme:

cnf(xn)Ln1(xn)i=0n1(xnxi)

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

Ln(x)=i=0ncij=0i1(xxj)

Z toho dostaneme lineární soustavu

(10001(x1x0)001(x2x0)(x2x0)(x2x1)01(xnx0)(xnx0)(xnx1)i=0n1(xnxi))(c0cn)=(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+k1]xi+kxi

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ť IxDf 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(xxi) 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=0i1(xxj) 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 limxx0|f(x)g(x)||xx0|r=C>0

Pro Lagrangeův polynom máme

limxx0|f(x)Ln(x)||xx0|=limxx0|f(n+1)(ξ)(n+1)!ωn(x)||xx0|=limxx0|f(n+1)(ξ)(n+1)!xx0i=0n(xxi)|=|f(n+1)(ξ)(n+1)!i=1n(x0xi)|

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).

[REKLAMA]

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)=ij1xxikjxxkxjxk 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)))(ki)ω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=0ni2=0i2i1nik=0iki1ikik1nj=0ji1jikn(xxj)

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 xix0+ih,h{m1,,m2}. Nechť nm1+m2,fif(xi). Zkonstruujeme Lagrangeův polynom. Pokud vezmeme xx0+th, můžeme ho vyjádřit jako

Ln(t)i=m1m2fili(t) li(t)j=m1jim2tjti

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

ωn(k)(t)=hn+1ii1=m1m2i2=m1i2i1m2ik=m1iki1ikik1m2j=m1ji1jikm2(tj)

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

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

Věta. Nechť f𝒞3x0,x1,hx1x0. Potom |f(x1)f(x0)hf(x0)|=𝒪(h) tedy dopředná konečná diference aproximuje derivaci s přesností prvního řádu.
Věta. Nechť f𝒞4x1,x1,hx1x0=x0x1. Potom |f(x1)f(x1)2hf(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𝒞2x0,x1,hx1x0. Potom |f(x1)f(x0)hf(x0)|=𝒪(h) tedy dopředná konečná diference aproximuje derivaci s přesností prvního řádu.
Věta. Nechť f𝒞3x1,x1,hx1x0=x0x1. Potom |f(x1)f(x1)2hf(x0)|=𝒪(h2) tedy centrální konečná diference aproximuje derivaci s přesností druhého řádu.
Věta. Nechť f𝒞3x1,x1,hx1x0=x0x1. Potom |f(x1)2f(x0)+f(x1)h2f(x0)|=𝒪(h) tedy jiná centrální konečná diference aproximuje druhou derivaci s přesností prvního řádu.
Věta. Nechť f𝒞4x1,x1,hx1x0=x0x1. Potom |f(x1)2f(x0)+f(x1)h2f(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é kn^ existuje konečná diference pro aproximaci k-té derivace s přesností řádu n+1k.

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=bh.

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=ba2. Potom obdélníková formule abfabL0=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=ba. Potom lichoběžníková formule abfabL1=ab(f(x0)+f(x1)f(x0)x1x0(xx0))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

[REKLAMA]