• Nebyly nalezeny žádné výsledky

Poznámky k předmětu Numerická lineární algebra I.

N/A
N/A
Protected

Academic year: 2022

Podíl "Poznámky k předmětu Numerická lineární algebra I."

Copied!
22
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

Poznámky k předmětu Numerická lineární algebra I.

Michal Merta

Katedra aplikované matematiky, VŠB-Technická univerzita Ostrava, e-mail:

michal.merta@vsb.cz

(2)

1 Iterační metody pro řešení soustav lineárních rovnic

Přímé metody řešení soustav lineárních rovnic (LU, LDLT, Choleského faktor- izace atd.) vyžadují O(n3)operací a velikost soustavy, kterou jimi dokážeme vyřešit, je značně omezená. V případě husté matice A ∈ Rn×n se přibližná velikost řešitelné soustavy historicky vyvíjela takto:

• 1950: n= 20(Wilkinson)

• 1965: n= 200(Forsythe a Moler)

• 1980: n= 2000(LINPACK)

• 1995: n= 20000(LAPACK)

• 2010: n= 200000(HDSS)

Pracujeme-li s řídkými maticemi, jsme schopni řešit i systémy s mnohem větší dimenzí (miliony, desítky milionů neznámých) – zejména, pokud je řešič schopen pracovat paralelně. V případě použítí přímého řešiče na řídkou matici však může dojít k jejímu zaplnění. Např. využitím prvního řádku následující matice k vynulování prvního sloupce dojde k zaplnění všech ostatních prvků v matici:

× × × × ×

× × 0 0 0

× 0 × 0 0

× 0 0 × 0

× 0 0 0 ×

× × × × ×

0 × × × ×

0 × × × ×

0 × × × ×

0 × × × ×

Tento problém lze částečně řešit vhodnou pivotizací.

Mezi další nevýhody přímých řešičů patří:

• Známe-li již přibližné řešení soustavy, nedokážeme tuto znalost využít ke snížení celkového počtu operací a zkrácení doby výpočtu.

• Naopak, pokud nám postačuje znalost pouze přibližného řešení, nemůžeme výpočet pomocí přímého řešiče ukončit předčasně.

Alternativou k přímým řešičům jsou iterační řešiče, které generují posloup- nost přibližných řešení {xk} a pracují téměř výhradně s násobením matice- vektor, které má náročnostO(n2). Důležitou vlastností každé iterační metody je rychlost konvergence posloupnosti{xk} k řešení. Může se totiž stát, že pro některé maticeAiterační metoda konverguje velmi pomalu nebo vůbec.

1.1 Lineární iterační metody

Prvním typem iteračních metod, kterým se budeme zabývat, jsou tzv. lineární iterační metody. Ty hledají posloupnost řešení soustavy Ax = b s regulární maticí ve tvaru

xk+1:=Mxk+Nb, (1.1)

(3)

kdeM aNjsou nějaké matice odpovídajících rozměrů1.

Definice Lineární iterační metodu nazveme konzistentní, řeší-li rovniciMx+ Nb=xprávě jeden vektor x=A−1b. Je možné ukázat, že metoda je konzis- tentní právě tehdy, je-li splněnoM=I−NA.

Definice Iterační metodu nazveme konvergentní platí-li∀b,∀x0 :xk →x= A−1bprok→ ∞. Je možné ukázat, že metoda je konvergentní, právě tehdy, je-li splněnokMk<1, kdekMk= maxv∈Rn,v6=okMvkkvkv

v je maticová norma indukovaná vektorovou normou.

Při odvozování následujících iteračních metod budeme využívat rozkladu maticeAna součet dolní trojúhelníkové, diagonální a horní trojúhelníhové mat- ice, tedyA=L+D+U (pozor, nepleťte si maticeL,D,U se stejně nazvanými maticemi, které se vyskytovaly u přímých řešičů). Např. matici

A=

2 1 0 1 2 1 0 1 2

rozložíme na

L=

0 0 0 1 0 0 0 1 0

,D=

2 0 0 0 2 0 0 0 2

,U=

0 1 0 0 0 1 0 0 0

.

1.1.1 Jacobiho metoda

Vyjděme z rovniceAx=b. DosazenímA=L+D+Udostaneme (L+D+U)x=b.

Roznásobme a přezávorkujme výraz na levé straně Dx+ (L+U)x=b

Jacobiho metodu odvodíme tak, že přidáme indexy k+ 1 a k k příslušným vektorůmx

Dxk+1+ (L+U)xk=b.

Osamostatněnímxk+1 dostaneme předpis prok+ 1 aproximaci vektorux xk+1:=D−1(b−(L+U)xk) =−D−1(L+U)

| {z }

=M

xk+D−1

|{z}

=N

b.

1Indexkoznačuje číslo aktuální iterace.

(4)

Jednotlivé složky vektoruxk+1 můžeme vyjádřit jako

(xk+1)i:= 1 ai,i

bi

n

X

j=1,j6=i

ai,j(xk)j

= (1.2)

= 1 ai,i

bi

i−1

X

j=1

ai,j(xk)j

n

X

j=i+1

ai,j(xk)j

 (1.3)

Pro snadnější a přehlednější zápis budemei-tý prvek vektoruxk+1 také značit jako xk+1i (horní index tedy označuje číslo iterace, dolní index značí pořadí prvku ve vektoru).

Konzistence metody vyplývá z jejího odvození, můžeme však ještě ověřit, že M=I−NA. V případě Jacobiho metody jeM=−D−1(L+U)a N=D−1 (viz výše). Platí tedy

I−NA=I−D−1A=I−D−1(L+D+U) =

=I−D−1(L+U)−D−1D=−D−1(L+U) =M.

Metoda je tedy konzistentní.

