scipy.linalg.

ordqz#

scipy.linalg.ordqz(A, B, sort='lhp', output='real', overwrite_a=False, overwrite_b=False, check_finite=True)[Quelle]#

QZ-Zerlegung für ein Matrizenpaar mit Neuordnung.

Die Dokumentation wurde unter der Annahme verfasst, dass die Array-Argumente bestimmte „Kern“-Formen haben. Array-Argumente dieser Funktion können jedoch zusätzliche „Batch“-Dimensionen vorangestellt haben. In diesem Fall wird das Array als Stapel von niedrigdimensionalen Schnitten behandelt; siehe Gestapelte lineare Operationen für Details.

Parameter:
A(N, N) array_like

Zu zerlegende 2D-Array

B(N, N) array_like

Zu zerlegende 2D-Array

sort{callable, ‘lhp’, ‘rhp’, ‘iuc’, ‘ouc’}, optional

Gibt an, ob die oberen Eigenwerte sortiert werden sollen. Ein aufrufbares Objekt kann übergeben werden, das bei einem geordneten Paar (alpha, beta), das den Eigenwert x = (alpha/beta) repräsentiert, einen booleschen Wert zurückgibt, der angibt, ob der Eigenwert in die obere linke Ecke sortiert werden soll (True). Für reelle Matrizenpaare ist beta reell, während alpha komplex sein kann. Für komplexe Matrizenpaare können sowohl alpha als auch beta komplex sein. Das aufrufbare Objekt muss ein NumPy-Array akzeptieren können. Alternativ können Zeichenkettenparameter verwendet werden.

  • ‘lhp’ Linke Halbebene (x.real < 0.0)

  • ‘rhp’ Rechte Halbebene (x.real > 0.0)

  • ‘iuc’ Innerhalb des Einheitskreises (x*x.conjugate() < 1.0)

  • ‘ouc’ Außerhalb des Einheitskreises (x*x.conjugate() > 1.0)

Bei den vordefinierten Sortierfunktionen wird ein unendlicher Eigenwert (d.h. alpha != 0 und beta = 0) weder in der linken noch in der rechten Halbebene betrachtet, aber er wird als außerhalb des Einheitskreises liegend betrachtet. Für den Eigenwert (alpha, beta) = (0, 0) geben alle vordefinierten Sortierfunktionen False zurück.

outputstr {‘real’,’complex’}, optional

Konstruiert die reelle oder komplexe QZ-Zerlegung für reelle Matrizen. Standard ist ‘real’.

overwrite_abool, optional

Wenn True, wird der Inhalt von A überschrieben.

overwrite_bbool, optional

Wenn True, wird der Inhalt von B überschrieben.

check_finitebool, optional

Wenn True, werden die Elemente von A und B auf endliche Zahlen geprüft. Wenn False, wird keine Prüfung durchgeführt und die Matrix wird an den zugrundeliegenden Algorithmus weitergegeben.

Rückgabe:
AA(N, N) ndarray

Generalisierte Schur-Form von A.

BB(N, N) ndarray

Generalisierte Schur-Form von B.

alpha(N,) ndarray

alpha = alphar + alphai * 1j. Siehe Hinweise.

beta(N,) ndarray

Siehe Hinweise.

Q(N, N) ndarray

Die linken Schur-Vektoren.

Z(N, N) ndarray

Die rechten Schur-Vektoren.

Siehe auch

qz

Hinweise

Bei Beendigung sind (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N die verallgemeinerten Eigenwerte. ALPHAR(j) + ALPHAI(j)*i und BETA(j),j=1,...,N sind die Diagonalen der komplexen Schur-Form (S,T), die sich ergeben würden, wenn die 2x2-Diagonalblöcke der reellen verallgemeinerten Schur-Form von (A,B) durch komplexe unitäre Transformationen weiter zu Dreiecksformen reduziert würden. Wenn ALPHAI(j) Null ist, dann ist der j-te Eigenwert reell; wenn positiv, dann sind der j-te und der (j+1)-te Eigenwert ein komplexes konjugiertes Paar, mit ALPHAI(j+1) negativ.

Hinzugefügt in Version 0.17.0.

Beispiele

>>> import numpy as np
>>> from scipy.linalg import ordqz
>>> A = np.array([[2, 5, 8, 7], [5, 2, 2, 8], [7, 5, 6, 6], [5, 4, 4, 8]])
>>> B = np.array([[0, 6, 0, 0], [5, 0, 2, 1], [5, 2, 6, 6], [4, 7, 7, 7]])
>>> AA, BB, alpha, beta, Q, Z = ordqz(A, B, sort='lhp')

Da wir für Eigenwerte in der linken Halbebene sortiert haben, kommen negative zuerst

>>> (alpha/beta).real < 0
array([ True,  True, False, False], dtype=bool)