solve_discrete_lyapunov#
- scipy.linalg.solve_discrete_lyapunov(a, q, method=None)[原始碼]#
解離散 Lyapunov 方程式 \(AXA^H - X + Q = 0\)。
- 參數:
- a, q(M, M) 類陣列
對應於上述方程式中 A 和 Q 的方陣。必須具有相同的形狀。
- method{‘direct’, ‘bilinear’}, 選用
求解器類型。
如果未給定,則當
M
小於 10 時選擇direct
,否則選擇bilinear
。
- 回傳值:
- xndarray
離散 Lyapunov 方程式的解
另請參閱
solve_continuous_lyapunov
計算連續時間 Lyapunov 方程式的解
註解
本節描述可通過 ‘method’ 參數選擇的可用求解器。預設方法是當
M
小於 10 時為 direct,否則為bilinear
。direct 方法使用離散 Lyapunov 方程式的直接解析解。該演算法在例如 [1] 中給出。然而,它需要維度為 \(M^2\) 的系統的線性解,因此即使對於中等大小的矩陣,效能也會迅速下降。
bilinear 方法使用雙線性轉換將離散 Lyapunov 方程式轉換為連續 Lyapunov 方程式 \((BX+XB'=-C)\),其中 \(B=(A-I)(A+I)^{-1}\) 且 \(C=2(A' + I)^{-1} Q (A + I)^{-1}\)。連續方程式可以有效地求解,因為它是 Sylvester 方程式的特例。轉換演算法來自 Popov (1964),如 [2] 中所述。
在版本 0.11.0 中新增。
參考文獻
[1]“Lyapunov equation”,維基百科,https://en.wikipedia.org/wiki/Lyapunov_equation#Discrete_time
[2]Gajic, Z., and M.T.J. Qureshi. 2008. Lyapunov Matrix Equation in System Stability and Control. Dover Books on Engineering Series. Dover Publications.
範例
給定 a 和 q,求解 x
>>> 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