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