# care

(Not recommended) Continuous-time algebraic Riccati equation solution

`care` is not recommended. Use `icare` instead. For more information, see Compatibility Considerations.

## Syntax

```[X,L,G] = care(A,B,Q) [X,L,G] = care(A,B,Q,R,S,E) [X,L,G,report] = care(A,B,Q,...) [X1,X2,D,L] = care(A,B,Q,...,'factor') ```

## Description

`[X,L,G] = care(A,B,Q)` computes the unique solution `X` of the continuous-time algebraic Riccati equation

`${A}^{T}X+XA-XB{B}^{T}X+Q=0$`

The `care` function also returns the gain matrix, $G={R}^{-1}{B}^{T}XE$.

`[X,L,G] = care(A,B,Q,R,S,E)` solves the more general Riccati equation

`${A}^{T}XE+{E}^{T}XA-\left({E}^{T}XB+S\right){R}^{-1}\left({B}^{T}XE+{S}^{T}\right)+Q=0$`

When omitted, `R`, `S`, and `E` are set to the default values `R=I`, `S=0`, and `E=I`. Along with the solution `X`, `care` returns the gain matrix $G={R}^{-1}\left({B}^{T}XE+{S}^{T}\right)$ and a vector `L` of closed-loop eigenvalues, where

```L=eig(A-B*G,E) ```

`[X,L,G,report] = care(A,B,Q,...)` returns a diagnosis `report` with:

• -`1 `when the associated Hamiltonian pencil has eigenvalues on or very near the imaginary axis (failure)

• -`2 `when there is no finite stabilizing solution `X`

• The Frobenius norm of the relative residual if `X` exists and is finite.

This syntax does not issue any error message when X fails to exist.

`[X1,X2,D,L] = care(A,B,Q,...,'factor')` returns two matrices `X1`, `X2` and a diagonal scaling matrix `D` such that `X = D*(X2/X1)*D`.

The vector L contains the closed-loop eigenvalues. All outputs are empty when the associated Hamiltonian matrix has eigenvalues on the imaginary axis.

## Examples

### Example 1

Solve Algebraic Riccati Equation

Given

`$A=\left[\begin{array}{cc}-3& 2\\ 1& 1\end{array}\right]\text{ }\text{ }B=\left[\begin{array}{c}0\\ 1\end{array}\right]\text{ }\text{ }C=\left[\begin{array}{cc}1& -1\end{array}\right]\text{ }\text{ }R=3$`

you can solve the Riccati equation

`${A}^{T}X+XA-XB{R}^{-1}{B}^{T}X+{C}^{T}C=0$`

by

```a = [-3 2;1 1] b = [0 ; 1] c = [1 -1] r = 3 [x,l,g] = care(a,b,c'*c,r) ```

This yields the solution

```x x = 0.5895 1.8216 1.8216 8.8188 ```

You can verify that this solution is indeed stabilizing by comparing the eigenvalues of `a` and `a-b*g`.

```[eig(a) eig(a-b*g)] ans = -3.4495 -3.5026 1.4495 -1.4370 ```

Finally, note that the variable `l` contains the closed-loop eigenvalues `eig(a-b*g)`.

```l l = -3.5026 -1.4370 ```

### Example 2

Solve H-infinity (${H}_{\infty }$)-like Riccati Equation

To solve the ${H}_{\infty }$-like Riccati equation

`${A}^{T}X+XA+X\left({\gamma }^{-2}{B}_{1}{B}_{1}^{T}-{B}_{2}{B}_{2}^{T}\right)X+{C}^{T}C=0$`

rewrite it in the `care` format as

`${A}^{T}X+XA-X\text{\hspace{0.17em}}\underset{B}{\underbrace{\left[{B}_{1},{B}_{2}\right]}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}{\underset{R}{\underbrace{\left[\begin{array}{cc}-{\gamma }^{2}I& 0\\ 0& I\end{array}\right]}}}^{-1}\left[\begin{array}{c}{B}_{1}^{T}\\ {B}_{2}^{T}\end{array}\right]X+{C}^{T}C=0$`

You can now compute the stabilizing solution $X$ by

```B = [B1 , B2] m1 = size(B1,2) m2 = size(B2,2) R = [-g^2*eye(m1) zeros(m1,m2) ; zeros(m2,m1) eye(m2)] X = care(A,B,C'*C,R) ```

## Limitations

The $\left(A,B\right)$ pair must be stabilizable (that is, all unstable modes are controllable). In addition, the associated Hamiltonian matrix or pencil must have no eigenvalue on the imaginary axis. Sufficient conditions for this to hold are $\left(Q,A\right)$ detectable when $S=0$ and $R>0$, or

`$\left[\begin{array}{cc}Q& S\\ {S}^{T}& R\end{array}\right]>0$`

## Algorithms

`care` implements the algorithms described in [1]. It works with the Hamiltonian matrix when R is well-conditioned and $E=I$; otherwise it uses the extended Hamiltonian pencil and QZ algorithm.

## References

[1] Arnold, W.F., III and A.J. Laub, "Generalized Eigenproblem Algorithms and Software for Algebraic Riccati Equations," Proc. IEEE®, 72 (1984), pp. 1746-1754

## Version History

Introduced before R2006a

collapse all

### R2019a: `care` is not recommended

Starting in R2019a, use the `icare` command to solve continuous-time Riccati equations. This approach has improved accuracy through better scaling and the computation of `K` is more accurate when `R` is ill-conditioned relative to `care`. Furthermore, `icare` includes an optional `info` structure to gather the implicit solution data of the Riccati equation.

The following table shows some typical uses of `care` and how to update your code to use `icare` instead.

Not RecommendedRecommended

```[X,L,G] = care(A,B,Q,R,S,E)```

`[X,K,L] = icare(A,B,Q,R,S,E,G)` computes the stabilizing solution `X`, the state-feedback gain `K` and the closed-loop eigenvalues `L` of the continuous-time algebraic Riccati equation. For more information, see `icare`.

```[X,L,G,report] = care(A,B,Q,R,S,E)```

`[X,K,L,info] = icare(A,B,Q,R,S,E,G)` computes the stabilizing solution `X`, the state-feedback gain `K`, the closed-loop eigenvalues `L` of the continuous-time algebraic Riccati equation. The `info` structure contains the implicit solution data. For more information, see `icare`.

There are no plans to remove `care` at this time.