Sunteți pe pagina 1din 9

Universitatea Politehnica Bucureti Facultatea de Electronic, Telecomunicaii i Tehnologia Informaiei

Tema 2 TOP Metoda linara a gradientilor conjugati

Studentii: Paraschiv Radu Vulpe Florian Grupa: 443A

2012-2013

1)Introducere Metodele de gradient conjugat au fost proiectate de Magnus Hestenes si Eduard Stiefel in lucrarea Methods of conjugate gradients for solving linear systems, J. Research 1952 in care au prezentat un algoritm pentru rezolvarea sistemelor algebrice liniare, cu matricea simetrica si pozitiv definita. In 1964, metoda a fost extinsa de Fletcher si Reeves la probleme de optimizare neliniara fara restrictii. De atunci, un numar foarte mare de algoritmi de gradient conjugat au fost elaborati. Chiar daca algoritmii de gradient conjugat au peste 50 de ani de existenta, totusi acestia continua sa fie de un considerabil interes in particular datorita proprietatilor lor de convergenta si eficientei in rezolvarea problemelor de optimizare de mari dimensiuni. Metodele de gradient conjugat au ca si scop obtinerea minimului unei forme patratice in n iteratii. Aceasta metoda necesita calculul derivatelor partiale de ordinul intai si are convergenta superliniara. Spre deosebirea de alte metode similare, aceasta metoda nu necesita memorarea unei matrice. Consideram un sistem liniar de ecuatii: Ax = b. Presupunem ca A este o matrice patratica, simetrica si pozitiv definita. Rezolvarea sistemelor de ecuatii liniare folosind metode de optimizare Metodele de optimizare pot fi aplicate cu succes pentru rezolvarea sistemelor de ecuatii liniare, indeosebi pentru sisteme mari, atunci cand metodele directe nu mai sunt eficiente. Deoarece numarul de variabile este mare, n astfel de situat ii sunt preferate metodele de gradient conjugat. Metodele directiilor conjugate sunt motivate de dorinta de a accelera viteza de convergenta a metodelor clasice iterative pentru aceasta clasa de probleme. Aceste metode sunt, de fapt, aplicabile si pentru probleme de optimizare noncuadratice. Pentru astfel de probleme, in general, se termina procesul dupa un numar finit de iteratii, dar, atunci cand sunt aplicate in mod corespunzator, au convergenta atractiva si rata de convergenta convenabila.

2)Principiul de baza
Putem spune ca doi vectori u si v se numesc conjugati daca uTAv=0, unde A este o matrice de dimensiune nxn cunoscuta. Definim functia = strict convexa cu un x* solutie unica a problemei min((x)). Alegem ca si punct initial x0=0 cu care incepem cautarea in spatiul functiei . Pentru a determina daca ne apropiem de solutia optima avem nevoie de un reziduu. Primul pas pentru o functie f(x) x ,este de a alege vectorul de cautare p1 astfel incat acesta sa fie negativul gradientului functiei f(x0). Prin urmare p1= b-Ax0, iar cel de-al doilea vector de cautare va fi conjugatul acestuia. Notam cu rk=b-Axk reziduul in punctul k, si acesta reprezinta gradientul negativ al functiei patratice in punctul xk. Prin urmare, pasul urmator este calculat prin :
= = + +

Iar directia catre urmatorul optim este data de: unde :

3)Algoritmul
Pasul 1. Initializare. Selectam punctul initial p0=r0, k=0. x0 si calculam r0 = bAx0,

Pasul 2. Se testeaza un criteriu de oprire a iteratiilor. De exemplu daca reziduul | rk| ,unde 0 este o toleranta suficeint de mica; daca inecuatia se verifica atunci stopatunci stop; Pasul 3. Se calculeaza k=rkTzk/(pkTApk). Pasul 4. Se actualizeaza variabilele si reziduul: xk+1=xk+ kpk , rk+1=rk- kApk. Pasul 5. Se calculeaza: k= rk+1Trk+1/ rkTrk si directiile pk+1= rk+1+ kpk incrementeaza k si se reia algoritmul de la pasul 2. . Se

4)Codul sursa
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<math.h> int main(){ double x[2],b[2],a[2][2]; int i,j,k,iteratie; for(i=0;i<2;i++) { x[i]=0.0; } //citirea datelor printf("Citire vector de start : \n"); for(i=0;i<2;i++){ printf("x[%d]:",i); scanf("%lf",&x[i]); } printf("\nCitire matrice B : \n"); for(i=0;i<2;i++){ printf("x[%d]:",i); scanf("%lf",&b[i]);

} printf("\nCitire matrice A : \n"); for(i=0;i<2;i++){ for(j=0;j<2;j++){ printf("x[%d][%d]:",i,j); scanf("%lf",&a[i][j]); } } //initializari //r reziduu , d directie de cautare double r[2],d[2]; double aux,aux1,rsold; for(i=0;i<2;i++){ aux=0.0; for(j=0;j<2;j++){ aux+=a[i][j]*x[j]; } r[i]=b[i]-aux; d[i]=r[i];

} rsold=0.0; for (i=0;i<2;i++) rsold+=r[i]*r[i]; double Ap[2],alpha,rsnew; iteratie=0; alpha=0.0; rsnew=0.0; //calcul propriu-zis for(k=0;k<2;k++){ printf("\n\n iteratie %d",k); for(i=0;i<2;i++){ aux=0.0; for(j=0;j<2;j++){ aux+=a[i][j]*d[j]; } Ap[i]=aux; } printf("\nmatricea ap"); for(i=0;i<10;i++) printf("%f ",Ap[i]); aux1=0.0; for (i=0;i<2;i++) aux1+=d[i]*Ap[i]; alpha=rsold/aux1; for(i=0;i<2;i++){ x[i]=x[i]+alpha*d[i]; r[i]=r[i]-alpha*Ap[i];

} printf("\nmatricea x"); for(i=0;i<2;i++) printf("%.9f ",x[i]); printf("\nmatricea r"); for(i=0;i<2;i++) printf("%.9f ",r[i]); for (i=0;i<2;i++) rsnew+=r[i]*r[i]; printf("\n rsnew %f ",rsnew); printf("\n rsold %f ",rsold); if(sqrt(rsnew)<1e-10) k=11; for (i=0;i<2;i++){ d[i]=r[i]+(rsnew/rsold)*d[i]; } iteratie++; rsold=rsnew; rsnew=0.0; printf("\niteratii : %d",iteratie); printf("\n Optimul se afla la coordonatele :"); for (i=0;i<2;i++) printf("\n%f",x[i]); return 1;

5)Exemplu de rulare
Pentru functia: =2 + 1.5 + 2

Rezultat practic

Reprezentare grafica

Pentru functia:

= 0.5

+ 2.5

Rezultat practic

Reprezentare grafica

6)Concluzii
Cu exceptia situatiei in care solutia s-a obtinut in mai putin de n pasi gradientul este intotdeauna nenul si liniar independent in raport cu directiile precedente(gradientul este ortogonal pe subspatiul generat de d0, d1, ... dk-1). Formula deosebit de simpla pentru generarea noii directii, facand metoda doar putin mai complicata decat metoda celei mai abrupte pante. Procesul de cautare progreseaza satisfactor si uniform inspre solutie la fiecare pas deoarece directiile sunt bazate pe gradienti (spre deosebire de multe metode de directii conjugate cu directii generate arbitrar si in care progresul poate fi lent pana la ultimii cativa pasi). Acest lucru nu este important pentru functii patratice ci pentru generalizarile la functii nepatratice.

S-ar putea să vă placă și