Sunteți pe pagina 1din 4

UNIVERSITATEA POLITEHNICA BUCURESTI METODE NUMERICE

CALCULUL VALORILOR PROPRII ALE UNEI MATRICI SIMETRICE


-TEORIA GRAFURILOR-

DIACONU MIHAI ALIN 324AC

!"#$%&'()$*+,-+*.//$01"2'(+/'01"3+

4567+

UNIVERSITATEA POLITEHNICA BUCURESTI METODE NUMERICE

ABSTRACT
Numim graf o pereche ordonat! de multimi notat! G=(X,U), unde X este o multime finit! "i nevid! de elemente numite noduri sau vrfuri, iar U este o multime de perechi (ordonate sau neordonate) de elemente din X numite muchii (dac! sunt perechi neordonate) sau arce (dac! sunt perechi ordonate). n primul caz, graful se nume"te neorientat, altfel acesta este orientat. Matricea de adiacenta este o matrice simetrica cu n linii si n coloane, in care elementele se definesc astfel: 1, daca exista muchia [i,j] cu i diferit de j si 0 in caz contrar.

INTRODUCERE
Ne propunem sa verificam daca doua grafuri sunt isospectrale. Conform teoremei grafurilor spectrale, doua grafuri sunt isospectrale daca matricele adiacente ale acestora au un numar egal de valori proprii. Pentru calculul valorilor proprii voi folosi metoda puterii.

MODELAREA MATEMATICA
Consideram urmatorul graf:

Ii construim matricea adiacenta:

"1 $ $1 $0 A =$ $0 $1 $ #0

1 0 0 1 0% ' 0 1 0 1 0' 1 0 1 0 0' ' 0 1 0 1 1' 1 0 1 0 0' ' 0 0 1 0 0&

! !"#$%&'()$*+,-+*.//$01"2'(+/'01"3+

4567+

UNIVERSITATEA POLITEHNICA BUCURESTI METODE NUMERICE

Urmatorul pas este calcularea valorilor proprii ale matricei A folosind metoda puterii, setand un nivel de toleranta (tol ! R, tol > 1) si maxit, un numar maxim de iteratii. 1. 2. 3. 4. Se alege aleator un vector y y = y / ||y|| i = 0, e = 1 Cat timp e > tol 1. Daca i > maxit atunci i. Tipareste S-a depasit numarul de iteratii ii. Stop 2. z = Ay 3. z = z / ||z|| 4. e = | 1 |trans(z) * y || 5. y = z 6. i = i + 1

IMPLEMENTARE GENERALA MATLAB


function[x] = powMeth(A,x0,epsilon,maxiter) [n,n] = size(A); x = x0/norm(x0); y = zeros(n,1); e = 1; iter = 0; while((e > epsilon ) & (iter < maxiter)) y = A * x; y = y / norm(y); e = abs(1 abs(y * x)); x = y; iter = iter + 1; end end

DISCUTIE In loc sa inmultim toata matricea, inmultim patratul elementelor de deasupra diagonalei principale, deoarece ele se regasesc simetric sub aceasta, in consecinta, parcurgem doar jumatate de matrice.

!"#$%&'()$*+,-+*.//$01"2'(+/'01"3+

4567+

UNIVERSITATEA POLITEHNICA BUCURESTI METODE NUMERICE

IMPLEMENTARE PARTICULARA MATLAB


function[x] = symPowMeth(A,x0,epsilon,maxiter) [n,n] = size(A); x = x0/norm(x0); y = zeros(n,1); e = 1; iter = 0; while((e > epsilon ) & (iter < maxiter)) for (j=1:n) y(j) = A(j,j:n - 1) * A(j,j:n - 1) * x(j) end y = y / norm(y); e = abs(1 abs(y * x)); x = y; iter = iter + 1; end end

REZULTATE
Vectorii proprii ai matricei exemplu:

TESTARE Ambii algoritmi au fost testati pe o matrice patratica de dimensiune 2500 x 2500, iar timpii de rulare au fost urmatorii: 1. powMeth : 0.004157 seconds. 2. symPowMeth : 0.003180 seconds. BIBLIOGRAFIE
Matrici adiacente: ,,,http://en.wikipedia.org/wiki/Adjacency_matrix

!"#$%&'()$*+,-+*.//$01"2'(+/'01"3+

4567+

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