1 Il metodo del Gradiente Coniugato - [email protected] 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 - [email protected] 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 - [email protected] 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 - [email protected] 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 - [email protected] 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 - [email protected] 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.
© Copyright 2024 Paperzz