scipy.linalg.

solve_discrete_lyapunov#

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

求解离散李雅普诺夫方程 \(AXA^H - X + Q = 0\)

参数:
a, q(M, M) array_like

分别对应于上述方程中 A 和 Q 的方阵。必须具有相同形状。

method{‘direct’, ‘bilinear’}, 可选

求解器类型。

如果没有给出,如果 M 小于 10,则选择为 direct,否则选择为 bilinear

返回:
xndarray

离散李雅普诺夫方程的解

另请参阅

solve_continuous_lyapunov

计算连续时间李雅普诺夫方程的解

注释

本部分描述了可通过‘method’参数选择的可用求解器。默认方法是,如果 M 小于 10,则为 direct,否则为 bilinear

方法 direct 使用离散李雅普诺夫方程的直接解析解。例如,该算法在 [1] 中给出。但它要求解一个尺寸为 \(M^2\) 的线性系统,以便即使对于适中的矩阵,性能也会迅速下降。

方法双线性使用双线性变换将离散李雅普诺夫方程转换为连续李雅普诺夫方程 \((BX+XB'=-C)\),其中 \(B=(A-I)(A+I)^{-1}\)\(C=2(A' + I)^{-1} Q (A + I)^{-1}\)。可以有效地求解连续方程,因为它是西尔维斯特方程的特例。变换算法来自 Popov (1964),如 [2] 所述。

在版本 0.11.0 中添加。

参考文献

[1]

“李雅普诺夫方程”,维基百科,https://en.wikipedia.org/wiki/Lyapunov_equation#Discrete_time

[2]

Gajic, Z.,和 M.T.J. Qureshi。2008。系统稳定性和控制中的李雅普诺夫矩阵方程。工程系列多佛丛书。多佛出版社。

实例

给定 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