QZ-Algorithmus

Aus testwiki
Version vom 26. Mai 2024, 22:02 Uhr von imported>Aka (Der implizite QZ-Schritt: typografische Anführungszeichen, Kleinkram)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Der QZ-Algorithmus oder die QZ-Faktorisierung ist ein numerisches Verfahren zur Lösung des verallgemeinerten Eigenwertproblems.

Ax=λBx , mit A,Bn×n bzw. A,Bn×n

Das verallgemeinerte Eigenwertproblem ist äquivalent zum Eigenwertproblem AB1y=λy, wobei y=Bx und B invertierbar sein muss. Es wird jedoch nicht explizit die Matrix B1 berechnet, um die Kondition des Problems nicht zu verschlechtern, sondern A und B werden simultan durch Ähnlichkeitstransformationen (Givens-Rotationen und Householder-Spiegelungen) in verallgemeinerte Schurform gebracht.

Gegeben ist ein Matrixbüschel AλB. Gesucht sind orthogonale Matrizen Q und Z, so dass QT(AλB)Z=TλS von verallgemeinerter Schurform ist, d. h. T ist von quasi-oberer Dreiecksform und S ist von oberer Dreiecksform. Im Fall A,Bn×n ist T stets von oberer Dreiecksform. Aus der verallgemeinerten Schurform lassen sich dann die Eigenwerte und aus Q und Z (A,B)-invariante Unterräume des Matrixbüschels AλB bestimmen.

Vortransformation

Ziel dieses Schrittes ist es, die Matrix A durch orthogonale Transformationen auf obere Hessenbergform und die Matrix B auf obere Dreiecksform zu bringen. Durch n1 Householder-Spiegelungen von links wird B auf obere Dreiecksform transformiert. Wendet man die gleichen Transformationen gleichzeitig auf A an, ergibt sich (Veranschaulichung an einem Beispiel der Größe (4,4)): A=(****************),B=(****0***00**000*).

Man finde nun eine Givens-Rotation, die von links angewendet auf A folgende Matrix ergibt: A=(************0***). Damit erhält man für B=(****0***00**00**).

Durch Anwendung einer Givens-Rotation von rechts kann die obere Dreiecksform von B wiederhergestellt werden, ohne die Null an der linken unteren Position von A zu zerstören: A=(************0***),B=(****0***00**000*).

Durch analoges spaltenweises Erzeugen von Nullen in A erhält man eine obere Hessenbergmatrix:

  1. A=(********0***0***),B=(****0***0***000*)
  2. A=(********0***0***),B=(****0***00**000*)
  3. A=(********0***00**),B=(****0***00**00**)
  4. A=(********0***00**),B=(****0***00**000*).

Falls (A,B)-invariante Unterräume berechnet werden sollen, so ist es notwendig, das Produkt der Transformationsmatrizen, die jeweils von links auf A und B angewendet werden, in einer Matrix Q und das Produkt der Transformationsmatrizen, die von rechts angewendet werden, in einer Matrix Z zu speichern.

QZ-Algorithmus mit impliziten Shifts

1. q:=0

2. while q<n do

3. Bestimme alle j{1,,n1} mit |aj+1,j|ε(|aj,j|+|aj+1,j+1|). Für diese j setze aj,j+1=0.

4. Deflation: Finde minimales p und maximales q mit p,q{1,,n} und definiere m:=npq, so dass gilt: A=(A11A12A130A22A2300A33), wobei A11p×p,A22m×m,A33q×q und A11 von oberer Hessenbergform, A22 von unreduzierter oberer Hessenbergform und A33 von quasi-oberer Dreiecksform ist.

5. Partitioniere B wie A, d. h. B=(B11B12B130B22B2300B33), wobei B11p×p,B22m×m,B33q×q obere Dreiecksmatrizen sind.

6. Bringe A33 in obere Schurform: Finde orthogonale Q33,Z33 so, dass A33:=Q33TA33Z33 in Schurform und B33:=Q33TB33Z33 obere Dreiecksmatrix ist.

Falls erforderlich: Aufdatieren von Q und Z: Q:=Qdiag(Ip,Im,Q33), Z:=Zdiag(Ip,Im,Z33).

7. if q<n:

if det(B22)=0

Transformiere mithilfe einer Givens-Rotation von rechts anq,nq1=0, um die Rang-Defizienz von B22 auf B33 zu verschieben. Durch die Annullierung von anq,nq1 ist A22 keine unreduzierte Hessenbergmatrix mehr, somit wird q erhöht und es besteht die Möglichkeit, dass B22 in der neuen Partitionierung regulär ist.

