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’, ‘bilinear’},可选
求解器类型。
如果未给出,当
M
小于 10 时选择direct
,否则选择bilinear
。
- 返回:
- xndarray
离散李雅普诺夫方程的解
另请参阅
solve_continuous_lyapunov
计算连续时间李雅普诺夫方程的解
备注
本节描述了可通过 'method' 参数选择的可用求解器。默认方法是,当
M
小于 10 时为 direct,否则为bilinear
。direct 方法使用离散李雅普诺夫方程的直接解析解。该算法例如在 [1] 中给出。然而,它需要一个维度为 \(M^2\) 的系统的线性解,因此对于中等大小的矩阵,性能也会迅速下降。
bilinear 方法使用双线性变换将离散李雅普诺夫方程转换为连续李雅普诺夫方程 \((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., 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