Note: This page has been translated by MathWorks. Click here to see

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

Continuous-time algebraic Riccati equation solution

`[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')

`[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-({E}^{T}XB+S){R}^{-1}({B}^{T}XE+{S}^{T})+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}({B}^{T}XE+{S}^{T})$$ 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:

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.

**Solve Algebraic Riccati Equation**

Given

$$A=\left[\begin{array}{cc}-3& 2\\ 1& 1\end{array}\right]\text{\hspace{1em}}\text{\hspace{1em}}B=\left[\begin{array}{c}0\\ 1\end{array}\right]\text{\hspace{1em}}\text{\hspace{1em}}C=\left[\begin{array}{cc}1& -1\end{array}\right]\text{\hspace{1em}}\text{\hspace{1em}}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

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

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

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

rewrite it in the `care`

format as

$${A}^{T}X+XA-X\text{\hspace{0.17em}}\underset{B}{\underbrace{[{B}_{1},{B}_{2}]}}\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)

The $$(A,B)$$ 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 $$(Q,A)$$ detectable when $$S=0$$ and $$R>0$$, or

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

`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.

[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