当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy linalg.solve_continuous_are用法及代码示例


本文简要介绍 python 语言中 scipy.linalg.solve_continuous_are 的用法。

用法:

scipy.linalg.solve_continuous_are(a, b, q, r, e=None, s=None, balanced=True)#

求解continuous-time 代数 Riccati 方程 (CARE)。

CARE 定义为

存在解决方案的限制是:

  • All eigenvalues of on the right half plane, should be controllable.

  • The associated hamiltonian pencil (See Notes), should have eigenvalues sufficiently away from the imaginary axis.

此外,如果 es 不完全是 None ,则 CARE 的广义版本

解决了。省略时,假设 e 是恒等式,假设 s 是零矩阵,其大小分别与 ab 兼容。

参数

a (M, M) 数组

方阵

b (M, N) 数组

输入

q (M, M) 数组

输入

r (N, N) 数组

非奇异方阵

e (M, M) 数组,可选

非奇异方阵

s (M, N) 类数组,可选

输入

balanced 布尔型,可选

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

返回

x (M, M) ndarray

continuous-time 代数 Riccati 方程的解。

抛出

LinAlgError

对于无法隔离铅笔的稳定子空间的情况。有关详细信息,请参阅注释部分和引用。

注意

该方程通过形成扩展的哈密顿矩阵铅笔来求解,如 [1] 中所述, 由块矩阵给出

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

并使用QZ分解方法。

在该算法中,失败条件与产品 的对称性和 的条件编号相关联。在这里, 是 2m-by-m 矩阵,它包含跨越 2-m 行的稳定子空间的特征向量,并划分为两个 m-row 矩阵。有关详细信息,请参阅 [1] 和 [2]。

为了提高 QZ 分解的准确性,铅笔经过一个平衡步骤,其中 条目的绝对值之和(在去除总和的对角线条目之后)按照 [3 ]。

参考

[1] (1,2)

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

[2]

A.J. Laub,“求解代数 Riccati 方程的 Schur 方法。”,麻省理工学院。信息和决策系统实验室。 LIDS-R ; 859. 在线可用:http://hdl.handle.net/1721.1/1301

[3]

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

例子

给定 a、b、q 和 r 求解 x:

>>> import numpy as np
>>> 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

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.solve_continuous_are。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。