In questo articolo esploreremo l'impatto e le implicazioni di Metodo del gradiente coniugato sulla società moderna. Dalla sua comparsa alla sua influenza su diversi aspetti della vita quotidiana, Metodo del gradiente coniugato ha svolto un ruolo cruciale nel plasmare vari campi, come la politica, l’economia, la tecnologia e la cultura. Attraverso un'analisi approfondita, esamineremo come Metodo del gradiente coniugato si è evoluto nel tempo e come ha plasmato le percezioni e le azioni delle persone in tutto il mondo. Inoltre, affronteremo le controversie e i dibattiti che Metodo del gradiente coniugato ha generato, nonché il suo potenziale impatto in futuro. Questo articolo cerca di fornire una visione completa e approfondita su Metodo del gradiente coniugato e sulla sua importanza nella società contemporanea.
In analisi numerica, il metodo del gradiente coniugato (spesso abbreviato in CG, dall'inglese conjugate gradient) è un algoritmo per la risoluzione numerica di un sistema lineare la cui matrice sia simmetrica e definita positiva.
Il metodo è stato inizialmente proposto nel 1952 dai matematici Magnus Hestenes e Eduard Stiefel[1] e costituisce una variante del metodo del gradiente in cui la direzione di discesa a ogni passo è scelta in modo tale da garantire la convergenza del metodo in un numero di iterazioni pari al più alla dimensione del sistema da risolvere.
Il metodo del gradiente biconiugato ne fornisce una generalizzazione al caso di matrici non simmetriche.
Si voglia calcolare la soluzione del sistema lineare
dove è una matrice simmetrica e definita positiva a coefficienti reali e è il termine noto.
La matrice , grazie alle sue proprietà, induce un prodotto scalare definito da
Una coppia di vettori che soddisfa , cioè ortogonale rispetto a questo prodotto scalare, si dice -coniugata.
Inoltre la soluzione del sistema lineare precedente corrisponde al punto di minimo della forma quadratica
Infatti:
da cui
Questo suggerisce di procedere iterativamente, partendo da una data soluzione iniziale e muovendosi lungo direzioni che minimizzano la forma quadratica A differenza del metodo del gradiente, in cui la direzione di discesa al -esimo passo è scelta pari a , nel caso del gradiente coniugato essa viene scelta in modo che risulti -ortogonale alle direzioni precedenti, cioè Il significato geometrico di tale scelta è mostrato nella figura a lato, da cui emerge in particolare il vantaggio di scegliere direzioni -ortogonali e non semplicemente ortogonali alle linee di livello della funzione .
Alla -esima iterazione la soluzione viene dunque aggiornata nel modo seguente:
dove corrisponde alla lunghezza del passo di discesa. È possibile dimostrare (si veda ad esempio Soluzione di sistemi lineari) che la scelta ottimale per , che porta cioè al minimo di , è
dove
è il residuo del sistema.
Un metodo per calcolare direzioni di discesa -ortogonali alle precedenti è il seguente[2]:
con ; la scelta ottimale per è
Lo schema generale per la soluzione mediante metodo del gradiente coniugato è il seguente:
L'eventuale implementazione dell'algoritmo in aritmetica floating point, in cui la convergenza in al più passi non è garantita, il ciclo for può essere sostituito da un ciclo while che verrà eseguito finché la norma del residuo non sia più piccola di una tolleranza impostata dall'utente.
In molti casi è possibile accelerare ulteriormente la velocità di convergenza dell'algoritmo migliorando le proprietà di condizionamento della matrice . Si introduca a tal fine una matrice di precondizionamento simmetrica e definita positiva. L'algoritmo corrispondente al metodo del gradiente coniugato precondizionato (spesso abbreviato in PCG, dall'inglese preconditioned conjugate gradient) si ottiene applicando la versione senza precondizionamento per trovare la soluzione del seguente sistema:
dove è la radice quadrata di e .
Lo schema risolutivo in questo caso diventa[2]:
È possibile dimostrare che l'errore commesso alla -esima iterazione del metodo del gradiente coniugato soddisfa la seguente stima[2]:
dove
il numero di condizionamento in norma di e è la norma indotta da .
Nel caso precondizionato vale la stessa stima con
Si riporta un esempio di possibile implementazione del metodo del gradiente coniugato non precondizionato compatibile con i linguaggi di programmazione Octave e MATLAB.
function = gradiente_coniugato(A, b, x0, toll, nmax)
xk = x0;
rk = b - A * xk;
pk = rk;
iter = 0;
while (norm(rk) >= toll*norm(b))
alphak = (pk' * rk) / (pk' * A * pk);
xk = xk + alphak * pk;
rk = b - A * xk;
betak = (pk' * A * rk) / (pk' * A * pk);
pk = rk - betak * pk;
iter = iter+1;
if (iter == nmax && norm(rk) > toll*norm(b))
disp();
break
end
end
end
La funzione che implementa il metodo del gradiente coniugato precondizionato è già salvata in MATLAB nel comando pcg().
Esempio:
x=pcg(A,b)
%determina la soluzione x del sistema lineare Ax=b di una matrice simmetrica e definita positiva mediante il metodo del gradiente coniugato a partire dal vettore iniziale x0 nullo.
x=pcg(A,b,tol,nmax)
%determina la soluzione x imponendo come criterio d'arresto la tolleranza e il numero di iterazioni.
Controllo di autorità | LCCN (EN) sh85031141 · GND (DE) 4255670-3 · BNF (FR) cb12168447j (data) · J9U (EN, HE) 987007555420405171 |
---|