Accelerating the pace of engineering and science

ctrb

Controllability matrix

Co = ctrb(sys)

Description

ctrb computes the controllability matrix for state-space systems. For an n-by-n matrix A and an n-by-m matrix B, ctrb(A,B) returns the controllability matrix

 $Co=\left[\begin{array}{ccccc}B& AB& {A}^{2}B& \dots & {A}^{n-1}B\end{array}\right]$ (1-1)

where 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 executing

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

The system is controllable if Co has full rank n.

Examples

Check if the system with the following data

```A =
1     1
4    -2

B =
1    -1
1    -1
```

is controllable. Type

```Co=ctrb(A,B);

% Number of uncontrollable states
unco=length(A)-rank(Co)
```

These commands produce the following result.

```unco =
1
```

Limitations

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.

$A=\begin{array}{cc}\left[\begin{array}{cc}1& \delta \\ 0& 1\end{array}\right],& B=\left[\begin{array}{l}1\\ \delta \end{array}\right]\end{array}$

This pair is controllable if $\delta \ne 0$ but if $\delta <\sqrt{eps}$, where eps is the relative machine precision. ctrb(A,B) returns

$\left[\begin{array}{cc}B& AB\end{array}\right]=\left[\begin{array}{cc}1& 1\\ \delta & \delta \end{array}\right]$

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