能控性与能观性的几种判据以及各自标准型转化

代码(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版权协议,转载请附上原文出处链接和本声明。