本文简要介绍 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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
