本文简要介绍 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.
此外,如果
e
或s
不完全是None
,则 CARE 的广义版本解决了。省略时,假设
e
是恒等式,假设s
是零矩阵,其大小分别与a
和b
兼容。- 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 ]。
参考:
[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
相关用法
- Python SciPy linalg.solve_continuous_lyapunov用法及代码示例
- Python SciPy linalg.solve_circulant用法及代码示例
- Python SciPy linalg.solve_banded用法及代码示例
- Python SciPy linalg.solve_discrete_lyapunov用法及代码示例
- Python SciPy linalg.solve_sylvester用法及代码示例
- Python SciPy linalg.solve_toeplitz用法及代码示例
- Python SciPy linalg.solve_discrete_are用法及代码示例
- Python SciPy linalg.solve_triangular用法及代码示例
- Python SciPy linalg.solve用法及代码示例
- Python SciPy linalg.solveh_banded用法及代码示例
- Python SciPy linalg.svd用法及代码示例
- Python SciPy linalg.spsolve用法及代码示例
- Python SciPy linalg.spsolve_triangular用法及代码示例
- Python SciPy linalg.splu用法及代码示例
- Python SciPy linalg.spilu用法及代码示例
- Python SciPy linalg.svdvals用法及代码示例
- Python SciPy linalg.sqrtm用法及代码示例
- Python SciPy linalg.svds用法及代码示例
- Python SciPy linalg.sinm用法及代码示例
- Python SciPy linalg.schur用法及代码示例
- Python SciPy linalg.sinhm用法及代码示例
- Python SciPy linalg.signm用法及代码示例
- Python SciPy linalg.subspace_angles用法及代码示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代码示例
- Python SciPy linalg.cdf2rdf用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.solve_continuous_are。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。