scipy.linalg.

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.

範例

給定 aq,求解 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