Main Content


Controllability matrix


Co = ctrb(A,B)
Co = ctrb(sys)


Co = ctrb(A,B) returns the controllability matrix:


where A is an n-by-n matrix, B is an n-by-m matrix, and Co has n rows and nm columns.

Co = ctrb(sys) calculates the controllability matrix of the state-space LTI object sys. This syntax is equivalent to:

Co = ctrb(sys.A,sys.B);

The system is controllable if Co has full rank n.


collapse all

Define A and B matrices.

A = [1  1;
     4 -2];
B = [1 -1;
     1 -1];

Compute controllability matrix.

Co = ctrb(A,B);

Determine the number of uncontrollable states.

unco = length(A) - rank(Co)
unco = 1

The uncontrollable state indicates that Co does not have full rank 2. Therefore the system is not controllable.


Estimating the rank of the controllability matrix is ill-conditioned; that is, it is very sensitive to roundoff errors and errors in the data. An indication of this can be seen from this simple example.


This pair is controllable if δ0 but if δ<eps, where eps is the relative machine precision. ctrb(A,B) returns


which is not full rank. For cases like these, it is better to determine the controllability of a system using ctrbf.

Version History

Introduced before R2006a

See Also