scipy.linalg.solve_continuous_are

scipy.linalg.solve_continuous_are(a, b, q, r, e=None, s=None, balanced=True)[源代码]

求解连续时间代数Riccati方程(CARE)。

护理的定义为

\[X A+A^H X-X B R^{-1}B^H X+Q=0\]

解决方案的存在限制包括:

  • 的所有特征值 \(A\) 在右半平面上,应该是可控的。

  • 相关的哈密顿铅笔(见注释)应该有足够远离虚轴的特征值。

而且,如果 es 并不完全是 None ,然后是护理的广义版本

\[E^HXA+A^HXE-(E^HXB+S)R^{-1}(B^HXE+S^H)+Q=0\]

已经解决了。如果省略, e 被假定为身份,并且 s 假定为大小与 ab ,分别为。

参数
a(M,M)类数组

方阵

b(M,N)类数组

输入

q(M,M)类数组

输入

r(n,N)类数组

非奇异方阵

e(M,M)array_like,可选

非奇异方阵

s(M,N)ARRAY_LIKE,可选

输入

balanced布尔值,可选

指示是否对数据执行平衡步骤的布尔值。默认值设置为True。

退货
x(M,M)ndarray

求解连续时间代数Riccati方程。

加薪
LinAlgError

对于铅笔的稳定子空间不能被隔离的情况。有关详细信息,请参阅注释部分和参考资料。

参见

solve_discrete_are

求解离散时间代数Riccati方程

注意事项

通过形成扩展的哈密顿矩阵束来求解该方程,如中所述 [1], \(H - \lambda J\) 由挡路矩阵给出:

[ A    0    B ]             [ E   0    0 ]
[-Q  -A^H  -S ] - \lambda * [ 0  E^H   0 ]
[ S^H B^H   R ]             [ 0   0    0 ]

并使用QZ分解方法。

在该算法中,故障条件与产品的对称性有关 \(U_2 U_1^{{-1}}\) AND条件编号 \(U_1\) 。这里, \(U\) 是2m×m的矩阵,它包含跨越2m行的稳定子空间的特征向量,并被划分为两个m行的矩阵。看见 [1][2] 了解更多详细信息。

为了提高QZ分解的精度,铅笔经过一个平衡步骤,其中的绝对值之和 \(H\)\(J\) 条目(删除总和的对角线条目后)按照中给出的配方进行平衡 [3].

0.11.0 新版功能.

参考文献

1(1,2)

P.van Dooren,“求解Riccati方程的广义特征值方法”,SIAM科学与统计计算期刊,第2卷(2), DOI:10.1137/0902010

2

解代数Riccati方程的Schur方法>,麻省理工学院。信息与决策系统实验室。LIDS-R;859。在线提供:http://hdl.handle.net/1721.1/1301

3

P.Benner,“哈密顿矩阵的辛平衡”,2001,SIAM J.Sci。计算机,2001,第22卷(5), DOI:10.1137/S1064827500367993

示例

给定的 abq ,以及 r 解算 x

>>> from scipy import linalg
>>> a = np.array([[4, 3], [-4.5, -3.5]])
>>> b = np.array([[1], [-1]])
>>> q = np.array([[9, 6], [6, 4.]])
>>> r = 1
>>> x = linalg.solve_continuous_are(a, b, q, r)
>>> x
array([[ 21.72792206,  14.48528137],
       [ 14.48528137,   9.65685425]])
>>> np.allclose(a.T.dot(x) + x.dot(a)-x.dot(b).dot(b.T).dot(x), -q)
True