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
directgewählt, wennMkleiner als 10 ist, und ansonstenbilinear.
- Rückgabe:
- xndarray
Lösung der diskreten Lyapunov-Gleichung
Siehe auch
solve_continuous_lyapunovberechnet 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
Mkleiner als 10 ist, und ansonstenbilinear.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
[1]„Lyapunov equation“, Wikipedia, https://en.wikipedia.org/wiki/Lyapunov_equation#Discrete_time
[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