Lze dokázat, že metoda je konvergentní právě tehdy, kdyžkMk=kD−1(L+ U)k<1. To splňují např. striktně diagonálně dominantní matice (tedy matice, pro které platí∀i:|ai,i|>Pn

j=1,j6=i|ai,j|). Konvergenci metody pro diagonálně dominantní matice se dá poměrně snadno dokázat. Vyjděme ze vztahu proi-tý prvek aproximovaného vektoru v iteracik+ 1:

xk+1i = 1 ai,i

bi

n

X

j=1,j6=i

ai,jxkj

.

Jelikož je metoda konzistentní, musí tuto rovnost splňovat i prvky vektoru přes- ného řešeníx:

xi = 1 ai,i

bi

n

X

j=1,j6=i

ai,jxj

. Odečteme-li od první rovnosti druhou, dostaneme

xk+1i −xi

| {z }

=ek+1i

=− 1 ai,i

n

X

j=1,j6=i

ai,j(xkj−xj

| {z }

=eki

),

(5)

kde ek je vektor chyby v k-tém kroku. Chybu v kroku k+ 1 můžeme tedy odhadnout pomocí vlastností striktně diagonálně dominantní matice:

|ek+1i | ≤ 1

|ai,i|

n

X

j=1,j6=i

|ai,j||ekj| ≤ 1

|ai,i|

n

X

j=1,j6=i

|ai,j| max

j=1,...,n,j6=i|ekj|=

= max

j=1,...,n,j6=i|ekj| 1

|ai,i|

n

X

j=1,j6=i

|ai,j|

| {z }

<1

< max

j=1,...,n,j6=i|ekj|

Každý prvek vektoru chyby v krokuk+ 1 je tedy v absolutní hodnotě menší než maximální prvek vektoru chyby v předchozím kroku. Vektor chyby tedy konverguje k nulovému vektoru.

1.1.2 Gaussova-Seidelova metoda

Všimněme si, že při výpočtuxk+1i využíváme v suměPi−1

j=1ai,jxkjve výrazu (1.3) pouze prvkyxk1, . . . , xki−1. Tyto prvky tedy můžeme nahradit již vypočtenými prvky aktuálními iterace xk+11 , . . . , xk+1i−1. Dostaneme tak předpis Gaussovy- Seidelovy metody:

xk+1i := 1 ai,i

bi

i−1

X

j=1

ai,jxk+1j

n

X

j=i+1

ai,jxkj

 (1.4)

Podobně jako v předchozím případě můžeme metodu odvodit, nahradíme-li v soustavě Ax = b matici A součtem L+D+U. Tentokrát ovšem vektor s indexemk+ 1ponecháme u součtuL+D

(L+D)xk+1=b−Uxk, (1.5)

tedy

xk+1=−(L+D)−1U

| {z }

=M

xk+ (L+D)−1

| {z }

=N

b.

Vztah mezi maticovým zápisem a zápisem po prvcích (1.4) je nejlépe vidět na rovnosti (1.5). Jedná se o soustavu rovnic s dolní trojúhelníkovou maticíL+D, vektorem pravé strany b−Uxk a neznámým vektorem xk+1. Všimněte si, že výraz (1.4) pak přesně odpovídá algoritmu pro dopřednou substituci pro řešení takovéto soustavy.

Podobně jako v případě Jacobiho metody můžeme ověřit, zda je metoda konzistentní porovnánímI−NAaM.

I−NA=I−(L+D)−1A=I−(L+D)−1(L+D+U) =

=I−(L+D)−1(L+D)−(L+D)−1U=−(L+D)−1U=M.

Metoda je tedy konzistentní.

Metoda je konvergentní, právě když k(L+D)−1Uk <1, což opět platí pro diagonálně dominantní matice.

(6)

1.1.3 Richardsonova metoda

Iterace Richardsonovy metody je dána předpisem xk+1:=xk+ωrk,

kde ω ∈ R+ a rk = b−Axk je reziduum, které určuje, jak dobře je splněna původní rovnice. Vztah mezi reziduem a chybou ek = xk −x lze odvodit přenásobením definice chyby maticíA

Aek =Axk−Ax=Axk−b=−rk. (1.6) Studujme konvergenci metody pro symetrickou pozitivně definitní maticiA. V takovém případě vlastní číslaλi a vlastní vektoryvi (tedy skaláry a vektory, pro které platíAviivi,kvk= 1) splňují

0< λ1≤λ2≤. . .≤λn

a z vlastních vektorů lze utvořit ortonormální báziRn.

Díky předchozímu poznatku můžeme reziduum vyjádřit jako lineární kombi- naci prvků báze tvořené vlastními vektory, tedyrk+1 =Pn

i=1αk+1i vi. Studujme nyní, jak se chová reziduum (a tedy i chyba) v jednotlivých iteracích. Na zák- ladě toho se později pokusíme odvodit optimální hodnotuωpro co nejrychlejší konvergenci.

n

X

i=1

αk+1i vi=rk+1 =b−Axk+1=b−A(xk

| {z }

=rk

+ωrk) =

=rk−Aωrk= (I−ωA) rk

|{z}

=Pn i=1αkivi

= (I−ωA)

n

X

i=1

αkivi=

=

n

X

i=1

αkivi

n

X

i=1

αkiω Avi

|{z}

ivi

=

n

X

i=1

αkivi

n

X

i=1

αikωλivi=

=

n

X

i=1

