scipy.linalg.
solve_discrete_lyapunov#
- scipy.linalg.solve_discrete_lyapunov(a, q, method=None)[源代码][源代码]#
求解离散Lyapunov方程 \(AXA^H - X + Q = 0\)。
- 参数:
- a, q(M, M) array_like
方阵对应于上述方程中的 A 和 Q。必须具有相同的形状。
- 方法{‘直接’, ‘双线性’}, 可选
求解器类型。
如果没有指定,如果
M
小于 10 则选择direct
,否则选择bilinear
。
- 返回:
- xndarray
离散Lyapunov方程的解
参见
solve_continuous_lyapunov
计算连续时间李雅普诺夫方程的解
注释
本节描述了可通过 ‘method’ 参数选择的可用求解器。默认方法是 direct 如果
M
小于 10 且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] 中所述。
Added in version 0.11.0.
参考文献
[1]“李雅普诺夫方程”,维基百科,https://en.wikipedia.org/wiki/Lyapunov_equation#Discrete_time
[2]Gajic, Z., 和 M.T.J. Qureshi. 2008. Lyapunov 矩阵方程在系统稳定性和控制中的应用. 多佛工程系列书籍. 多佛出版社.
示例
给定 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