See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Metodo del gradiente coniugato - Wikipedia

Metodo del gradiente coniugato

Da Wikipedia, l'enciclopedia libera.

Stub Questa voce di matematica è solo un abbozzo: contribuisci a migliorarla secondo le convenzioni di Wikipedia.

In analisi numerica, il metodo del gradiente coniugato è un algoritmo per la risoluzione di un sistema lineare della forma Ax = b.

Per poter applicare questo metodo è necessario che A sia una matrice simmetrica definita positiva cioè  \forall x, \,  x^t A x \geq 0.

[modifica] Spiegazione del metodo

Quando A è simmetrica si ha che la minimizzazione della funzione f(x) = {1 \over 2} x^t A x -b^t \cdot x + c è equivalente alla risoluzione del sistema iniziale Ax = b, ed avviene quando
\bigtriangledown f(x) = A x - b = 0
cioè quando:
\bigtriangledown f(x) = 0 \Leftrightarrow A x - b = 0 \Leftrightarrow A x = b

Questo significa che risolvere il sistema lineare è equivalente a trovare lo zero di \bigtriangledown f e quindi il minimo di f.

Per trovare il minimo si procede iterativamente come nel metodo del gradiente cioè, partendo da un punto xi si sceglie una direzione di e si trova il punto successivo minimizzando f sulla retta avente direzione di e passante per xi.

La differenza sostanziale rispetto al metodo del gradiente è nella scelta della direzione di che non corrisponde alla direzione di massima pendenza come nel metodo del gradiente, ma è scelta A-ortogonale alle superfici di livello.

La ragione di questa scelta è che f(x) è un paraboloide dilatato con coefficiente ci sulla direzione ei e poi traslato. I ci sono gli autovalori di A e gli ei i corrispondenti autovettori che esistono per il teorema spettrale. La direzione scelta coincide con il gradiente nel paraboloide originale. Questo assicura la convergenza in n - 1 passi.


Il metodo del gradiente biconiugato fornisce una generalizzazione per matrici non simmetriche.

[modifica] Implementazione d'esempio nel linguaggio Octave

 function [x] = conjgrad(A,b,x0)
  
 r = b - A*x0;
 w = -r;
 z = A*w;
 a = (r'*w)/(w'*z);
 x = x0 + a*w;
 B = 0;
  
 for i = 1:size(A)(1);
    r = r - a*z;
    if( r < 1e-10)
         break;
    endif
    B = (r'*z)/(w'*z);
    w = -r + B*w;
    z = A*w;
    a = (r'*w)/(w'*z);
    x = x + a*w;
 end

[modifica] Collegamenti esterni


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -