scipy.linalg.

solve_discrete_lyapunov#

scipy.linalg.solve_discrete_lyapunov(a, q, method=None)[Quelle]#

Löst die diskrete Lyapunov-Gleichung \(AXA^H - X + Q = 0\).

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, q(M, M) array_like

Quadratische Matrizen, die A und Q in der obigen Gleichung entsprechen. Müssen die gleiche Form haben.

method{‘direct’, ‘bilinear’}, optional

Art des Lösers.

Wenn nicht angegeben, wird direct gewählt, wenn M kleiner als 10 ist, und ansonsten bilinear.

Rückgabe:
xndarray

Lösung der diskreten Lyapunov-Gleichung

Siehe auch

solve_continuous_lyapunov

berechnet die Lösung der kontinuierlichen Lyapunov-Gleichung

Hinweise

Dieser Abschnitt beschreibt die verfügbaren Solver, die über den Parameter 'method' ausgewählt werden können. Die Standardmethode ist direct, wenn M kleiner als 10 ist, und ansonsten bilinear.

Die Methode direct verwendet eine direkte analytische Lösung der diskreten Lyapunov-Gleichung. Der Algorithmus ist z. B. in [1] angegeben. Sie erfordert jedoch die lineare Lösung eines Systems der Dimension \(M^2\), sodass sich die Leistung bei selbst mäßig großen Matrizen rapide verschlechtert.

Die Methode bilinear verwendet eine bilineare Transformation, um die diskrete Lyapunov-Gleichung in eine kontinuierliche Lyapunov-Gleichung \((BX+XB'=-C)\) umzuwandeln, wobei \(B=(A-I)(A+I)^{-1}\) und \(C=2(A' + I)^{-1} Q (A + I)^{-1}\). Die kontinuierliche Gleichung kann effizient gelöst werden, da sie ein Spezialfall einer Sylvester-Gleichung ist. Der Transformationsalgorithmus stammt von Popov (1964), wie in [2] beschrieben.

Hinzugefügt in Version 0.11.0.

Referenzen

[2]

Gajic, Z. und M.T.J. Qureshi. 2008. Lyapunov Matrix Equation in System Stability and Control. Dover Books on Engineering Series. Dover Publications.

Beispiele

Löst für x gegeben a und q

>>> import numpy as np
>>> from scipy import linalg
>>> a = np.array([[0.2, 0.5],[0.7, -0.9]])
>>> q = np.eye(2)
>>> x = linalg.solve_discrete_lyapunov(a, q)
>>> x
array([[ 0.70872893,  1.43518822],
       [ 1.43518822, -2.4266315 ]])
>>> np.allclose(a.dot(x).dot(a.T)-x, -q)
True