[Math] analytic solution to structured algebraic Riccati equation

control theorylinear algebraoptimization

In solving a model I have written down for a research paper, I am left with two Algebraic Riccati Equations, that is I need to solve for $X$ in the equation

\begin{align*}
X = A^\top (X + XB(R + B^\top X B)^{-1}B^\top X))A + Q.
\end{align*}

These arise from solving a LQG problem. From what I have picked up over the last few days, there is no general solution to this equation, i.e. an $f$ such that $X = f(A,B,R,Q)$ for all $(A,B,R,Q)$. However, there seems to be many special instances in which substantial analytical progress can be made.

My problem has quite a bit of structure, and I wonder if I could be pointed to some results that would help me. My problem is characterized by:

(1) $B = (1,1,0,0)$ for one problem and $B = (0,0,1,0)$ for the other, (2) $R$ a positive scalar, (3) $Q$ symmetric, and (4) (for one problem) $A$ also symmetric and $Q$ diagonal.

If anyone is aware of general results or methods for approach that might be useful in my particular case, I would be very grateful. It would be nice if these could be stated with a minimum of engineering jargon, my background is more in math and some of the terminology is not helpful.

Best Answer

There is no analytic method and for real-world problems in control theory, you do not need an analytic solution.

Here is the solution suggested from Vasile Sima which I wrote the C++ codes based upon here.

/*
This file contains a continuous-time algebraic Riccati equation solver based on the explanations from Dr. Vasile Sima.
Further reference: Sima, Vasile. Algorithms for linear-quadratic optimization. Vol. 200. CRC Press, 1996.
*/

// A C++ implementation of a Continuous-time Algebraic Riccati Equation (CARE) solver based on Schur vectors.

// Solves a CARE, A'X + XA - XBR^(-1)B'X + Q = 0, using Schur vectors method, with A and Q n-by-n, B n-by-m, and R m-by-m real matrices, and Q and R symmetric, R positive definite. It is assumed, e.g., that the matrix pair (A,B) is stabilizable, and the matrix pair (C,A) is detectable, where Q = C'C, and rank(C) = rank(Q).

// Main steps:

// 1. Construct the Hamiltonian matrix H, H = [ A -B*(R\B'); Q -A' ]; (in MATLAB notation).

// 2. Reduce H to a real Schur form S and accumulate the transformations in U, S = U'HU, U orthogonal.

// 3. Reorder the real Schur form S so that all n stable eigenvalues are moved to the leading part of S, accumulating the transformations in U.

// 4. Compute the unique positive-semidefinite stabilizing solution X, X = U(n+1:2n,1:n)*U(1:n,1:n)^(-1).

// 5. Symmetrize X, X = ( X + X' )/2.

If you are using MATLAB, you can simply use care, dare and even lqg commands.

An ad-hoc solution is using Genetic Algorithm to solve these problems via C++ (solver, NLP demo) or MATLAB.

Related Question