主函数:
clear; %三阶矩阵 A=[0,1,-1;-6,-11,6;-6,-11,5]; B=[0;0;1]; C=[1,0,0]; n=size(A,1); Q1=zeros(n); Q2=zeros(n); J=jordan(A)%约当阵输出 %判断是否能控 for i=0:n-1 Q1(:,i+1)=A^i*B; end n1=rank(Q1); %判断是否能观测 for j=0:n-1 Q2(j+1,:)=C*A^j; end n2=rank(Q2); %%转化成能控、能观标准型 if n1==n [A1,B1,C1,T]=nengkong(A,B,C,n) end if n2==n [A2,B2,C2,K]=nengguan(A,B,C,n) end
能控标准型转换:
function [D,E,F,T] = nengkong(A,B,C,n)
%能控标准型转换
T=zeros(n,n);
T(:,1)=B;
%求其特征多项式
a=poly(A);
for i=2:n
T(:,i)=A*T(:,i-1)+a(1,i)*T(:,1);
end
T=fliplr(T);
%得到新的A矩阵
D=inv(T)*A*T;
%得到新的B矩阵
E=inv(T)*B;
%得到新的C矩阵
F=C*T;
end
能观标准型转换:
function [D,E,F,T] = nengkong(A,B,C,n)
%能控标准型转换
T=zeros(n,n);
T(:,1)=B;
%求其特征多项式
a=poly(A);
for i=2:n
T(:,i)=A*T(:,i-1)+a(1,i)*T(:,1);
end
T=fliplr(T);
%得到新的A矩阵
D=inv(T)*A*T;
%得到新的B矩阵
E=inv(T)*B;
%得到新的C矩阵
F=C*T;
end