Consider following System (A, B) given as follows:
A = -205.5237 198.3209 7.2028 0 -0.3256 0 0 198.3209 -205.5237 0 7.2028 0 0 0 0.0646 0 -0.0646 0 0 0 0 0 0.0646 0 -0.0646 0 0 0 0 0 0 0 0 0 0 463.7826 0 0 0 0 -43.4783 0 0 463.7826 0 0 0 0 -43.4783B = 0 0 0 0 0.5600 0 0Lets check the controllability of this system:
>> rank(ctrb(A,B)) = 4You get a different result when you apply PBH (Popov-Belevitch-Hautus) test. In this test we check for the rank of [\lambda*I-A, B] matrix for each eigenvalue lambda. Following code (written by Gopal) performs the PBH test
% %%Controllabilaty test Eigen_A=eig(A);Data_Con = zeros(7,2);for i=1:length(Eigen_A) S=Eigen_A(i)*eye(length(A) ); D=S-A; Control_A=[D B];%Formation of controllability matrix. Rank_Con = rank(Control_A); Data_Con(i,:)= [Eigen_A(i), Rank_Con]; endData_Con%%%%%%%%%%%%%%%%%%This gives
Data_Con = -43.4783 6.0000 -43.4783 6.0000 -403.8457 7.0000 -7.2674 7.0000 0.0000 7.0000 -0.0634 7.0000 0 7.0000where first column gives the eigen values and the second gives the corresponding rank.
As far as I know the controllability information obtained in either way should be equivalent. That means both methods should give same information about the controllability.
On little analysis I found that the matrix A is highly ill-conditioned with a condition number
>> cond(A) = 4.3373e+20Could this be the reason for this anomoly. In other words, you can not rely on the controllability tests as it is ill-conditioned. Gopal tells me that this system pertains to a real system (related to a nuclear reactor) . In that case, how do you deal with such a system. Is there any process by which we can make it well-conditioned so that one can carry out computer simulations with good accuracy.