www.gusucode.com > rctobsolete 工具箱 matlab源码程序 > rctobsolete/mutools/commands/cf2sys.m
% function sysout=cf2sys(sysrcf) % % Creates a SYSTEM/CONSTANT/VARYING matrix from a % coprime factorization. % % See Also: NCFSYN % Copyright 1991-2004 MUSYN Inc. and The MathWorks, Inc. function sysout=cf2sys(syscf) [type,p,m,n]=minfo(syscf); if p==m, error('input not a coprime factor system') return end if type=='syst' [a,b,c,d]=unpck(syscf); if p>m, pout=p-m; d1=d(1:pout,:); d2=d(pout+1:p,:); c2=c(pout+1:p,:); aout=a-b*(d2\c2); bout=b/d2; cout=[eye(pout) -d1/d2]*c; dout=d1/d2; sysout=pck(aout,bout,cout,dout); else mout=m-p; d1=d(:,1:mout); d2=d(:,mout+1:m); b2=b(:,mout+1:m); aout=a-(b2/d2)*c; bout=b*[eye(mout); -d2\d1]; cout=d2\c; dout=d2\d1; sysout=pck(aout,bout,cout,dout); end end if type=='cons' if p>m, pout=p-m; d1=syscf(1:pout,:); d2=syscf(pout+1:p,:); sysout=d1/d2; end; % if p>m if m>p, mout=m-p; d1=syscf(:,1:mout); d2=syscf(:,mout+1:m); sysout=d2\d1; end; % if m>p end; % if type=='cons' if type=='vary', if p>m, pout=p-m; sysout=mmult(sel(syscf,1:pout,1:m),vinv(sel(syscf,pout+1:p,1:m))); end; % if p>m if m>p, mout=m-p; sysout=mmult(vinv(sel(syscf,1:p,mout+1:m)),sel(syscf,1:p,1:mout)); end; % if m>p end; % if type=='vary' % %