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\) 在右半平面上,应该是可控的。
相关的哈密顿铅笔(见注释)应该有足够远离虚轴的特征值。
而且,如果
e
或s
并不完全是None
,然后是护理的广义版本\[E^HXA+A^HXE-(E^HXB+S)R^{-1}(B^HXE+S^H)+Q=0\]已经解决了。如果省略,
e
被假定为身份,并且s
假定为大小与a
和b
,分别为。- 参数
- 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
示例
给定的 a , b , q ,以及 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