(1−ωλikivi.

Všimněme si, že jsme vyjádřili koeficienty rozvoje reziduark+1 v bázi {vi}ni=1 pomocí násobků koeficientů v předchozím kroku (viz podtržené části před- chozího výrazu). Koeficienty se tedy budou zmenšovat (a jednotlivé složky vektoru rezidua budou konvergovat k nule) právě tehdy, když |1−ωλi| < 1 pro všechnai= 1,2, . . . , n. Rychlost konvergence bude záviset na největší hod- notě|1−ωλi|. Shrněme tento poznatek do následující věty.

Věta Richardsonova metoda konverguje, právě když∀i∈ {1,2, . . . , n} :|1− ωλi| < 1. Konvergenční faktor ρ = maxi∈{1,2,...,n}{|1−ωλi|} určuje rychlost konvergence: krk+1k ≤ρkrkk.

(7)

1

Obrázek 1.1: Konvergenční faktor Richardsonovy metody v závislosti naω.

Čím menší bude konvergenční faktorρ= maxi∈{1,2,...,n}{|1−ωλi|}, tím rych- leji bude metoda konvergovat. Vzhledem k tomu, že vlastní čísla maticeAjsou daná, můžeme konvergenční faktor ovlivnit pouze vhodnou volbou parametru ω. Odvození ideální hodnoty ω ilustrujme na Obrázku 1.1. Jsou na něm zná- zorněny funkcef1(ω) =|1−ωλ1|afn(ω) =|1−ωλn|. Protože směrnice funkcí fi(ω) =|1−ωλi|jsou určeny vlastními čísly maticeAa ta jsou seřazena od ne- jmenšího po největší, budou grafy všech funkcífi, i= 2, . . . , n−1,ležet ”mezi”

grafyf1 afn (v šedě vyznačené oblasti). Funkci max

i∈{1,2,...,n}{|1−ωλi|}

tedy můžeme vykreslit jako červeně zvýrazněnou lomenou čáru tvořenou částí funkcef1 a částí funkcefn. Z grafu této funkce tedy rovnou můžeme odvodit:

1. Interval, ve kterém musíω ležet. Aby metoda konvergovala, musí platit ρ = maxi∈{1,2,...,n}{|1−ωλi| < 1. Červená funkce tedy musí ležet pod zakreslenou konstantní funkcíρ= 1. Levý krajní bod intervalu je 0, pravý určíme jako průsečík příslušné části funkcefn s konstantní funkcí 1:

−(1−ωλn) = 1 ⇒ ω= 2 λn

. Metoda tedy konverguje proω∈(0,2/λn).

2. Optimálníωje bod, ve kterém červeně vyznačená funkce dosahuje minima.

Tento bod dostaneme jako průsečík funkcíf1a fn: 1−ωoptλ1=−(1−ωoptλn) ⇒ ωopt= 2

λ1n

.

(8)

Zjistili jsme tedy, že nejlepší konvergence dosáhneme, zvolíme-li ωopt =

2

λ1n. Konvergenční faktor bude v tomto případě ρopt= 1−ωoptλ1= 1− 2λ1

λ1n

= λ1n−2λ1 λ1n

=

n−λ1

λn1 1 λ1

1 λ1

=

λn λ1 −1

λn

λ1 + 1 = κ(A)−1 κ(A) + 1, kdeκ(A) =λn1je číslo podmíněnosti maticeA.

Můžeme také odvodit, kolik iterací je třeba, abychom dosáhli požadované relativní změny normy rezidua. Hledáme tedyk, pro které platí

krkk

kr0k ≤ε, tedy krkk ≤εkr0k Využijme toho, žekrkk ≤ρkoptkr0ka přepišme nerovnici na

ρkoptkr0k ≤εkr0k.

Vykrácením normy a zlogaritmováním obou stran nerovnice dostanem řešení k ≥ loglogρε

opt (nezapomeňte, že protože ρopt ∈ (0,1), je třeba otočit znaménko nerovnosti).

1.1.4 Ukončovací podmínky

Při použití iteračního řešiče většinou nemáme předem zadaný počet iterací, které mají proběhnout. Chceme výpočet ukončit ve chvíli, kdy se s odhadem řešení dostaneme dostatečně blízko přesnému řešení. Vzhledem k tomu, že přesné řešení (tedy ani přesnou chybu v dané iteraci) neznáme, musíme si pomoci jinak.

Jednou z možností je ukončit cyklus ve chvíli, kdy se s novým odhadem řešení příliš nepohneme od předchozího odhadu (tzn. kxk+1−xkk< ε). Tato podmínka ale nijak nebere v potaz velikost prvků v matici soustavy a vektoru pravé strany (jiná situace nastane, pokud jsou prvky matice a vektoru v řádech tisíců, jiná pokud jsou v řádech tisícin). Proto je vhodné tuto podmínku zvolit relativně např. vzhledem k normě vektoru pravé strany (tzn. kxk+1−xkk <

kbkε, tedykxk+1−xkk/kbk< ε).

Nejčastěji se ovšem k výpočtu ukončovací podmínky používá normy vektoru reziduark+1=b−Axk+1. To nám poskytuje přirozený odhad toho, jak dobře je splněna původní rovnice. Ukončovací podmínku lze tedy volit ve tvarukb− Axk+1k < ε. Podobně jako v předchozím případě je i zde vhodnější použít relativní změnu rezidua oproti vektoru pravé strany (kb−Axk+1k/kbk < ε) nebo počátečnímu reziduu (kb−Axk+1k/kb−Ax0k< ε).

(9)

1.2 Gradientní iterační metody

Věta Řešení soustavy Ax=bse symetrickou pozitivně definitní maticíA je ekvivalentní s minimalizací kvadratické formy

f(x) = 1

2xTAx−bTx.

Důkaz Dokažme nejdříve implikaciAx=b⇒x= arg minv∈Rnf(v). Podíve- jme se, jak se změní funkční hodnota f, posuneme-li se z bodu x o nějaký nenulový vektorc:

f(p) =f(x+c) = 1

2(x+c)TA(x+c)−bT(x+c) =

=1

2xTAx+cT Ax

|{z}

=b

+1

2cTAc−bTx−bTc=

=1

2xTAx−bTx

| {z }

=f(x)

+cTb−bTc

| {z }

=0

+1

2cTAc=f(x) +1 2cTAc

| {z }

>0

.

Díky pozitivní definitnostiAje výrazcTAckladný. Posuneme-li se tedy z bodu x v libovolném směru, hodnota funkce f se zvětší. V bodě x tedy nastává minimum.

K důkazu opačné implikacex= arg minv∈Rnf(v)⇒Ax=bje třeba si uvě- domit nutnou podmínku minima funkcef :Rn →R, tedy nulovost gradientu:

x= arg min

v∈Rnf(v)⇒ ∇f(x) =o. (1.7) Lze ukázat, že pro gradient funkcef platí

∇f(x) = ∂f

∂x1

(x), . . . , ∂f

∂xn

(x) T

= 1

2ATx+1

2Ax−b=Ax−b.

Z podmínky (1.7) tedy vyplýváAx−b=o.

V případě symetrické pozitivně definitní matice A∈ Rn×n máme tedy dvě možnosti, jak geometricky nahlížet na řešení soustavy lineárních rovnic. První přístup je chápat každou rovnici jako předpis nadroviny v n-rozměrném pros- toru. Řešení soustavy pak odpovídá hledání průsečíku těchto rovin. Druhý přístup, který využijeme při odvozování následujících algoritmů, odpovídá min- imalizaci příslušné pozitivně definitní kvadratické formy. Grafem pozitivně definitní kvadratické formyf : Rn → R je n-dimenzionální paraboloid, který má minimum (viz Obrázek 1.2 pron= 2).

1.2.1 Metoda největšího spádu

Metoda největšího spádu je iterační metoda s předpisem

xk+1:=xkkvk, (1.8)

(10)

Obrázek 1.2: Graf kvadratické formy s pozitivně definitní maticí A (zdroj Wikipedia)

kde vk volíme jako směr největšího poklesu funkce f. Všimněme si, že pro gradient platí∇f(xk) =Axk−ba pro reziduum k-tém krokurk =b−Axk. Tedyrk=−∇f(xk). Protože gradient odpovídá směru největšího růstu funkce v daném bodě, reziduum je směr největšího spádu. Logicky, protože chceme dosáhnout minima dané funkce, vydáváme se v každém kroku ve směru rezidua, tedyvk =rk.

Otázkou je, jak daleko se v každém kroku v tomto směru vydat, tedy jak zvolit koeficient αk. Metoda největšího spádu volí tento koeficient tak, aby v každém kroku dosáhla minima funkce f ve směru rezidua. Definujme si tedy pomocnou funkciF :R→R:

F(α) =f(xk+αrk) = 1

2(xk+αrk)TA(xk+αrk)−bT(xk+αrk) =

= 1

2(xk)TAxk+α(xk)TArk+1

2(rk)TArk−bTxk−αbTrk Hledámeα, ve kterém tato funkce dosahuje minima, její derivace se tedy musí rovnat nule:

F0(α) =α(rk)TArk+ (rk)T Axk

|{z}

=(b−rk)

−bTrk =α(rk)TArk−(rk)Tr= 0

Odtud

αk= (rk)Trk

(rk)TArk. (1.9)

Stejný předpis můžeme odvodit, použijeme-li místo pomocné funkce funkcif a položíme její derivaci ve směrurk rovnu nule (vzpomeňme si, že platí df(x)dh =

(11)

(∇f(x))Th):

df(xk+1)

drk = 0 (1.10)

(∇f(xk+1))Trk = 0 (1.11)

(−rk+1)Trk = 0 (1.12)

Dosazením rk+1 = rk −αkArk do předchozí rovnice a jednoduchou úpravou dostaneme stejný předpis proαk jako v předchozím případě (1.16). Předchozí odvození nám také prozradilo důležitou vlastnost metody největšího spádu – každý směr vk = rk je kolmý na předchozí směr. Jak brzy uvidíme, není to vždy žádaná vlastnost.

Algoritmus tedy počítá jednotlivé aproximace pomocí následujících předpisů:

rk :=b−Axk =b−A(xk−1k−1rk−1) =b−Axk−1

| {z }

rk−1

−αk−1Ark−1=

=rk−1−αk−1Ark−1 αk := (rk)Trk

(rk)TArk xk+1 :=xkkrk

Díky úpravě předpisu pro výpočetrkjsme ušetřili jedno násobení matice-vektor (Axk) – výsledekArk−1 si totiž můžeme zapamatovat z předchozí iterace.

Ukažme si nyní, že metoda konverguje. Konvergenci budeme dokazovat v tzv. energetické normě k · kA, tedy normě indukované skalárním součinem (Ax,x) =xTAx:kxkA=√

xTAx.

kek+1k2A= (ek+1)TAek+1 = (ekkrk)TA(ekkrk) =

= (ek)TAek+ 2αk(rk)T Aek

|{z}

=−rk

+(αk)2(rk)TArk =

=kekk2A−2 (rk)Trk (rk)TArk

| {z }

k

(rk)Trk+ ( (rk)Trk

(rk)TArk)2(rk)Ark =

=kekk2A−((rk)Trk)2 (rk)TArk =

=kekk2A

1− ((rk)Trk)2 ((rk)TArk) ((ek)TAek)

| {z }

=(A−1rk)TA(A−1rk)=(rk)TA−1rk

.

Rovnost v poslední závorce vyplývá ze vztahu (1.6) mezi reziduem a chybou.

Zjistili jsme tedy, že chyba v kroku k+ 1 je nějakým násobkem chyby v před-

(12)

chozím kroku. Podívejme se na tento násobek podrobněji:

1− ((rk)Trk)2

((rk)TArk)((rk)TA−1rk) ≤1− ((rk)Trk)2

kAkkrkk2kA−1kkrkk2 =

= 1− 1

kAkkA−1k =q,

kde první nerovnost vyplývá z Cauchyho-Schwarzovy nerovnosti a definice mati- cové normy indukované vektorovou normou. VýrazkAkkA−1knazývýme číslem podmíněnosti (viz také Richardsonova metoda) a v případě symetrické pozitivně definitní matice jej vypočítáme jako podíl největšího a nejmenšího vlastního čísla κ(A) = λλmax

min.

Protožeκ(A) =λmaxmin≥1, platíq= 1−1/κ(A)<1. Chyba se tedy v každém kroku zmenšuje a metoda konverguje k řešení. Navíc

kek+1k2A

1− 1 κ(A)

kekk2A

a je možné dokázat vztah mezi počáteční chybou a chybou vk-té iteraci:

kek+1kA

κ(A)−1 κ(A) + 1

k

ke0kA. (1.13)

Metoda tedy konverguje k řešení pomalu. Zejména je-li κ(A) velké, je zlomek ve výrazu (1.13) blízký 1 a dostaneme velmi pomalou konvergenci.

Celý algoritmus můžeme napsat na několika řádcích:

functionsteepestd_descent(A,b,x0) r0=b−Ax0

k= 0

whilekrkk/kr0k> εdo αk= ((rk)Trk)/((rk)TArk) xk+1=xkkrk

rk+1=rk−αkArk k=k+ 1

end while end function

Poznámka Z (1.12) vyplývá, že směrrk+1, ve kterém se v každém kroku vy- dáme, je kolmý na předchozí směr. To může vést k situacím jako na Obrázku 1.3, kdy procházíme „cik-cak“ údolí tvořené minimalizovanou kvadratickou formou.

Vydáváme se tedy několikrát v tom samém směru a postupně zkracujeme krok. Ideální by bylo najít metodu, která by minimalizovala celkovou chybu v daném směru vždy pouze jednou (v každé iteraci vynulovala chybu v daném směru). Taková metoda by byla schopná vyřešit soustavu onneznámých během n iterací. Zkusme si tedy pro A ∈ Rn×n zvolit n navzájem ortogonálních směrůd0,d1, . . . ,dn−1 (např. rovnoběžných s osami souřadnic) a použít před- pis: xk+1=xkkdk.

(13)

x

x0

Obrázek 1.3: Pomalá konvergence metody největšího spádu (vrstevnice mini- malizované kvadratické formy a jednotlivé směryrk).

Jak ale získatαk? Ilustrujme to ve dvou dimenzích na Obrázku 1.4. Na za- čátku (Obrázek 1.4 vlevo) si zvolíme nějaký počáteční odhad řešeníx0; počáteční chybu e0 pak lze rozložit na dvě kolmé složky rovnoběžné s osami souřadnic (e0 = e0x+e0y). V první iteraci si zvolme vektor d0 rovnoběžný s osou x (Obrázek 1.4 vpravo). Z obrázku je patrné, že abychom vynulovali chybu ve směru osyx, musíme bodx1 zvolit tak, aby vektor nové chybye1 byl kolmý k d0.

Obecně tedy chceme, aby nová chyba byla kolmá k aktuálnímu směru:

(dk)Tek+1= 0.

Z definice chyby dostaneme

0 = (dk)T(xk+1−x) = (dk)T(xkkdk−x) = (dk)T(ekkdk) a odtud

αk=−(dk)Tek (dk)Tdk.

Je jasné, že jsme si příliš nepomohli. Abychom vypočítaliαk, potřebovali by- chom znát chybuek. Tu ale bez znalosti přesného řešení nespočítáme. Jak si ale ukážeme v příští lekci, pokud požadavek na ortogonalitu směrůdknahradíme za tzv. A-ortogonalitu, budeme skutečně schopni odvodit metodu, která (alespoň teoreticky) dokonverguje k řešení běhemniterací.

1.2.2 Metoda sdružených gradientů

Definice Buď A symetrická pozitivně definitní matice. Nenulové vektory {pi}n−1i=0 nazveme sdružené (A-ortogonální), platí-li

∀i, j∈ {0,2, . . . , n−1}:i6=j ⇒pTiApj= 0.

Dva navzájemA-ortogonální vektory někdy označujemea⊥A b.

(14)

x

x0

e0

x y

ex0

ey0

x

x0

x y

e1 x1

d0

Obrázek 1.4: Ortogonální složky počáteční chyby (vlevo). Chceme-li vynulovat složku chyby ve směrud0, musí býte1 kolmý kd0(vpravo).

Lemma Prvky množiny sdružených vektorů jsou lineárně nezávislé.

Důkaz Chceme ukázat, že platí

α0p01p1+. . .+αn−1pn−1= 0⇒ ∀i:αi= 0.

Přenásobme rovnici výrazem(Apk)T, k∈ {0,1, . . . , n−1} zleva:

α0pTkAp01pTkAp1+. . .+αn−1pTkApn−1= 0.

Protože jsou vektory sdružené, všechny členy v této sumě až na jeden jsou nulové:

αkpTkApk = 0.

Současně víme, že matice A je symetrická pozitivně definitní a součin pTkApk

musí být kladný. Takžeαk = 0.

Vraťme se k poznámce na konci předchozí kapitoly a ortogonální směry nahraďme zaA-ortogonální. Předpokládejme tedy, že známenA-ortogonálních směrů{d0,d1. . . ,dn−1}a podobně jako na konci předchozí kapitoly se pokusme odvodit iterační metodu ve tvaruxk+1=xkkdk. Požadavek na ortogonalitu nové chyby k aktuálnímu směru nahraďme za požadavek na jejich vzájemnou A-ortogonalitu, tzn. ek+1A dk. Ukažme si, že toto nastane v minimu naší kvadratické formyf(x) = 1/2xTAx−bTxve směru dk. Hledejme tedy nový bodxk+1 tak, aby se v něm derivacef ve směrudk rovnala nule (nutná pod- mínka minima):

df(xk+1)

ddk = gradf(xk+1)Tdk =−( rk+1

| {z }

=−Aek+1

)Tdk= (ek+1)TAdk = 0.

Chybaek+1 je tedy v bodu minima skutečněA-ortogonální ke směrudk. Nyní snadno můžeme získat předpis pro koeficientαk(použijeme již několikrát zmíněný vztahek+1=ekkdk):

(ek+1)TAdk= (ekkdk)TAdk= 0⇒αk =−(ek)TAdk

(dk)TAd = (rk)Tdk (dk)TAd

(15)

Věta Algoritmus spočte přesné řešeníxv nejvýšenkrocích.

Důkaz Vyjádříme si počáteční chybue0v bázi tvořenéA-ortogonálními (tedy nezávislými) vektory{di}n−1i=0:

e0=

n−1

X

j=0

δjdj.

Souřadniceδj najdeme tak, že rovnici přenásobíme zleva výrazem(dk)TA, k∈ {0,1, . . . , n−1} a využijeme toho, že většina členů výsledné sumy bude díky A-ortogonalitě nulová.

(dk)TAe1=

n−1

X

j=0

δj(dk)TAdjk(dk)TAdk. Odtud

δk = (dk)TAe1

(dk)TAdk = (dk)TA(e1+Pk−1 i=0 αidi)

(dk)TAdk = (dk)TAek

(dk)TAdk =− (dk)Trk (dk)TAdk. Zde si uvědomme, že přičtením sumy Pk−1

i=0 αidi jsme výraz nijak nezměnili (všechna di v sumě jsou A-ortogonální k dk před závorkou, součin je tedy nulový). Dále rovnost e0 +Pk−1

i=0 αidi = ek snadno vyplyne z již známého vztahuek+1=ekkdk.

Všimněme si, žeδk =−αk. Vyjádřeme si tedy chybu vi-té iteraci jako

ei =e0+

i−1

X

j=0

αjdj=

n−1

X

j=0

δjdj+

i−1

X

j=0

αjdj=

n−1

X

j=0

δjdj

i−1

X

j=0

δjdj=

n−1

X

j=i

δjdj.

V každé iteraci se tedy odstraní jedna složka počáteční chybye0. Poniteracích je každá složka chyby v bázi{di}n−1i=0 vynulovaná⇒en =o.

Zbývá ukázat, jak najít jednotlivé A-ortogonální směry {di}n−1i=0. Před- pokládejme, že známe {d0,d1, . . . ,dk} a hledejme dk+1. Vyjdeme z vektoru rezidua rk+1 a pomocí Gramova-Schmidtova procesu (připomeňte si) jej A- ortogonalizujeme vůči předchozím směrům. Hledejme nový vektor ve tvaru

dk+1=rk+1

k

X

j=0

βk,jdj. (1.14)

Určeme koeficientyβk,jtak, aby výsledný vektor bylA-ortogonální k předchozím vektorům{d0,d1, . . . ,dk}. Přenásobme proto rovnost zleva výrazem(di)TA, i∈ {0,1, . . . , k}

(di)TAdk+1= (di)TArk+1

k

X

j=0

βk,j(di)TAdj

(16)

a využijme toho, že díkyA-ortogonalitě je výraz na levé straně rovnosti stejně jako většina členů sumy napravo roven nule. Tedy

0 = (di)TArk+1−βk,i(di)TAdi ⇒βk,i= (di)TArk+1 (di)TAdi . Dosazením vypočtených koeficientů do (1.14) dostaneme

dk+1=rk+1

k

X

j=0

(dj)TArk+1

(dj)TAdj dj. (1.15) Všimněme si, že abychom pomocí tohoto vzorce vypočítali nový směr, museli bychom si pamatovat všechny předchozí směry, což by z paměťového hlediska bylo značně nevýhodné. Ukážeme si ale nyní, že všechny koeficientyβk,j kromě βk,k jsou nulové. Dokažme tedy následující tři lemmata.

Lemma Reziduumrk+1je ortogonální kd0,d1 . . . ,dk. Důkaz Přenásobme rk+1vektorydi, i∈ {0,1, . . . , k}.

(di)T rk+1

| {z }

=−Aek+1

=−(di)TAek+1=−(di)TA

n−1

X

j=k+1

δjdj= 0,

kde poslední rovnost vyplývá zA-ortogonality všech vektorůdjv sumě k vektoru di.

Lemma Reziduumrk+1je ortogonální kr0,r1, . . . ,rk. Důkaz Využijme předpis (1.14) a vyjádřeme ri:

ri=di+

i−1

X

j=0

βi,jdj.

Pak díky předchozímu lemmatu dostaneme pro všechnai≤k:

(rk+1)Tri= (rk+1)T(di+

i−1

X

j=0

βi,jdj) = (rk+1)Tdi+

i−1

X

j=0

βi,j(rk+1)Tdj= 0.

Lemma Nechť je dána množina reziduí{ri}n−1i=0 a sdružených směrů{di}n−1i=0. Potom platí:

j < k: (rk+1)TAdj= 0 j=k: (rk+1)TAdj6= 0

(17)

Důkaz Pro reziduum platí

rj+1=b−Axj+1=b−A(xjjdj) =rj−αjAdj Odtud

Adj =− 1

αj(rj+1−rj) a

(rk+1)TAdj = (rk+1)T(1

αj(rj−rj+1)) = 1

αj(rk+1)Trj− 1

αj(rk+1)Trj+1 Proj < kje tento výraz díky ortogonalitě reziduí nulový. Proj =kdostaneme

(rk+1)TAdk= 1 αk

(rk+1)Trk− 1 αk

(rk+1)Trk+1=− 1 αk

(rk+1)Trk+1. (1.16) Vraťme se nyní zpět k předpisu pro výpočet koeficientů βk,i v Gramově- Schmidtově procesu. Díky předchozímu lemmatu jsme zjistili, že pro j = 0, . . . , k−1 jsou čitatelé v sumě v (1.15) nulové. Předpis se tedy zjednoduší na

dk+1=rk+1−(dk)TArk+1 (dk)TAdk dk.

K výpočtu nového směru nám stačí znát nové reziduum a předchozí směr. Pro- tože všechny ostatní koeficienty v dané sumě jsou nulové, budeme pro jednodu- chost psát místoβk,kjenβk.

Využijeme-li rovnosti rk+1 = rk −αkAdk, tedy Adk = α1

k(rk −rk+1), můžeme přepsat čitatele na

(rk+1)TAdk = 1 αk

(rk+1)T(rk−rk+1) =− 1 αk

(rk+1)Trk+1. Podobně lze upravit jmenovatele

(dk)TAdk= (rk−βk−1dk−1)TAdk= 1

αk(rk)T(rk−rk+1) = 1

αk(rk)Trk. Po dosazení do předpisu proβk dostaneme

βk =−(rk+1)Trk+1 (rk)Trk

V podobném duchu můžeme upravit i čitatele v předpisuαk

(rk)Tdk = (rk)Tdk =rk−βk−1dk−1= (rk)Trk−βk,k−1(rk)Tdk−1

| {z }

=0

,

(18)

čímž získáme

αk = (dk)Trk

(dk)TAdk = (rk)Trk (dk)TAdk.

Pokud použijme tyto předpisy pro αk, βk, ušetříme násobení matice-vektor a skalární součin.

Zapišme nyní celý algoritmus:

functionconjuate_gradient(A,b, x0) d0=r0=b−Ax0

k= 0

whilekrkk/kr0k> εdo αk= (d(rkk))TTAdrkk xk+1=xkkdk rk+1=rk−αkArk βk= (rk+1(rk))TTrrk+1k dk+1=rk+1kdk k=k+ 1

end while end function

Doplňme ještě informace o konvergenci. Chybu můžeme odhadnout pomocí vztahů

kek+1kA≤ κ(A)−1 κ(A) + 1kekkA

a

kekkA≤2

pκ(A)−1 pκ(A) + 1

!k

ke0kA.

Můžeme také odhadnout maximální počet iterací nutných k dosažení relativní přesnostiε(tedykekk ≤εke0k):

k≤ d1 2

pκ(A) ln2 εe.

Porovnejme to s metodou největšího spádu, pro kterou platí k≤ d1

2κ(A) ln1 εe.

Rozdíl mezi metodami je dobře patrný na Obrázku 1.5.

Na závěr poznamenejme, že metoda sdružených gradientů patří mezi tzv.

Krylovovské metody. Tyto metody generují posloupnost Krylovových podpros- torů ve tvaruKk(A,b) = span

b,Ab,A2b, . . . ,Akb a v každé iteraci minimal- izují chybu v energetické normě na daném podprostoru, tedy

xk+1= arg min

x∈x0+Kk(A,r0)

kx−xkA,

kdexje přesné řešení.

(19)

10-15 10-10

10-5

Relativni presnost 0

20 40 60 80 100 120 140 160 180 200

Max. pocet iteraci

Sdruzene gradienty Nejvetsi spad

Obrázek 1.5: Porovnání maximálního počtu iterací nutných k dosažení dané relativní přesnosti (κ(A) = 10).

1.3 Předpodmínění

V předchozích kapitolách jsme viděli, že rychlost konvergence iteračních metod k řešení závisí na čísle podmíněnosti κ(A) matice soustavy. Předpodmínění je nenáročná ekvivalentní úprava soustavy, jejímž cílem je snížení čísla pod- míněnosti, tedy snížení počtu potřebných iterací.

Předpokládejme, že známe matici M takovou, že platí κ(M−1A) κ(A).

Pak místo původní soustavyAx=bmůžeme řešit ekvivalentní systém

M−1Ax=M−1b. (1.17)

Vzhledem k menšímu číslu podmíněnosti matice M−1Aby měl oproti původní soustavě klesnout počet iterací nutných k jejímu vyřešení. MaticiMnazýváme levým předpodmiňovačem.

Je-li matice soustavyA symetrická pozitivně definitní, je výhodné původní soustavu řešit metodou největšího spádu nebo metodou sdružených gradientů.

Po předpodmiňovači M pak budeme chtít, aby byl také symetrický pozitivně definitní. Problémem však je, že součin dvou symetrických pozitivně definitních matic obecně nemusí být symetrická pozitivně definitní matice. Systém (1.17) tedy můžeme vyřešit pomocí iteračního řešiče, který nevyžaduje tyto vlastnosti matice, ale na rozdíl od původní soustavy Ax = b nemůžeme použít metodu největšího spádu ani metodu sdružených gradientů.

(20)

Pokusme se tedy odvodit takový tvar předpodmínění, abychom zachovali symetrii a pozitivní definitnost matice systému. Využijeme toho, že každou sy- metrickou pozitivně definitní matici můžeme rozložit (např. pomocí Choleského rozkladu) na součinM=LLT, kdeLje dolní trojúhelníková matice. Dále využi- jme toho, že maticeM−1A a L−1AL−T mají stejná vlastní čísla (a tedy stejné číslo podmíněnosti). Je-li totižv vlastní vektor maticeM−1As vlastním číslem λ, pakLTv je vlastní vektorL−1AL−T se stejným vlastním číslemλ:

(L−1AL−T)(LTv) =L−1A L−TLT

| {z }

=I

v=L−1Av= (LTL−T

| {z }

=I

)L−1Av

=LTL−TL−1

| {z }

=M−1

Av=LTM−1Av

| {z }

=λv

=λLTv Přenásobme nyní původní soustavuAx=bzleva maticíL−1:

L−1Ax=L−1b

Abychom zachovali symetrii a pozitivní definitnost, musíme maticiApřenásobit L−T zprava. “Vložme” tedy meziAaxjednotkovou matici ve tvaruI=L−TLT, tím soustavu nijak nezměníme:

L−1AL−TLTx=L−1b.

Místo původní soustavy Ax = b a místo soustavy (1.17) řešme ekvivalentní systém

(L−1AL−T)(LTx) =L−1b.

Zaveďme značení Aˆ = L−1AL−T,xˆ = LTx,ˆb = L−1b. Soustavu pak můžeme zapsat jako

Aˆˆx= ˆb. (1.18)

V tomto případě je matice soustavy Aˆ = L−1AL−T symetrická a pozitivně definitní, k řešení (1.18) tedy můžeme použít metodu největšího spádu či metodu sdružených gradientů. Po nalezení xˆ získáme řešení původní soustavy jako x=L−Tx.ˆ2

Poznamenejme, že nevýhodou tohoto přístupu je nutnost znalosti rozkladu M=LLT. Vhodnou manipulací s předpisy jednotlivých iteračních metod se však této potřeby zbavíme. Demonstrujme to pro jednoduchost na Richardsonově metodě, která má při aplikaci na (1.18) předpis

ˆ

xk+1= ˆxk+ω(ˆb−Aˆˆxk),

2Inverzní maticeL−1aL−T samozřejmě nemusíme explicitně sestavovat. Např. násobení w= L−1uje ekvivalentní s řešením soustavy Lw = u. Matice Lje dolní trojúhelníková, řešení tedy snadno získáme pomocí dopředné substituce. Obdobně postupujeme i v případě násobení maticíL−T. Není také třeba a není výhodné, abychom explicitně sestavovali matici L−1AL−Tjakou maticový součin. SoučinL−1AL−Tuvypočítáme jako posloupnost tří po sobě jdoucích součinů matice-vektor.

(21)

tedy

LTxk+1=LTxk+ω(L−1b−L−1AL−TLTxk).

Přenásobme tento předpis zleva maticíL−T:

L−TLTxk+1=L−TLTxk+ω(L−TL−1b−L−TL−1AL−TLTxk).

Odtud snadno získáme předpis předpodmíněné Richardsonovy metody, který již nevyžaduje znalost rozkladuM:

xk+1=xk+ωM−1(b−Axk).

Podobným způsobem bychom mohli upravit předpisy metody největšího spádu či metody sdružených gradientů. Všimněme si, že při použití tohoto předpisu potřebujeme aplikovatM−1(tedy řešit soustavu s maticí M). Předpodmiňovač tedy musíme volit tak, abychom toto řešení byli schopni najít rychle a efektivně.

Jak tedy zvolit M? Požadavky na předpodmiňovač se dají shrnout takto:

inverze M by měla aproximovat inverzi A (M−1 ≈ A−1), řešení soustavy s M by mělo být snadné a efektivní a pokud je matice A symetrická a pozitivně definitní, měl by i předpodmiňovač být symetrický pozitivně definitní. Dva extrémní případy jsou:

• M =A – v takovém případě inverze M aproximuje inverzi A přesně, ale aplikace samotného předpodmínění je stejně náročná jako řešení původní úlohy;

• M = I – v tomto případě je sice aplikace předpodmiňovače triviální, nedosáhneme ale žádného zlepšení čísla podmíněnosti (získáme původní nepředpodmíněný algoritmus).

Mezi těmito nepoužitelnými extrémy existuje celé spektrum sofistikovaných metod předpodmínění, pro jednoduchost však zmiňme dva dobře známé přís- tupy:

• diagonální předpodmiňovač – volíme M = diagA. V tomto případě je výpočet inverzeMvelmi snadný. Tento předpodmiňovač je efektivní např.

pro soustavy s diagonálně dominantní maticí.

• neúplný LU/Choleského rozklad – je vhodný pro soustavy s řídkou maticí.

Problémem klasického LU/Choleského rozkladu je, že přestože je matice A řídká, mohou být její faktory L,U plné nebo více zaplněné. Princip neúplného LU/Choleského rozkladu je jednoduchý - použijeme stejný al- goritmus jako u klasického LU/Choleského rozkladu, ale nenulový prvek do matice L nebo U uložíme pouze tehdy, existuje-li nenulový prvek na stejné pozici v rozkládané matici A. Dostaneme neúplné faktory L,˜ U˜ a příslušné předpodmíňovače definujeme jakoM= ˜LU˜ neboM= ˜L˜LT. Řešit soustavu sMje pak snadné, protože známe její rozklad na součin trojúhel- níkových matic a můžeme použít dopřednou a zpětnou substituci.

(22)

References

[1] Trefethen, L. N, Bau, D. Numerical Linear Algebra. SIAM. 1997.

[2] Schewchuk, J. R. An Introduction to the Conjugate Gradient Method Without the Agonizing Pain. 1994. Dostupné zhttps://www.cs.cmu.edu/~quake-papers/painless- conjugate-gradient.pdf

[3] Lukáš, D. Zápisky z přednášek. Dostupné zhttps://homel.vsb.cz/~luk76

Odkazy

Související dokumenty

Zkopírujte obsah souboru mat_mat.m do nového souboru mat_mat_v2.m (nezapomeňte upravit hlavičku souboru).. Nahraďte ji tedy zabudovanou matlabovskou funkci pro výpočet

nzmax( S ); % Mnozstvi pameti alokovane pro nenulove prvky spalloc( m, n, nzmax ); % Alokace pameti pro ulozeni ridke matice spfun( @sin, S ); % Aplikuje zadanou funkci

První parametr je matice, jejíž sloupce mají být umístěny na diagonály vytvářené matice, následuje vektor určující, na kterou diagonálu se daný sloupec umístí;

Vyjděte z následujícího kódu a vytvořte funkci fsubst, která bude řešit systém s čtvercovou dolní trojúhelníkovou maticí pomocí dopředné substituce.. Doplňte

Otestujte funkčnost vámi vytvořených řešičů (LU rozklad v kombinaci s dopřednou a zpětnou substitucí) na vhodných soustavách (použijte např. soustavu vygenerovanou

Vaše řešení (doplněný skript DU_script3.m a všechny soubory potřebné k jeho správnému spuštění) zabalte do zip archívu a zašlete nejpozději

Naimplementujte Choleského rozklad symetrické, pozitivně definitní matice (na konci je nutné vynulovat prvky pod diagonálou výsledné matice R):... Otestujte funkčnost

Vaše řešení (doplněný skript DU_script4.m a všechny soubory potřebné k jeho správnému spuštění) zabalte do zip archívu a zašlete nejpozději