This is documentation for an old release of SciPy (version 0.19.0). Read this page in the documentation of the latest stable release (version 1.15.1).
scipy.linalg.solve_continuous_are¶
- scipy.linalg.solve_continuous_are(a, b, q, r, e=None, s=None, balanced=True)[source]¶
Solves the continuous-time algebraic Riccati equation (CARE).
The CARE is defined as
XA+AHX−XBR−1BHX+Q=0The limitations for a solution to exist are :
- All eigenvalues of A on the right half plane, should be controllable.
- The associated hamiltonian pencil (See Notes), should have eigenvalues sufficiently away from the imaginary axis.
Moreover, if e or s is not precisely None, then the generalized version of CARE
EHXA+AHXE−(EHXB+S)R−1(BHXE+SH)+Q=0is solved. When omitted, e is assumed to be the identity and s is assumed to be the zero matrix with sizes compatible with a and b respectively.
Parameters: a : (M, M) array_like
Square matrix
b : (M, N) array_like
Input
q : (M, M) array_like
Input
r : (N, N) array_like
Nonsingular square matrix
e : (M, M) array_like, optional
Nonsingular square matrix
s : (M, N) array_like, optional
Input
balanced : bool, optional
The boolean that indicates whether a balancing step is performed on the data. The default is set to True.
Returns: x : (M, M) ndarray
Solution to the continuous-time algebraic Riccati equation.
Raises: LinAlgError
For cases where the stable subspace of the pencil could not be isolated. See Notes section and the references for details.
See also
- solve_discrete_are
- Solves the discrete-time algebraic Riccati equation
Notes
The equation is solved by forming the extended hamiltonian matrix pencil, as described in [R124], H−λJ given by the block matrices
[ A 0 B ] [ E 0 0 ] [-Q -A^H -S ] - \lambda * [ 0 E^H 0 ] [ S^H B^H R ] [ 0 0 0 ]
and using a QZ decomposition method.
In this algorithm, the fail conditions are linked to the symmetry of the product U2U−11 and condition number of U1. Here, U is the 2m-by-m matrix that holds the eigenvectors spanning the stable subspace with 2m rows and partitioned into two m-row matrices. See [R124] and [R125] for more details.
In order to improve the QZ decomposition accuracy, the pencil goes through a balancing step where the sum of absolute values of H and J entries (after removing the diagonal entries of the sum) is balanced following the recipe given in [R126].
New in version 0.11.0.
References
[R124] (1, 2, 3) P. van Dooren , “A Generalized Eigenvalue Approach For Solving Riccati Equations.”, SIAM Journal on Scientific and Statistical Computing, Vol.2(2), DOI: 10.1137/0902010 [R125] (1, 2) A.J. Laub, “A Schur Method for Solving Algebraic Riccati Equations.”, Massachusetts Institute of Technology. Laboratory for Information and Decision Systems. LIDS-R ; 859. Available online : http://hdl.handle.net/1721.1/1301 [R126] (1, 2) P. Benner, “Symplectic Balancing of Hamiltonian Matrices”, 2001, SIAM J. Sci. Comput., 2001, Vol.22(5), DOI: 10.1137/S1064827500367993