Getting the error "In the "lyap(A,Q,...)" command, A and Q must be square matrices of the same size." even though my A and Q matrix are the same size
4 views (last 30 days)
Show older comments
So, I am trying to find the observability Gramian of a system using the 'lyap' function in MatLab. My code works for my controllability Gramian but not the observability. I have checked my inputs for my 'A' and 'Q' matricies (in my code they are called 'transpose(A)' and 'transpose(C)*C) and they are both 3x3 matricies and yet I am getting this error. I have copied my code below, if anyone has any ideas please let me know - thank you!
clc;
A = [-3 1 1;0 -2 1; 0 0 -1];
B = [2;2;1];
C = [1 -1 0];
% compute the controllability matrix
C_mat = ctrb(A,B);
%let's see if the system is controllable
if(length(A)==rank(C_mat))
fprintf('Controllable\n');
else
fprintf('System is not controllable\n');
end
% Compute controllable subspace
[~,new] = rref(C_mat);
disp('The controllable subspace is:')
C_subspace = C_mat(:, new)
% compute the observability matrix
O_mat = obsv(A,C);
%let's see if the system is controllable
if(length(A)==rank(O_mat))
fprintf('Observable\n');
else
fprintf('System is not observable\n');
end
% Compute controllable subspace
[~,new] = rref(O_mat);
disp('The observable subspace is:')
O_subspace = O_mat(new, :)
%%%Part B%%%
%Controllability Gramian
% C_gram=(-B*transpose(B))/(A+transpose(A))
C_gram=lyap(transpose(A),-B*transpose(B))
%Test if CG is nonsingular i.e. det = 0
det(C_gram) %matrix is singular
%Observability Gramian
O_gram=lyap(transpose(A),-C*transpose(C))
%Test if OG is nonsingluar
det(O_gram) %matrix is nonsingluar
%%%Part C%%%
null(O_gram)
0 Comments
Answers (1)
Walter Roberson
on 7 Dec 2020
Your code does not have transpose(C)*C. It has C*transpose(C)
0 Comments
See Also
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!