scipy.linalg.solve_discrete_lyapunov

scipy.linalg.solve_discrete_lyapunov(a, q, method=None)[源代码]

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

参数
a, q(M,M)类数组

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

method{‘直接’,‘双线性’},可选

求解器的类型。

如果没有给予,则选择成为 direct 如果 M 小于10,并且 bilinear 不然的话。

退货
xndarray

离散Lyapunov方程的解

参见

solve_continuous_lyapunov

计算连续时间Lyapunov方程的解

注意事项

本节介绍可通过‘method’参数选择的可用求解器。默认方法为 直接 如果 M 小于10,并且 bilinear 不然的话。

方法 直接 使用离散Lyapunov方程的直接解析解。该算法给出,例如, [1]. 然而,它需要有量纲的系统的线性解。 \(M^2\) 因此,即使对于中等大小的矩阵,性能也会迅速下降。

方法 双线性 使用双线性变换将离散的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

“时间序列分析”,普林斯顿:普林斯顿大学出版社,1994年。265.打印出来。http://doc1.lbfl.li/aca/FLMF037168.pdf

2

题名/责任者:My-T.J.2008年。系统稳定与控制中的Lyapunov矩阵方程。多佛工程丛书。多佛出版公司。

示例

给定的 aq 解算 x

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