MATLAB: Does the input matrix R in the CARE function have to non-singular? How to solve Ricatti equation with a singular R in Control System Toolbox

careControl System Toolboxgcarenonsingularnonsingularityricattisingularsingularity

I am trying to solve a Continuous-time Algebraic Riccati Equation using the CARE function in the Control Systems Toolbox. I use the form:
[X,L,G] = care(A,B,Q,R,S,E)
specifying the A,B,Q,R,S and E matrices. In the documentation for the CARE function, it mentions the condition R > 0 for the A-B system to be stabilizable and hence for the existence of a solution to the Riccati equation.
Theoretically, there can be cases where R is singular and yet there is a solution to the Ricatti equation. But in the code of the CARE function, there is a check for singularity of R and the function gives an error if R is singular.
Why is the singularity condition not specified in the documentation and how do I solve the Ricatti equation for a singular R?

Best Answer

It is mentioned in the documentation that the condition R > 0 must be satisfied for the A-B system to be stabilizable. If R > 0, i.e. symmetric positive definite, then R cannot be singular since all its eigen values are strictly positive. Hence the conditions R > 0 and R is non-singular are equivalent. It is isn't explicitly mentioned in the documentation but they mean the same thing and hence the check for singularity in the code is an expected behavior.
To solve the case where R is singular and yet the solution to the Ricatti equation exists, please refer to the GCARE function. The CARE function is only meant for the more usual case of non-singular R where as GCARE can handle the exception cases.
Related Question