12.01.2015 Views

Calculul valorilor si vectorilor proprii

Calculul valorilor si vectorilor proprii

Calculul valorilor si vectorilor proprii

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6.4. CALCULUL SUBSPAŢIILOR DE DEFLAŢIE 495<br />

– structura (i.e. ordinul) blocurilor diagonale ale matricei S a FSRG va fi memorată<br />

în vectorul strbl;<br />

– pentru localizarea blocurilor diagonale ale matricei S a FSRG vom utiliza<br />

vectorul lcbl care va conţine poziţiile elementelor (1,1) ale acestora;<br />

– pentru a <strong>si</strong>mplifica la maxim monitorizarea elementelor nule de pe subdiagonala<br />

matricei S, nu vom apela formal la algoritmul QZ2 ci vom adopta ideile<br />

acestuia la <strong>si</strong>tuaţa structurală concretă.<br />

Se obţine următorul algoritm.<br />

Algoritmul 6.13 (FSRG ORD – Ordonarea formei Schur reale<br />

generalizate) (Date o pereche (S,T) ∈ IR n×n ×IR n×n în formă Schur generalizată<br />

(6.83), cu T ne<strong>si</strong>ngulară, matricele ortogonale Q,Z ∈ IR n×n ,<br />

permutarea π = {i 1 ,i 2 ,...,i p } şi toleranţa tol pentru neglijarea elementelor<br />

subdiagonale, algoritmul suprascrie perechea (S,T) cu perechea<br />

ortogonal echivalentă (S ′ ,T ′ ) = (˜Q T S ˜Z, ˜Q T T ˜Z) având (S i ′ k i k<br />

,T i ′<br />

k i k<br />

) =<br />

(S kk ,T kk ) şi actualizează matricele ortogonale de transformare Q şi Z.)<br />

1. % Determinarea numărului, a structurii şi localizării blocurilor diagonale<br />

ale matricei S.<br />

1. p = 0, j = 1<br />

2. C^at timp j < n<br />

1. p ← p+1<br />

2. Dacă s j+1,j = 0 atunci<br />

1. strbl(p) = 1<br />

2. j ← j +1<br />

3. Dacă j = n atunci<br />

1. p ← p+1<br />

2. strbl(p) = 1<br />

altfel<br />

1. strbl(p) = 2<br />

2. j ← j +2<br />

2. Pentru k = 1 : (p−1)<br />

1. mută =’nu’<br />

2. l = k<br />

3. Pentru j = (k +1) : p<br />

1. Dacă i j < i l atunci<br />

1. l = j<br />

2. mută =’da’<br />

4. Dacă mută =’da’ atunci<br />

1. Pentru j = (l−1) : −1 : k<br />

1. lcbl(1) = 1<br />

2. Pentru i = 2 : p<br />

1. lcbl(i) = lcbl(i−1)+strbl(i−1)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!