AdamátorZápiskyHlášky

Metody pro řídké matice ⬩ 01MRMMI

Přednášejícíprof. Ing. Jiří Mikyška, Ph.D.
Semestrzima 2025

Na konci se bude psát zápočtový test prověřující praktické znalosti. Není potřeba umět důkazy.

  1. Úvod
    1. Reprezentace řídkých matic v počítači
      1. Souřadnicový formát
        1. Komprimované řídké řádky (CSR)
          1. Modifikované komprimované řídké řádky (MSR)
            1. Ellpack
              1. Diagonální uložení
              2. Přímé metody řešení soustav
                1. Popis struktury řídkých matic
                  1. Přeuspořádání matic
                    1. Algoritmy pro vytvoření pásu/profilu
                      1. Uspořádání minimalizující zaplněnost
                        1. Uspořádání přizpůsobující matici počítačové architektuře
                          1. Frontální metoda
                          2. Poznámky k obecnějším systémům
                            1. Indefinitní symetrické matice
                              1. Obecné regulární matice
                              2. Iterační zpřesnění
                                1. Iterační metody
                                  1. Předpodmiňování stacionárních metod
                                    1. Rychlost konvergence stacionárních metod
                                      1. Volba předpodmínění u stacionární metody
                                        1. Předpodmínění metody sdružených gradientů
                                          1. Neúplné LU rozklady

                                          Úvod

                                          Definice Matice An×n je řídká, pokud obsahuje málo nenulových prvků. Mluvíme-li o nějaké třídě matic, slovem „málo“ se většinou myslí 𝒪(n).
                                          Definice alternativní Matice An×n je řídká, pokud jsme schopni využít znalosti struktury nenulových prvků k účinnému řešení soustavy.

                                          Soustavy s řídkými maticemi často vznikají z řešení parciálních diferenciálních rovnic metodou sítí, konečných objemů nebo konečných prvků.

                                          Příklad Mějme metodu konečných diferencí pro dvourozměrnou Poissonovu rovnici:
                                          u=f,Ω=(0,1)2,u|Ω=0.
                                          Zvolíme mřížku xi,j[ihx,jhy] a aproximujeme
                                          u(xi,j)ui+1,j2ui,j+ui1,jhx2ui,j+12ui,j+ui,j1hy2.
                                          Soustavu potom můžeme zapsat jako matici, která má v každém řádku nanejvýš pět nenulových prvků. (Detaily viz NM2.)

                                          Kdybychom měli jemnost třeba 106 a chtěli to řešit naivně, na matici bychom potřebovali 8 TB paměti. Ovšem pokud ji uložíme jako řídkou, potřebujeme jen několik MB. A jelikož dokonce známe její přesný tvar, můžeme ji uložit jako implicitní a to nezabere téměř žádnou paměť.

                                          Reprezentace řídkých matic v počítači

                                          Chceme řídkou matici uložit tak, aby zabrala co nejméně paměti a efektivně se s ní počítalo.

                                          Souřadnicový formát

                                          Příklad Matici
                                          (1002034050607890010110000012)
                                          uložíme jako
                                          {123456789101112112223333445141241345345}.

                                          Nevýhoda je, že v takové reprezentaci je těžké například najít prvek na dané pozici.

                                          Komprimované řídké řádky (CSR)

                                          Příklad Matici
                                          (1002034050607890010110000012)
                                          uložíme jako
                                          {123456789101112141241345345136101213}.

                                          Oproti souřadnicovému formátu to šetří paměť. Nevýhodou ovšem je, že je obtížné přidávat nové nenulové prvky, což může být důležité třeba u metod založených na Gaussově eliminaci.

                                          Analogicky můžeme mít komprimované řídké sloupce (CSC).

                                          Modifikované komprimované řídké řádky (MSR)

                                          Motivací je, že často potřebujeme efektivnější přístup k prvkům na hlavní diagonále.

                                          Příklad Matici
                                          (1002034050607890010110000012)
                                          uložíme jako
                                          {14711122356891078101314144141453}.

                                          Kromě efektivního přístupu k diagonále má stejné výhody a nevýhody jako CSR.

                                          Ellpack

                                          Tento formát je populární na vektorových počítačích.

                                          Využívá se pro matice, kde počet nenulových prvků v jednom řádku je omezený nějakou konstantou Nd.

                                          Příklad Matici (jinou než v předchozích příkladech)
                                          (1020034050067080091000001112)
                                          uložíme jako
                                          ([123456789101112],[131242353445]).

                                          Formát je jednoduchý a většinou se s ním dobře pracuje, akorát nejde použít, když má matice nějaké husté řádky.

                                          Diagonální uložení

                                          Vhodné pro matice, které mají nenulové prvky pouze podél několika málo diagonál (například ty vzniklé z metody konečných diferencí).

                                          Prostě uložíme hodnoty těchto diagonál a k tomu si poznamenáme, kolikáté jsou.

                                          Příklad Matici
                                          (1020034050067080091000001112)
                                          uložíme jako
                                          ([0,2,1],[147101225836911]).

                                          Přímé metody řešení soustav

                                          Mějme soustavu Ax=b, kde An×n. Z NMA víme, že řešením soustavy řádkovými úpravami pro silně regulární matici vznikne rozklad A=LU, kde L je dolní trojúhelníková a U je horní trojúhelníková. Získáme-li tento rozklad, můžeme snadno řešit jakoukoli soustavu s tou samou maticí: stačí spočítat y podle Ly=b a x podle Ux=y.

                                          Je-li A pozitivně definitní, potom U=L𝖳, takže jde o Choleského rozklad: A=LL𝖳.

                                          TBD

                                          Popis struktury řídkých matic

                                          Definice Graf matice An×n je graf G(A)(V,E), kde Vn^ a
                                          E{(i,j)n^×n^|ij,Ai,j0}.
                                          Příklad
                                          A(××00×××00××××0××)
                                          %3219 4 4 3 3 4->3 1 1 4->1 3->4 2 2 3->2 2->3 2->1 1->2
                                          Příklad Je-li matice strukturálně symetrická, můžeme uvažovat neorientovaný graf:
                                          A(××0××××00××××0××)
                                          %3253 4 4 3 3 4--3 2 2 3--2 1 1 2--1 1--4

                                          Vznik zaplnění

                                          Mějme matici A, na kterou aplikujeme první krok podmaticového algoritmu. Tím se změní její zaplnění:

                                          A=(××××0××000×0×00×00××000××)A(1)=(××××0××××0××××0×××××000××).
                                          %3281 1 1 2 2 1--2 3 3 1--3 4 4 1--4 2--3 3--4 4--2 5 5 4--5

                                          Obecně to funguje tak, že v k-tém kroku se všechny sousední vrcholy k propojí do kliky. To je formálně vyjádřeno v následujícím lemmatu:

                                          Lemma o zaplnění Nechť An×n je pozitivně definitní, i,jn^,i>j,kn^. Potom
                                          Ai,j(k)0Ai,j(k1)0(Ai,k(k1)0Ak,j(k1)0).
                                          Důkaz Triviálně plyne z podmaticového algoritmu.
                                          Věta o zaplnění Nechť An×n je pozitivně definitní, i,jn^,i>j. Potom Ai,j(n1)0, právě když v G(A) existuje cesta ip1ptj taková, že pro všechna lt je pl<j. (Jinými slovy, cesta musí ležet v podgrafu indukovaném vrchholy j^.)
                                          Důkaz Indukcí podle předchozího lemmatu. TBD

                                          Eliminační strom

                                          Definice Eliminační strom matice An×n s Choleského rozkladem A=LL𝖳 je strom T=(V,ET), kde V=n^ a
                                          ET{(min{i>j|Li,j0},j)|jn^}.
                                          Jinými slovy, předkem j-tého vrcholu je vrchol s indexem odpovídajícím řádku, v němž je první nenulový prvek pod diagonálou v j-tém sloupci L.
                                          Příklad
                                          A=(×00×00×00×00××××0××00××0×)L=(×00000×00000×00×0××00××××)
                                          %3313 5 5 4 4 5->4 2 2 5->2 1 1 4->1 3 3 4->3
                                          Pozorování Kořen eliminačního stromu je prvek s nejvyšším indexem, tedy n.
                                          Věta Je-li Li,j0 pro i>j, potom i je předek j v T.
                                          Důkaz Pokud i je nejmenší i>j splňující Li,j0, potom je z definice stromu přímý předek. TBD
                                          Poznámka Implikaci nelze obrátit. V předchozím příkladě je 5 předkem 1, ale A5,1=0.
                                          Důsledek Jsou-li Ti a Tj disjunktní podstromy T s kořeny i,j, potom pro všechny rTi,sTj,r>s je Lr,s=0.
                                          Věta Nechť An×n je pozitivně definitní, i,jn^,i>j. Potom Li,j0, právě když j je předkem nějakého k takového, že Ai,k0.
                                          Důkaz TBD
                                          Definice Struktura j-tého sloupce matice A je
                                          struct(A,j){in^|ij,Ai,j0}.
                                          Věta Pro matici L v Choleského rozkladu platí
                                          struct(L,j)=struct(A,j)kT[j]struct(L,k)j1^.

                                          Přeuspořádání matic

                                          Příklad Mějme matici ve tvaru
                                          A(×××××××××00000×0×0000×00×000×000×00×0000×0×00000×).
                                          Již po jednom kroku eliminace se zaplní všechny prvky pod diagonálou:
                                          A(1)=(×××××××××00000×××0000××××000×××××00××××××0×××××××).
                                          Co kdybychom ale nejdřív permutovali řádky a sloupce? Vezměme permutační matici
                                          P(0000001010000000100000001000000010000000101000000).
                                          Potom budeme pracovat s maticí
                                          A~PAP𝖳=(×00000×0×0000×00×000×000×00×0000×0×00000×××××××××).
                                          V té se v žádném kroku nic nezaplní. Permutací jsme tedy výrazně zvýšili efektivitu. Všimněme si také, že G(A) %3327 1 1 2 2 1--2 3 3 1--3 4 4 1--4 5 5 1--5 6 6 1--6 7 7 1--7 se liší jen označením vrcholů od G(A~): %3343 7 7 2 2 7--2 3 3 7--3 4 4 7--4 5 5 7--5 6 6 7--6 1 1 7--1
                                          Pozorování Je-li A symetrická matice a P permutační matice odpovídající permutaci π, potom A~PAP𝖳 je symetrická a platíGrafy A a A~ se tedy liší jen označením vrcholů.

                                          Je otázkou, jakou permutaci zvolit, abychom si usnadnili práci co nejvíce. K tomu je několik různých přístupů.

                                          Algoritmy pro vytvoření pásu/profilu

                                          Definice Pro danou matici An×n a in^ označme
                                          fimin{jn^|Ai,j0}.
                                          Šířka profilu i-tého řádku je δiifi. Profil matice je
                                          Profil(A){(i,j)n^×n^|fiji}.
                                          Šířka pásu je δmaxiδi. Pás matice je
                                          Pás(A){(i,j)n^×n^|iδji}.
                                          Příklad %3359 1 1 2 2 1--2 3 3 2--3 6 6 2--6 4 4 3--4 7 7 3--7 8 8 4--8 8--7 7--6 5 5 6--5 5--1
                                          A(××00×000×××00×000×××00×000××000××000××000×00×××000×00×××000×00××)
                                          Profil(A):(××00×000×××00×000×××00×000××000××000××000×00×××000×00×××000×00××)
                                          Pás(A):(××00×000×××00×000×××00×000××000××000××000×00×××000×00×××000×00××)
                                          Přeuspořádáme pro vytvoření lepšího profilu a pásu: %3381 1 1 3 3 1--3 5 5 3--5 4 4 3--4 7 7 5--7 6 6 5--6 8 8 7--8 8--6 6--4 2 2 4--2 2--1
                                          A~(×××00000××0×0000×0×××0000×××0×0000×0×××0000×××0×0000×0××00000×××)
                                          Profil(A~)=Pás(A~):(×××00000××0×0000×0×××0000×××0×0000×0×××0000×××0×0000×0××00000×××)
                                          Algoritmus Cathill–McKee [CMK]
                                          1. Zvol libovolný vrchol x, přidej ho do permutace a nastav L0{x},k0.
                                          2. Dokud j=0kLjV(G(A)):
                                            1. Lk+1Adj(Lk)j=0kLk.
                                            2. Přidej do permutace všechny vrcholy Lk+1.
                                            3. kk+1.
                                          Příklad %3403 cluster2 L₂ cluster3 L₃ cluster1 L₁ cluster0 L₀ cluster5 L₅ cluster4 L₄ cluster6 L₆ 1 1 2 2 1--2 3 3 1--3 5 5 2--5 3--5 4 4 3--4 6 6 5--6 7 7 5--7 4--6 8 8 6--8 7--8 9 9 7--9 11 11 8--11 9--11 10 10 9--10 12 12 9--12 10--11 13 13 10--13 12--13
                                          A~=(×××0000000000××00×00000000×0×××0000000000××0×00000000××0×××000000000×××0×000000000×0×××000000000×××00×00000000×0××××000000000××00×0000000××0××000000000×0×××000000000×0××)
                                          Všimněme si, že tato matice má oproti jiným možným permutacím hodně hezký profil a pás.

                                          Aby vznikl úzký pás, chceme mít hodně malých úrovní. Jako počáteční vrchol je tedy vhodné zvolit jeden z periferních vrcholů – těch, u kterých se nabývá maximální vzdálenosti mezi dvěma vrcholy (tedy průměru grafu). Ovšem hledání takových vrcholů je moc náročné (Θ(n3)), takže se většinou hledá aproximace – pseudoperiferní vrcholy.

                                          Pro hledání pseudoperiferních vrcholů můžeme využít GPS algoritmus. Zvolíme libovolný počáteční vrchol a pomocí CMK algoritmu k němu najdeme nějaký koncový vrchol (vrchol z poslední vrstvy). Ten si zvolíme jako nový počáteční vrchol a opakujeme. Zjevně se v žádném kroku nesníží vzdálenost, takže můžeme opakovat, až se ustálí.

                                          Nápříklad v obdélníkové síti, začneme-li někde uprostřed, již v prvním kroku se dostaneme do rohu a v druhém kroku do opačného grafu, což nám dá periferní vrcholy.

                                          Někdy se taky v CMK vyplatí číslovat opačně, čímž vznikne RCM (Reverse Cathill-McKee).

                                          Uspořádání minimalizující zaplněnost

                                          Chceme najít permutační matici P takovou, že |struct(LPAP𝖳)| je minimální.

                                          Není známý efektivní algoritmus, který by vždy nalezl optimální řešení.

                                          Algoritmus minimálního stupně
                                          1. G0G(A),A0A.
                                          2. Pro každé i=1,,n:
                                            1. V Gi1 najdi vrchol s nejmenším stupněm a očísluj ho i.
                                            2. Odeliminuj i z Gi1, čímž vznikne Gi.
                                          Myšlenka je, že vrchol s nejmenším stupněm většinou způsobí nejmenší zaplnění.
                                          Příklad Mějme matici s následujícím grafem: %3443 9 10 9--10 8 9--8 7 9--7 8--10 1 8--1 2 8--2 6 8--6 5 7--5 6--7 3 6--3 4 6--4 Vrcholy budeme eliminovat například v tomto pořadí, čímž vznikne jen jedna nová hrana: %3509 9 9 10 10 9--10 8 8 9--8 7 7 9--7 8--10 1 1 8--1 2 2 8--2 6 6 8--6 7--8 5 5 7--5 6--7 3 3 6--3 4 4 6--4
                                          Poznámka Existuje varianta zvaná aproximovaný minimální stupeň, která nepočítá stupně vrcholů, ale pouze je odhaduje.

                                          Uspořádání přizpůsobující matici počítačové architektuře

                                          Máme paralelní počítač a chceme vrcholy eliminovat v takovém pořadí, aby se to dalo dobře paralelizovat.

                                          Mějme graf, který se po odstranění nějaké malé podmnožiny vrcholů (separátoru S) rozdělí na dvě podobně velké komponenty C1 a C2. Potom coloki, co budeme dělat s jednou z komponent, ovlivní jen tuto komponentu a separátor. Pro paralelizaci se tedy vyplatí očíslovat vrcholy v pořadí C1C2S, takže C1 a C2 potom můžeme eliminovat paralelně.

                                          Rozdělování můžeme rekurzivně opakovat, dokud jsou komponenty dostatečně velké, aby se to vyplatilo. Tomu se říká metoda vnořených řezů (nested dissection method).

                                          Frontální metoda

                                          Místo abychom uspořádání stanovili předem, budeme ho hledat dynamicky za běhu eliminace.

                                          V každém kroku přehodíme řádky a sloupce tak, aby nenulové prvky šly co nejblíž k diagonále.

                                          Často tím vzniknou malé husté podmatice, které můžeme řešit standardními metodami.

                                          Nevýhoda je, že permutování za běhu může být náročné.

                                          Výhoda je, že můžeme konstruovat Choleského rozklad matice, i když ji ještě nemáme celou spočtenou. To se může vyplatit například u metody konečných prvků, kde počítání matice je náročné.

                                          Poznámky k obecnějším systémům

                                          Zatím jsme se zabývali metodami pro pozitivně definitní matice. Jak se tyto poznatky dají zobecnit na jiné třídy matic?

                                          Indefinitní symetrické matice

                                          Příklad Mějme symetrickou indefinitní matici (0110). Kdybychom se pokoušeli spočítat Choleského rozklad, narazili bychom na to, že máme dělit nulou. Ani žádná symetrická permutace nám s tím nepomůže. Mohli bychom použít asymetrickou permutaci, ale tím bychom obecně ztratili symetrii matice.

                                          Symetrické indefinitní matice v praxi vznikají při použití smíšené formulace metody konečných prvků na eliptickou úlohu druhého řádu nebo také při hledání vázaných extrémů metodou Lagrangeových multiplikátorů. V obou těchto případech vznikne matice tvaru A=(BCC𝖳0), kde Bm×m je pozitivně definitní, Cm×(nm),mnm,h(C)=nm. Soustava je tedy ve tvaru

                                          Bx+Cy=b1,C𝖳x+Cy=b2.

                                          Jelikož B je pozitivně definitní, můžeme najít její Choleského rozklad B=LL𝖳. Podle první rovnice je x=B1(b1Cy). Dosazením do druhé rovnice máme

                                          C𝖳B1(b1Cy)=b2;
                                          C𝖳B1CSy=b2+C𝖳B1b1,

                                          kde S(nm)×(nm) je Schurův doplněk. Dokážeme, že S je pozitivně definitní. Pro yms{0} je

                                          y|Sy=C𝖳B1Cy|y=B1Cy|Cy=L𝖳L1Cy|Cy=L1Cy|L1Cy=L1Cy2>0.

                                          Soustavu s maticí S tedy můžeme řešit Choleského rozkladem. Akorát je problém v tom, že může být hustá, i když A je řídká. Vyplatí se to tedy, jenom když je malá. V opačném případě je možné to nějak prokletě zkombinovat s iterační metodou (typicky konjugované gradienty). Potom nemusíme S explicitně sestavovat, ale stačí s ní umět násobit vektory. K tomu nám stačí na vektor postupně aplikovat C,L1,L𝖳,C𝖳.

                                          Obecné regulární matice

                                          U matice, která není symetrická, nemáme Choleského rozklad, ale jen LU rozklad. Ten navíc nnexistuje, když matice není silně regulární; v takovém případě ještě navíc potřebujeme pivotaci. Pivotace by ideálně neměla způsobit velké zaplnění, což je ale často v rozporu s požadavky výše uvedených metod. Navíc výběr pivota obvyklým způsobem závisí na numerických hodnotách, takže není možné analyzovat strukturu předem.

                                          Místo pivotace za běhu můžeme zkusit najít takovou permutaci, která přesune absolutně velké prvky na diagonálu.

                                          Příklad Mějme matici ve tvaru
                                          (×00000××0000000×0000000×0000000×0000000×0000000××).
                                          Vytvoříme k ní bipartitní graf, kde budeme mít zvlášť vrcholy pro řádky a pro sloupce. %3579 1 1 1′ 1′ 1--1′ 7′ 7′ 1--7′ 2 2 2--1′ 3 3 2′ 2′ 3--2′ 4 4 3′ 3′ 4--3′ 5 5 4′ 4′ 5--4′ 6 6 5′ 5′ 6--5′ 7 7 6′ 6′ 7--6′ 7--7′ Přesunutí nenulových prvků na diagonálu odpovídá maximálnímu párování v tomto grafu. Přitom hrany budou ohodnocené prvky matice a váhu párování budeme počítat jako součin vah hran. Problém je, že to může způsobit velké zaplnění.
                                          Věta Dokážeme-li matici dostat do blokově trojúhelníkového tvaru, stačí umět rozložit diagonální bloky.
                                          Důkaz Nechť A=(A0BC) (pro více než dva bloky použijeme indukci). Rozložíme ALDU,CL~D~U~. Pokusíme se najít rozklad A:
                                          A=(L0L^L~)(D00D~)(U00U~)=(LDU0L^DUL~D~U~).
                                          Stačí tedy zvolit L^BU1D1.

                                          K nalezení permutace řádků a sloupců, které nám umožní matici převést na blokově trojúhelníkový tvar, použijeme orientovaný graf matice. Najdeme silně souvislé komponenty, topologicky je seřadíme a z každé uděláme blok, přičemž je řadíme v opačném pořadí.

                                          Příklad Pro matici s grafem %3599 cluster2 C₂ cluster3 C₃ cluster1 C₁ a b a->b d a->d c b->c c->a f c->f h c->h e d->e f->d f->h g f->g i h->i e->f k e->k g->e j i->j i->k m i->m j->g l k->l m->k l->m permutujeme vrcholy tak, aby ty v C3 byly v prvním bloku, ty v C2 v druhém bloku a ty v C1 ve třetím bloku.

                                          K rozkladu jednotlivých bloků se dá použít částečná pivotace (pivota hledáme jen v příslušném řádku/sloupci) nebo úplná pivotace (pivota hledáme v celé podmatici).

                                          TBD

                                          Iterační zpřesnění

                                          Ke zpřesnění výsledku přímé metody můžeme využít iterační metodu. Předpokládejme, že známe A=LU a x je aproximace řešení Ax=b získaná přímou metodou: Ly=bUx=y. Kvůli počítačové aritmetice nám ale nemusí vyjít přesně. Můžeme ho zkusit vylepšit tím, že spočteme rbAx, vyřešíme pomocí LU rozkladu soustavu Az=r a změníme xx+z. Toto opakujeme, až bude zx<ε.

                                          Pokud nechceme počítat všechno ve dvojité přesnosti, stačí v ní spočítat jen r a vše ostatní v jednoduché. Tím většinou dostaneme dobrou aproximaci i po jednom kroku.

                                          Iterační metody

                                          Z 01NMA známe stacionární metody: prostá iterace, Jacobi, Gauss-Seidel, SOR. Z 01PNL známe nestacionární krylovské metody: konjugované gradienty, minimální reziduum, zobecněné minimální reziduum, bikonjugované gradienty, kvadratické minimální reziduum.

                                          Všechny tyto metody rychle konvergují, pokud A𝐈. Když to neplatí, můžeme si soustavu upravit levým předpodmíněním

                                          M1AX=M1b

                                          nebo pravým předpodmíněním

                                          AM1y=b,M1y=x.

                                          Matici M potřebujeme zvolit tak, aby bylo M1A𝐈 nebo AM1𝐈 a zároveň šla snadno najít.

                                          Je-li A pozitivně definitní, musíme si dávat pozor, aby se to předpodmíněním neporušilo. Toho docílíme tím, že předpodmíníme oboustranně: máme-li Choleského rozklad M=LL𝖳, potom budeme řešit

                                          L1AL𝖳y=L1b,L𝖳y=x.

                                          Předpodmiňování stacionárních metod

                                          Nechť A=MN, kde M je regulární matice. Potom

                                          Ax=bMx=Nx+b.

                                          Budeme hledat posloupnost (xk) takovou, že Mxk+1=Nxk+b. Z toho máme

                                          xk+1=M1Nxk+M1b=xk+M1(bAxk)rk,

                                          kde rk je reziduum k-té aproximace. Stačí tedy vždy spočítat reziduum rbAx, spočítat opravu Mz=r a opravit xx+z. Tato iterace konverguje pro ρ(M1N)=ρ(𝐈M1A)<1.

                                          Definice Matice M,N tvoří regulární rozklad matice A, pokud A=MN, M je regulární a M1,N0.
                                          Věta Nechť A=MN je regulární rozklad. Označme GM1N=𝐈M1A0. Potom ρ(G)<1, právě když A je regulární a A10.
                                          Důkaz
                                          (⇒)
                                          Z předpokladu ρ(G)<1 je 𝐈G regulární a platí
                                          (𝐈G)1=k=0Gk0.
                                          Díky tomu A=M(𝐈G) je regulární a A1=(𝐈G)1M10.
                                          (⇐)
                                          Podle předpokladu je A=M(𝐈G) regulární, takže i 𝐈G je regulární. Jelikož G0, podle Perronovy–Frobeniovy věty existuje nenulový vektor x0 takový, že Gx=ρ(G)x. Potom
                                          0A1Nx=(𝐈G)1Gx=ρ(G)1ρ(G)x.
                                          Aby tato nerovnost mohla platit, musí být 0ρ(G)<1.
                                          Definice Regulární matice A je M-matice, pokud
                                          1. in^:Ai,i>0;
                                          2. i,jn^,ij:Ai,j0;
                                          3. A10.
                                          Poznámka Podle předchozí věty je ρ(G) konvergentní, pokud A je M-matice.
                                          Poznámka M-matice často vznikají například z metody konečných diferencí.

                                          Rychlost konvergence stacionárních metod

                                          Nechť A=MN je regulární rozklad a GM1N. Máme aproximaci xk+1=Gxk+M1b a chceme určit, jak se liší od přesného řešení x=Gx+M1b. Označme ekxkx. Podle předpisu iterace je ek+1=GxkGx=Gek. Rozvinutím dostáváme

                                          ek=Gek1=G2ek2==Gke0,

                                          kde e0 je počáteční chyba. Z toho plyne odhad ekGe0. Podle nějaké věty je limnGnn=ρ(G). Když to rozepíšeme z definice, máme

                                          ε>0,n0,n>n0:|Gnnρ(G)|<ε.

                                          Jednoduchými úpravami dostaneme Gn(ρ(G)+ε)n. Pokud ρ(G)<1, můžeme zvolit ε takové, aby ρ(G)+ε<1, takže od nějakého členu dál bude chyba exponenciálně klesat. Nevíme ovšem, jak se to bude chovat na začátku. Konvergence dokonce ani nemusí být monotónní, tedy může se stát, že na začátku bude chyba růst.

                                          Speciálně je-li G normální, máme ρ(G)=G2, takže v tomto případě máme monotónní konvergenci zaručenou. Počet iterací potřebný k dosažení chyby nanejvýš δ v poměru k počáteční chybě je potom logG2δ.

                                          Volba předpodmínění u stacionární metody

                                          Vezmeme-li M𝐈, máme metodu prosté iterace, která konverguje, pokud ρ(𝐈A)<1. Ideálně ρ(𝐈A)1, tedy vlastní čísla A jsou všechna blízká 1. Pokud tomu tak není, musíme předpodmiňovat.

                                          Richardsonovo předpodmínění
                                          M1ω𝐈, kde ω>0 je relaxační parametr. Potom o konvergenci rozhoduje ρ(𝐈ωA). Často je možné vhodně zvolit ω tak, aby konvergence fungovala, i když může být pomalá.
                                          Jacobiho předpodmínění
                                          MD, kde D je diagonální matice se stejnou diagonálou jako A. O konvergenci potom rozhoduje ρ(𝐈D1A). O tom obecně nemůžeme říct, ale občas se to hodí a je to hodně jednoduché na výpočet.
                                          Gaussovo–Seidelovo předpodmínění
                                          MDL, kde L je dolní trojúhelník (i s diagonálou) A. M1 potom získáme řešením soustavy s trojúhelníkovou maticí, což se taky počítá snadno, ale na rozdíl od Jacobiho nejde snadno paralelizovat.
                                          SOR metoda
                                          M1ωDL, kde ω>0 je relaxační parametr. Ten volíme tak, aby ρ(𝐈(1ωDL)1A) bylo minimální. Ještě se dostaneme k tomu, jak to udělat.

                                          Chceme-li předpodmínění použít u krylovských metod pracujících se symetrickou maticí (např. metoda sdružených gradientů), musíme ho zvolit tak, aby se symetrie zachovala. U Richardsona nebo Jacobiho to není problém, ale SOR musíme upravit, čímž vznikne SSOR (Symmetric SOR). Definujme M11ωDL,M21ωDU, kde U je horní trojúhelníková část A. Potom budeme střídavě řešit

                                          M1xk+12=N1xk+b,
                                          M2xk+1=N1xk+12+b,

                                          kde N1,2M1,2A. Ve výsledku máme

                                          M=ω2ω(1ωDL)D1(1ωDU).

                                          Předpodmínění metody sdružených gradientů

                                          Je-li M symetrická, existuje Choleského rozklad M=LL𝖳. Potom můžeme metodu sdružených gradientů aplikovat na rovnici

                                          L1AL𝖳yx=L1b.

                                          Mějme pozitivně definitní matici An×n a počáteční reziduum r0bAx0. Vyřešíme si rovnici Mz0=r0. Následně v metodě budeme na některých místech místo ri používat zi a po každém kroku si dopočteme další zi. Rychlost konvergence bude

                                          xnxA2(ϰ(A)1ϰ(A)+1)nx0xA.

                                          Všimněme si, že to vždy bude konvergovat, i když pro velké ϰ(A) hodně pomalu.

                                          Příklad Mějme pozitivně definitní matici velikosti n×n pocházející z diskretizace diferenciální rovnice u(x)=f(x) ve tvaru
                                          A=(210010010012).
                                          Jak jsme si možná dokázali na 01NM2, vlastní čísla jsou ve tvaru
                                          λk=4sin2kπ2(n+1),kn^.
                                          Speciálně λ1 je o maličko větší než 0 a λn je o maličko menší než 4. Pro metodu prosté iterace máme ρ(𝐈A)=|1λn|3, takže nebude konvergovat. Richardsonovo předpodmínění konverguje pro ω12. Jacobiho vychází stejně jako Richardsonovo pro ω=12, konkrétně
                                          ρ(𝐈12A)=12sin2π2(n+1)=12sin2(π2h)=1𝒪(h2).
                                          U Gausse–Seidela se nějak dá odvodit, že rychlost konvergence je stejná jako u Jacobiho. Co se týče SOR metody, dá se dokázat, že optimální relaxační parametr je
                                          ω21+1μ0,μ0ρ(𝐈D1A)=12sin2(π2h).
                                          Po dlouhých úpravách z toho vyjde ρ()=1𝒪(h), což je lepší než u Gausse–Seidela. Proto je SOR tak populární. Dále můžeme použít metodu sdružených gradientů, u které nás zajímá podmíněnost:
                                          ϰ(A)=λnλ1=4sin2(π2h)=𝒪(h2),
                                          ρ=ϰ(A)1ϰ(A)+1==1𝒪(h).
                                          Takže i bez předpodmínění je to stejně dobré jako SOR s optimálním předpodmíněním.

                                          Neúplné LU rozklady

                                          Při úplném LU rozkladu vzniká hodně zaplnění. Místo toho můžeme spočítat jen nějakou jeho aproximaci a tu následně použít pro předpodmínění.

                                          Klasický LU rozklad (řádková varianta) vypadá takto:

                                          1. Pro každé i=2,,n:
                                            1. Pro každé k=1,,i1:
                                              1. ai,kai,kak,k
                                              2. Pro každé j=k+1,,n:
                                                1. ai,lai,jai,kak,j

                                          Neúplný LU rozklad bude vypadat stejně, ale s tím, že přepisujeme jen některé prvky. Základní varianta je ILU(0), kde přepisujeme jen ty prvky, které už jsou nenulové. Obecněji si můžeme předepsat množinu pozic P, u kterých ignorujeme zaplnění. Jelikož diagonální pozice jsou důležité, do P je nikdy nebudeme zahrnovat, tedy

                                          P{(i,j)n^×n^|ij}.
                                          Věta Je-li A M-matice, potom algoritmus ILU(P) neselže a zkonstruuje neúplný LU rozklad A=LUR, který je regulární (tedy metoda prosté iterace bude konvergovat). Přitom matice R odpovídá zanedbaným prvkům.
                                          Poznámka ILU(0) je speciální případ ILU(P), kde
                                          P{(i,j)n^×n^|Ai,j0}.

                                          Chceme-li přesnější neúplný LU rozklad, můžeme připustit i nějaké větší zaplnění.

                                          Definice Úroveň zaplnění složky Ai,j je číslo leveli,j definované následovně:
                                          • Je-li Ai,j0, potom leveli,j0;
                                          • Je-li Ai,j=0 a na pozici (i,j) vzniká zaplnění součinem prvků Ai,k a Ak,j, potom leveli,jleveli,k+levelk,j+1.
                                          Definice Metoda ILU(k) je ILU(Pk), kde
                                          Pk{(i,j)n^×n^|leveli,j>k}.