代码(MATLAB)
这几种判据是互推的,MATLAB也有ctrb函数构造,另外,能控和能观是对偶的。
线性定常系统Gram判断能观测
function key = Gram_control(A,B)
A = sym(A);
B = sym(B);
key = 0;
[n,mu] = size(A);
syms t;
phi = expm(-A*t);
w = int(phi*B*B'*phi',t,0,1);
if rank(w)==n
key = 1;
end
end
秩判据判断能控性
function [H,key,mu] = R_control(A,B)
[n,m] = size(A);
H = [];
key = 0;
mu = 0;
for i = 0:n-1
H = [H,A^i*B];
if(rank(H)==n)
mu = i+1;
key = 1;
break
end
end
end
PBH秩判据判断能观性
function key = PBH_control(A,B)
lambda = eig(A);
[n,m] = size(A);
sum = 0;
for i = 1:length(lambda)
if rank([A-lambda(i)*eye(n),B])==n
sum = sum +1;
end
end
if sum == length(lambda)
key = 1;
else
key = 0;
end
end
PBH特征向量判据
function key = PBH_eig_control(A,B)
A = sym(A);
B = sym(B);
A = A';
[J,~] = eig(A);
[~,n] = size(J);
[~,m] = size(B);
key = 1;
for i = 1:n
h = J(:,i);
h = h';
if isequal(h*B,sym(zeros(1,m)))
key = 0;
break
end
end
end
Gram判断能测性,key=1表示可观测。
function key = Gram_measure(A,C)
syms s;
[n,~] = size(A);
phi_1 = expm(A'*s);
phi_2 = expm(A*s);
if rank(int(phi_1*C'*C*phi_2,s,0,1))==n
key = 1;
else
key = 0;
end
end
秩判据判断能观性
function [key,mu] = R_measure(A,C)
C = sym(C);
A = sym(A);
[n,~] = size(A);
Q = [];
key = 0;
for i = 0:n-1
Q = [Q;C*A^i];
if rank(Q)==n
mu=i+1;
key = 1;
break
end
end
end
PBH判断能观性
function key = PBH_measure(A,C)
A = sym(A);
C = sym(C);
lambda = eig(A);
[n,~] = size(A);
sum = 0;
for i = 1:length(lambda)
l = lambda(i);
if rank([A-l*eye(n);C])==n
sum = sum+1;
end
end
if sum==n
key = 1;
else
key = 0;
end
end
PBH特征向量法判断能观测性
function key = PBH_eig_measure(A,C)
A = sym(A);
C = sym(C);
[p,~] = eig(A);
[~,m] = size(p);
[n,~] = size(C);
key = 1;
for i = 1:m
h = p(:,i);
if isequal([C*h],sym(zeros(n,1)))
key = 0;
break
end
end
end
可逆变换实现能控标准型(D不变)
function [A,B,C,P] = Control_standard(A,B,C)
[n,~] = size(A);
Q = [];
for i = 0:n-1
Q = [Q,A^i*B];
end
if rank(Q)==n
Q_1 = inv(Q);
p1 = Q_1(end,:);
P=[];
for j = 0:n-1
P = [P;p1*A^j];
end
A = P*A*inv(P);
B = P*B;
C = C*inv(P);
else
disp('不存在能控标准型!')
end
end
可逆变换实现能观测标准型(D不变)
function [A,B,C,T] = Measure_standard(A,B,C)
[n,~] = size(A);
Q = [];
for i = 0:n-1
Q = [Q;C*A^i];
end
if rank(Q)==n
Q_1 = inv(Q);
T1 = Q_1(:,end);
T=[];
for j = 0:n-1
T = [T,A^j*T1];
end
A = inv(T)*A*T;
B = inv(T)*B;
C = C*T;
else
disp('不存在能观测标准型!')
end
end
版权声明:本文为weixin_43145941原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。