care
(Not recommended) Continuous-time algebraic Riccati equation solution
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 solutionX
of the continuous-time algebraic Riccati equation
Thecare
function also returns the gain matrix,
.
[X,L,G] = care(A,B,Q,R,S,E)
solves the more general Riccati equation
When omitted,R
,S
, andE
are set to the default valuesR=I
,S=0
, andE=I
. Along with the solutionX
,care
returns the gain matrix
and a vectorL
of closed-loop eigenvalues, where
L=eig(A-B*G,E)
[X,L,G,report] = care(A,B,Q,...)
returns a diagnosisreport
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 matricesX1
,X2
and a diagonal scaling matrixD
such thatX = 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
you can solve the Riccati equation
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 ofa
anda-b*g
.
[eig(a) eig(a-b*g)] ans = -3.4495 -3.5026 1.4495 -1.4370
Finally, note that the variablel
contains the closed-loop eigenvalueseig(a-b*g)
.
l l = -3.5026 -1.4370
Example 2
Solve H-infinity ( )-like Riccati Equation
To solve the -likeRiccati equation
rewrite it in thecare
format as
You can now compute the stabilizing solution 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 pair must bestabilizable (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 detectable when and , or
Algorithms
care
implements the algorithms described in[1]. It works with the Hamiltonian matrix when R is well-conditioned and
; 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