Il metodo del Gradiente Coniugato

1
Il metodo del Gradiente Coniugato - paola.gervasio@unibs.it
Il metodo del Gradiente Coniugato
Sia A una matrice simmetrica e definita positiva (s.d.p.).
Risolvere Ax = b equivale a calcolare il punto di minimo della funzione
Φ(x) =
1 T
x Ax − xT b,
2
ovvero
x = argmin Φ(y).
y∈Rn
Infatti, se A `e s.d.p. allora Φ `e convessa ed ha un unico punto di minimo assoluto x∗ ∈ Rn
che `e anche punto di minimo relativo ed `e l’unico punto stazionario di Φ, cio`e tale che
∇Φ(x∗ ) = 0.
Svolgendo i conti, si ottiene che
∀x ∈ Rn
∇Φ(x) = Ax − b
(1)
e quindi l’unico punto di minimo di Φ coincide con la soluzione del sistema lineare dato. Si
veda la figura 1 nel caso in cui n = 2.
50
40
4
x 10
5
30
4
20
10
2
2
x
phi(x)
3
1
0
−10
0
−20
−1
60
−30
40
60
20
40
0
−20
−40
x
−40
20
0
−20
−40
−60
2
−60
−50
−50
x1
−40
−30
−20
−10
0
x1
10
20
30
40
50
Figura 1: La funzione Φ(x) nel caso n = 2 (a destra solo le contourlines)
Partendo da x(0) ∈ Rn , il metodo del GC costruisce una successione {x(k) } tale che x(k) → x
quando k → ∞, sfruttando le informazioni su Φ e sul suo gradiente.
Perch`e sfruttiamo il gradiente di Φ?
Supponiamo di essere arrivati a calcolare l’iterata x(k) della successione e vogliamo calcolare
x(k+1) .
Se x(k) 6= x, allora ∇Φ(x(k) ) 6= 0 ed `e un vettore in Rn che individua la direzione orientata
(cio`e con verso) lungo cui avviene la massima crescita di Φ. La massima decrescita avviene
nella stessa direzione e verso opposto a quello del gradiente.
Definiamo il residuo al passo k come
r(k) = b − Ax(k) ,
(2)
e, grazie alla (1), osserviamo che ∇Φ(x(k) ) = Ax(k) − b = −r(k) . Si veda la figura 2 per una
rappresentazione grafica del vettore gradiente.
2
Il metodo del Gradiente Coniugato - paola.gervasio@unibs.it
contour di phi(x) e la direzione del gradiente in x0=[1;−1.9]
phi(x), il piano tangente e il vettore gradiente in x0=[1;−1.9]
5
4
3
10
2
5
2
x
phi(x)
1
0
0
−5
−1
−10
−10
−2
−5
10
−3
5
0
−4
0
5
−5
x1
10
−10
x
−5
−5
−4
−3
−2
−1
2
0
x
1
2
3
4
5
1
Figura 2: A sinistra, il piano tangente a Φ in x(k) e il vettore normale al piano tangente con
verso che punta dove Φ cresce. A destra, il vettore gradiente in x(k) (in nero) (`e proprio la
proiezione sul piano (x1 , x2 ) del vettore normale al piano tangente disegnato a sinistra) e il
vettore residuo r(k) (in verde)
Osservando la figura 2 (destra), deduciamo che per poterci muovere verso il punto di minimo,
sar`a bene seguire la direzione del residuo, che `e quella del gradiente, ma con verso opposto
a quello del gradiente.
In realt`
a ci possiamo muovere anche lungo altre direzioni opportune, con l’obiettivo di
muoverci verso il punto di minimo della funzione Φ.
Diciamo che p(k) `e una direzione di discesa se
T
p(k) ∇Φ(x(k) ) < 0
p(k) = 0
se ∇Φ(x(k) ) 6= 0,
se ∇Φ(x(k) ) = 0.
(3)
Le direzioni opportune per muoversi verso il punto di minimo sono le direzioni di discesa (si
veda la fig. 3).
L’idea del GC `e questa:
per k = 0, 1, . . . fino a convergenza
1. si costruisce una direzione di discesa p(k) ∈ Rn
2. si sceglie un passo αk ∈ R
3. si pone x(k+1) = x(k) + αk p(k)
Dal terzo passo del ciclo precedente segue che:
x(1) = x(0) + α0 p(0) ,
x(2) = x(1) + α1 p(1) = x(0) + α0 p(0) + α1 p(1) ,
x(3) = x(2) + α2 p(2) = x(0) + α0 p(0) + α1 p(1) + α2 p(2) ,
...,
n−1
X
x(n) = x(n−1) + αn−1 p(n−1) = x(0) +
αj p(j) .
j=0
(4)
Il metodo del Gradiente Coniugato - paola.gervasio@unibs.it
3
contour di phi(x) e la direzione del gradiente in x0=[1;−2]
5
4
3
2
x
2
1
0
−1
−2
−3
−4
−5
−5
−4
−3
−2
−1
0
x
1
2
3
4
5
1
Figura 3: In nero il vettore gradiente ∇Φ(x(k) ), in verde alcune direzioni di discesa. In rosso
la direzione ortogonale a quella del gradiente, essa risulta tangente alla curva di livello di Φ
in x(k)
La scelta dei passi e delle direzioni di discesa `e fatta in modo che, in assenza di errori di
arrotondamento, le direzioni di discesa p(0) , p(1) , . . . , p(n−1) formino una base di Rn e che
il residuo r(n) al passo n risulti nullo, il che implica che la soluzione x(n) coincida con la
soluzione esatta del sistema, per ogni x(0) ∈ Rn scelto.
Algoritmo
L’algoritmo del metodo del gradiente coniugato `e quindi:
dato x(0)
r(0) = b − Ax(0)
p(0) = r(0)
per k = 0, 1, . . . fino a convergenza
T
αk =
p(k) r(k)
T
p(k) Ap(k)
,
x(k+1) = x(k) + αk p(k) ,
r(k+1) = r(k) − αk Ap(k) ,
βk =
(Ap(k) )T r(k+1)
,
(Ap(k) )T p(k)
p(k+1) = r(k+1) − βk p(k)
Il metodo del Gradiente Coniugato - paola.gervasio@unibs.it
4
Per comodit`
a, nell’algoritmo la costruzione della direzione di discesa `e svolta alla fine dell’iterazione, ma `e la direzione di discesa del passo successivo, quindi `e pronta al passo successivo
per calcolare αk e poi x(k+1) .
Abbiamo detto prima che, grazie alla scelta “buona” delle direzioni di discesa e dei passi
αk , in assenza di errori di arrotondamento il metodo del GC determina la soluzione esatta
del sistema lineare al pi`
u in n iterazioni.
Tuttavia spesso ci si accontenta della soluzione x(k) ottenuta al primo passo k che soddisfa
il test d’arresto
kr(k) k
≤ε
(5)
kbk
con ε assegnato.
Fissata la tolleranza, il numero di iterazioni necessarie per soddisfare il test d’arresto (5)
dipende dal dato iniziale x(0) .
Aspetti computazionali
A differenza dei metodi diretti, la matrice A del sistema non viene mai modificata, ma
interviene solo nel calcolo del prodotto matrice vettore v = Ap(k) e quindi sono coinvolti
solo gli elementi non nulli di A. Per ottimizzare il costo computazionale del calcolo del
prodotto matrice-vettore `e opportuno memorizzare A in formato sparso se A presenta molti
elementi nulli.
Inoltre sar`a opportuno calcolare v = Ap(k) una sola volta per iterazione e poi sfruttare v
quando serve (4 volte per iterazione).
Il costo computazionale del GC `e quindi di un prodotto matrice-vettore per ogni iterazione
effettuata.
Si riesce a dimostrare che il numero di iterazioni del GC necessarie per soddisfare il test
d’arresto (5) con una tolleranza fissata `e proporzionale alla radice quadrata del numero di
condizionamento della matrice A, ovvero
p
#it ≃ K(A).
Generalizzazione del GC per matrici non s.d.p.
Esistono alcune varianti del metodo del Gradiente Coniugato per matrici generiche quadrate
e non singolari.
La variante pi`
u efficiente e stabile proposta negli ultimi anni `e il metodo Bi-CGStab.
Alternative sono Bi-CG e CGS.
Dettagli sulla scelta dei passi αk e delle direzioni p(k)
Supponiamo di essere arrivati al passo k.
Vediamo prima come scegliere il passo αk supponendo di conoscere la direzione p(k) .
Consideriamo dapprima il caso particolare n = 2.
In questo caso, la sezione di Φ lungo la direzione p(k) `e una parabola, allora scelgo αk in
modo che x(k+1) sia il punto di minimo di questa parabola (si veda la figura 4)
5
Il metodo del Gradiente Coniugato - paola.gervasio@unibs.it
contour di phi(x) e la direzione del gradiente in x0=[1;−2]
5
4
3
2
10
9
1
8
x2
7
6
0
5
−1
4
3
−2
2
1
−3
0
-2
x(k)
-1
−4
r(k) = −∇φ(x(k) )
0
x(k+1)
1
2
-2
-1.5
-1
-0.5
0
0.5
1
1.5
2.5
2
−5
−5
−4
−3
−2
−1
0
x
1
2
3
4
5
1
Figura 4: A sinistra, la sezione di Φ lungo la direzione p(k) . A destra, in blue il punto x(k) ,
in verde il punto x(k+1) . αk `e la distanza fra i due punti
Il calcolo del vertice della parabola (ottenuta sezionando Φ lungo la direzione di discesa p(k) )
produce
(p(k) )T r(k)
, k = 0, 1, . . .
(6)
αk = (k) T
(p ) Ap(k)
Nel caso n > 2, il ragionamento `e del tutto analogo anche se ci `e impossibile visualizzare
cosa succede, si chiede comunque che
αk = argmin Φ(x(k) + αp(k) )
(7)
α∈R
cio`e che αk realizzi il minimo della funzione Φ quando la valutiamo sui punti del tipo x(k) +
αp(k) , e si ottiene ancora αk come in (6). Tale scelta di αk garantisce che (r(k+1) )T p(k) = 0,
cio`e il residuo al passo successivo sar`a ortogonale all’ultima direzione di discesa calcolata.
Vediamo ora come scegliere le direzioni di discesa.
Al primo passo (k = 0) si sceglie
p(0) = r(0) = b − Ax(0)
Questa p(0) `e una direzione di discesa? Verifichiamo in base alla definizione:
(p(0) )T ∇Φ(x(k) ) = −(r(k) )T r(k) = −kr(k) k2 < 0
Quindi, effettivamente p(0) `e una direzione di discesa.
A questo punto costruiamo:
(p(0) )T r(0)
(p(0) )T Ap(0)
= x(0) + α0 p(0)
α0 =
x(1)
Il metodo del Gradiente Coniugato - paola.gervasio@unibs.it
6
e quindi possiamo valutare il nuovo vettore residuo
r(1) = [b − Ax(1) = b − A(x(0) + α0 p(0) ) =]r(0) − α0 Ap(0) ,
che ci servir`a al passo successivo. Grazie alla scelta che abbiamo fatto di α0 otteniamo che
(r(1) )T p(0) = 0, cio`e il nuovo residuo `e ortogonale alla direzione di discesa p(0) .
Supponiamo ora di essere al passo generico k e costruiamo la direzione p(k) in modo che
soddisfi le seguenti propriet`
a:
1. p(k) sia una combinazione lineare di r(k) e di p(k−1) (cio`e p(k) = r(k) + βp(k−1) , con
β ∈ R),
2. (p(k) )T Ap(k−1) = 0 (si dice che p(k) `e A−ortogonale a p(k−1) ).
Da queste due condizioni si ricava
β = −βk−1 = −
(p(k−1) )T Ar(k)
(p(k−1) )T Ap(k−1)
(8)
quindi
p(k) = r(k) − βk−1 p(k−1) .
(9)
Si riesce a dimostrare che p(k) cos`ı costruita soddisfa la definizione di direzione di discesa
data in (3).
Se αk sono scelti come in (6), βk come in (8) e p(k) come in (9), si riesce a dimostrare che
(si veda ad esempio [1] per la dimostrazione) per ogni k = 0, . . . , n − 1 valgono:
1. (p(k+1) )T Ap(j) = 0 con j = 0, . . . , k,
si dice che le direzioni p(k) sono A− coniugate (da cui deriva il nome del metodo)
e, grazie al fatto che A sia non singolare, questo implica che le direzioni di discesa
formino una base di Rn ,
2. (r(k+1) )T p(j) = 0 con j = 0, . . . , k
(questo vuol dire che il residuo al successivo passo (k + 1) `e ortogonale a tutte le
direzioni di discesa calcolate fino al passo k).
Segue che che r(n) = 0, in quanto risulta ortogonale a n vettori linearmente indipendenti di
Rn e l’unico vettore di Rn ortogonale a n vettori linearmente indipendenti di Rn `e il vettore
nullo.
Riferimenti bibliografici
[1] A. Quarteroni, R. Sacco, F. Saleri, and P. Gervasio. Matematica numerica (4a ed.).
Springer, 2014.