马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
function Gs=sscanform(G,type)<BR>switch type <BR> case 'ctrl'<BR> G=tf(G); Gs=[];<BR> G.num{1}=G.num{1}/G.den{1}(1);% 传递函数归一化<BR> G.den{1}=G.den{1}/G.den{1}(1); d=G.num{1}(1);<BR> G1=G; G1=G1-d;<BR> num=G1.num{1};den=G1.den{1};n=length(G.den{1})-1;<BR> A=[zeros(n-1,1) eye(n-1);-den(end:-1:2)];<BR> B=[zeros(n-1,1);1]; C=num(end:-1:2); D=d;<BR> Gs=ss(A,B,C,D,'Ts',G.Ts);<BR> case 'obsv'<BR> Gc=sscanform(G,'ctrl');<BR> Gs=ss(Gc.a',Gc.c',Gc.b',Gc.d','Ts',G.Ts);<BR> otherwise<BR> error('可能矩阵不能控(观)')<BR>end<BR>这里如果我num的元素个数和C向量不一样,为什么用 C=num(end:-1:2); 后它会在后面自动补零 |