else

Führe einen impliziten QZ-Schritt für A22,B22 aus: A22:=Q22TA22Z22,B22:=Q22TB22Z22.

end if

8. end if

Wahl der Shifts

9. Bestimme Shifts a,b als Eigenwerte von (am1,m1am1,mam,m1am,m)(bm1,m1bm1,m0bm,m)1

10. Bestimme (A22B221aI)(A22B221bI)e1=(αβγ00)

Der implizite QZ-Schritt

11. Finde orthogonales Q1 mit Q1T(αβγ)=(*00)

Für B22 folgt nun: (Q1T00Im3)B22=(************000000*).

Ziel ist es nun, die Dreiecksgestalt von B22 durch orthogonale Transformationen (Householder-Spiegelungen) von rechts wiederherzustellen:

12. Finde orthogonales Z13×3 mit B22diag(Z1,Im3)=(********00**000000*). Finde dann orthogonales Z12×2, so dass

B22diag(Z1,Im3)diag(Z1,Im2)=(****0***00**000000*).

Für A22 ergibt sich nun: A~22:=A22diag(Z1,Im3)diag(Z'1,Im2)=(****************0000000**). D.h., die Hessenbergstruktur von A22 ist durch einen unerwünschten 2x2 „Buckel“ zerstört.

13. Dieser Buckel kann durch elementäre, orthogonale Transformationen (z. B. Householder-Spiegelungen) von links eliminiert werden. Finde also orthogonales Q'13×3, Q13×3 mit

diag(1,Q'1,Im4)Tdiag(I2,Q'1,Im5)TA~22=(********0***00**000*0000**). Es werden also nacheinander die Vektoren (a21a31a41) und (a32a42a52)auf (*00)transformiert.

Die Anwendung der Transformation auf B~22von links ergibt jedoch

diag(1,Q'1,Im4)Tdiag(I2,Q'1,Im5)TB~22=(****0***0***0****0000*00000*), d. h. ein Buckel ist jetzt eine Position tiefer entlang der Diagonalen entstanden.

14. Man wiederhole die Schritte 11–13 so lange, bis A22 wieder in oberer Hessenberg- und B22 wieder in oberer Dreieckstruktur vorliegt. Diesen Prozess bezeichnet man, analog zum QR-Algorithmus, auch als „Buckel-Jagen“ oder „Bulge-Chasing“. Die Eliminierung eines Buckels in B22 an der Diagonalposition j mit Transformationen von links führt zu einem Buckel an der entsprechenden Position in A22. Wird dieser Buckel mit Transformationen von rechts eliminiert, führt das zu einem Buckel in B22 an der Diagonalposition j+1 usw.

15. Nach m2 Schritten wird das Ziel erreicht und es ergibt sich Q22T=diag(Q1,Im3)Tdiag(1,Q'1,Im4)Tdiag(I2,Q1,Im5)Tdiag(Im3,Qm2)T. Analog erhält man

Z22=diag(Z1,Im3)diag(Z1,Im2)diag(Im2,Zm2)diag(Im2,Zm2).

Falls (A,B)-invarianten Unterräume benötigt werden, ist es notwendig die Matrizen Q und Z aufzudatieren: Q:=Qdiag(Ip,Q22,Iq), Z:=Zdiag(Ip,Z22,Iq)

16. end while

Bestimmung der Eigenwerte

In den meisten Fällen konvergiert (A,B) im QZ-Algorithmus gegen seine verallgemeinerte, reelle Schur-Form. Für skalare Diagonalblöcke in A gilt λi=aiibii:bii0 und λi= falls bii=0. Falls ein i existiert, für das aii=bii=0 ist, so ist Λ(A,B)=. 2×2 Diagonalblöcke von A beziehen sich (analog zum QR-Algorithmus) auf Paare komplex konjugierter Eigenwerte λ,λ=Λ((aiiai,i+1ai+1,iai+1,i+1),(biibi,i+10bi+1,i+1)).

Literatur

  • Gene H. Golub, Charles F. Van Loan: Matrix Computations. Johns Hopkins University Press, 1996, ISBN 0-8018-5414-8.
  • G. W. Stewart: Matrix Algorithms. Band II: Eigensystems. SIAM 2001, ISBN 0-89871-503-2.