www.gusucode.com > rctobsolete 工具箱 matlab源码程序 > rctobsolete/lmi/uinfo.m
% Retrieves information about some block-diagonal uncertainty % structure DELTA created with UBLOCK/UDIAG % % UINFO(DELTA) displays the characteristics of each % uncertainty block in DELTA % % N = UINFO(DELTA) returns the number N of uncertainty % blocks % % [DIMS,TYP,BND] = UINFO(DELTA,K) % returns the dimensions, type, and bounds for the % K-th uncertainty block in DELTA % % % See also UBLOCK, UDIAG. % Author: P. Gahinet 6/94 % Copyright 1995-2004 The MathWorks, Inc. function [dims,type,bnd]=uinfo(delta,k); if ~any(nargin==[1 2]), error('for correct calling syntax, type: help uinfo'); end if nargout, nblck=size(delta,2); if nargin==1, dims=nblck; typ=[]; bnd=[]; else if k < 0 | k > nblck, error(sprintf('K should be an integer between 1 and %d',nblck)); end b=delta(:,k); dims=b(1:2)'; lin=b(3); time=b(4); comp=b(5); scal=b(6); m=b(7); n=b(8); bnd=reshape(b(9:8+m*n),m,n); % if lin, type='l'; else type='nl'; end % if time, type=[type 'tv']; else type=[type 'ti']; end if lin, if time, type='ltv'; else type='lti'; end else if time, type='nl'; else type='nlm'; end end if comp==0, type=[type 'r']; else type=[type 'c']; end if scal==1, type=[type 's']; else type=[type 'f']; end end else dispstr=str2mat(... ' block dims type real/cplx full/scal bounds',[]); bn=1; for b=delta, lin=b(3); time=b(4); comp=b(5); scal=b(6); m=b(7); n=b(8); bnd=reshape(b(9:8+m*n),m,n); % if lin, type=' L'; else type='NL'; end % if time, type=[type 'TV']; else type=[type 'TI']; end if lin, if time, type='LTV'; else type='LTI'; end else if time, type=' NL'; else type='NLM'; end end if comp==0, rc='r'; elseif comp==1, rc='c'; else rc='?'; end if scal==1, fs='s'; elseif scal==0, fs='f'; else fs='?'; end if m==1 & n==1, bnd=['norm <= ' num2str(bnd)]; elseif m>1 & n>1, bnd='freq. dependent'; else bnd=['sector {' num2str(bnd(1)) ',' num2str(bnd(2)) '}']; end str=[' ' num2str(bn) ' ' num2str(b(1)) 'x' num2str(b(2)) ]; str=[str ' ' type ' ' rc ' ' fs ' ' bnd ]; dispstr=str2mat(dispstr,str); bn=bn+1; end disp(' '); disp(dispstr); disp(' '); end