# scipy.linalg.solve_discrete_are¶

scipy.linalg.solve_discrete_are(a, b, q, r)[source]

Solves the discrete algebraic Riccati equation (DARE).

The DARE is defined as

$X = A'XA - (A'XB) (R+B'XB)^{-1} (B'XA) + Q$

The limitations for a solution to exist are :

• All eigenvalues of $$A$$ outside the unit disc, should be controllable.
• The associated symplectic pencil (See Notes), should have eigenvalues sufficiently away from the unit circle.
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 Square matrix x : ndarray Solution to the discrete algebraic Riccati equation. LinAlgError For cases where the stable subspace of the pencil could not be isolated. See Notes section and the references for details.

solve_continuous_are
Solves the continuous algebraic Riccati equation

Notes

The equation is solved by forming the extended symplectic matrix pencil, as described in [R117], $$H - \lambda J$$ given by the block matrices:

[  A   0   B ]             [ I   0   B ]
[ -Q   I   0 ] - \lambda * [ 0  A^T  0 ]
[  0   0   R ]             [ 0 -B^T  0 ]


and using a QZ decomposition method.

In this algorithm, the fail conditions are linked to the symmetrycity of the product $$U_2 U_1^{-1}$$ and condition number of $$U_1$$. 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 [R117] and [R118] for more details.

New in version 0.11.0.

References

 [R117] (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
 [R118] (1, 2) Alan 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

#### Previous topic

scipy.linalg.solve_continuous_are

#### Next topic

scipy.linalg.solve_discrete_lyapunov