'ctrbf' controllability numerical PROBLEM

16 views (last 30 days)
Christian Olsen
Christian Olsen on 10 Feb 2019
Commented: Christian Olsen on 12 Feb 2019
Hello people,
I have a big problem here, I can't make the ctrbf function to work in the way I think it is supposed to.
I have a system wich I have written in Matlab directly in the state space form, so I typed in the matrices A,B,C,D. (A is 4x4, B 4x1, C 1x4 and D=0)
I created the reachability matrix R=ctrb(A,B) looking for its rank wich I discovered was 4, so a complete reachable system, no problem so far.
Then I did an output feedback without dinamic obtaining a new system (Ah,Bh,Ch,Dh).
At this point I calculated again the reachability matrix Rh as Rh=ctrb(Ah,Bh) and checked its rank finding it was now 3.
Since Rh is 4x4 and its rank is 3 I concluded that the new system has lost the complete reachability property.
I wanted to know wich was the eigenvalue now unreachable so I used the Matlab function "ctrbf" on the system matrices like this: [At,Bt,Ct,T] = ctrbf(Ah,Bh,Ch);
I looked at the 'At' matrix expecting to see a partitioned matrix like the one you can see in the 'ctrbf' help section, so At=[Auc,0; A21,Ac]; where Auc is the uncontrollable portion of my system (Ah,Bh).
The problem is that where I want to see zeros in the At matrix I actually see non-zero values, and I am not talking only about very low numbers but big numbers (comparable with the ones I see in the controllable portion Ac) too.
So it seems that while Rh=ctrb(Ah,Bh) tells me I do not have the complete controllability the result of the 'ctrbf' instruction tells me the system can't be partitioned (reduced) to the controllability staircase form and to me this means the system is actually totally reachable. This is a big contraddiction.
Please help me 'cos I really don't know where to find a solution, I am stuck!
  2 Comments
M
M on 12 Feb 2019
Can you share the matrices A,B,C and D ?
Christian Olsen
Christian Olsen on 12 Feb 2019
i think i discovered where the problem was.
The rank function takes as its second argument the so called
tolerance. If i put in a sufficently small number the function gives me 4, so the rank is 4 and not 3.
That can explain why i found the incoherence.

Sign in to comment.

Answers (0)

Categories

Find more on Matrix Computations in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!