Mercurial > hg > octave-lyh
diff scripts/control/system/sysgroup.m @ 7135:8aa770b6c5bf
[project @ 2007-11-08 18:54:10 by jwe]
author | jwe |
---|---|
date | Thu, 08 Nov 2007 18:54:10 +0000 |
parents | a1dbe9d80eee |
children |
line wrap: on
line diff
--- a/scripts/control/system/sysgroup.m +++ b/scripts/control/system/sysgroup.m @@ -59,118 +59,118 @@ function sys = sysgroup (varargin) - if(nargin < 1) + if (nargin < 1) print_usage (); endif ## collect all arguments arglist = {}; - for kk=1:nargin + for kk = 1:nargin arglist(kk) = varargin{kk}; - if(!isstruct(arglist{kk})) - error("sysgroup: argument %d is not a data structure",kk); + if (! isstruct (arglist{kk})) + error ("sysgroup: argument %d is not a data structure", kk); endif endfor - if(nargin == 2) + if (nargin == 2) ## the usual case; group the two systems together Asys = arglist{1}; Bsys = arglist{2}; ## extract information from Asys, Bsys to consruct sys - Asys = sysupdate(Asys,"ss"); - Bsys = sysupdate(Bsys,"ss"); - [n1,nz1,m1,p1] = sysdimensions(Asys); - [n2,nz2,m2,p2] = sysdimensions(Bsys); - [Aa,Ab,Ac,Ad,Atsam,An,Anz,Ast,Ain,Aout,Ayd] = sys2ss(Asys); - [Ba,Bb,Bc,Bd,Btsam,Bn,Bnz,Bst,Bin,Bout,Byd] = sys2ss(Bsys); + Asys = sysupdate (Asys, "ss"); + Bsys = sysupdate (Bsys, "ss"); + [n1, nz1, m1, p1] = sysdimensions (Asys); + [n2, nz2, m2, p2] = sysdimensions (Bsys); + [Aa, Ab, Ac, Ad, Atsam, An, Anz, Ast, Ain, Aout, Ayd] = sys2ss (Asys); + [Ba, Bb, Bc, Bd, Btsam, Bn, Bnz, Bst, Bin, Bout, Byd] = sys2ss (Bsys); nA = An + Anz; nB = Bn + Bnz; - if(p1*m1*p2*m2 == 0) - error("sysgroup: argument lacks inputs and/or outputs"); + if (p1*m1*p2*m2 == 0) + error ("sysgroup: argument lacks inputs and/or outputs"); - elseif((Atsam + Btsam > 0) & (Atsam * Btsam == 0) ) - warning("sysgroup: creating combination of continuous and discrete systems") + elseif (Atsam + Btsam > 0 && Atsam * Btsam == 0) + warning ("sysgroup: creating combination of continuous and discrete systems") - elseif(Atsam != Btsam) - error("sysgroup: Asys.tsam=%e, Bsys.tsam =%e", Atsam, Btsam); + elseif (Atsam != Btsam) + error ("sysgroup: Asys.tsam=%e, Bsys.tsam =%e", Atsam, Btsam); endif - if(nA*nB > 0) - A12 = zeros(nA,nB); + if (nA*nB > 0) + A12 = zeros (nA, nB); else A12 = []; endif - A = [Aa,A12; A12', Ba]; + A = [Aa, A12; A12', Ba]; - if(nA*m2 > 0) - B12 = zeros(nA,m2); + if (nA*m2 > 0) + B12 = zeros (nA, m2); else B12 = []; endif - if(nB*m1 > 0) - B21 = zeros(nB,m1); + if (nB*m1 > 0) + B21 = zeros (nB, m1); else B21 = []; endif - if(isempty(Ab)) + if (isempty(Ab)) Ab = []; endif - if(isempty(Bb)) + if (isempty (Bb)) Bb = []; endif B = [Ab, B12; B21, Bb]; - if(p1*nB > 0) - C12 = zeros(p1,nB); + if (p1*nB > 0) + C12 = zeros (p1, nB); else C12 = []; endif - if(p2*nA > 0) - C21 = zeros(p2,nA); + if (p2*nA > 0) + C21 = zeros (p2, nA); else C21 = []; endif - C = [Ac, C12; C21,Bc]; + C = [Ac, C12; C21, Bc]; - if(p1*m2 > 0) - D12 = zeros(p1,m2); + if (p1*m2 > 0) + D12 = zeros (p1, m2); else D12 = []; endif - if(p2*m1 > 0) - D21 = zeros(p2,m1); + if (p2*m1 > 0) + D21 = zeros (p2, m1); else D21 = []; endif D = [Ad, D12; D21, Bd]; - tsam = max(Atsam,Btsam); + tsam = max (Atsam, Btsam); ## construct combined signal names; stnames must check for pure gain blocks - if(isempty(Ast)) - stname = Bst; - elseif(isempty(Bst)) - stname = Ast; + if (isempty (Ast)) + stname = Bst; + elseif (isempty (Bst)) + stname = Ast; else - stname= __sysconcat__(Ast,Bst); + stname= __sysconcat__ (Ast, Bst); endif - inname = __sysconcat__(Ain,Bin); - outname = __sysconcat__(Aout,Bout); + inname = __sysconcat__ (Ain, Bin); + outname = __sysconcat__ (Aout, Bout); ## Sort states into continuous first, then discrete - dstates = ones(1,(nA+nB)); - if(An) - dstates(1:(An)) = zeros(1,An); + dstates = ones (1, (nA+nB)); + if (An) + dstates(1:(An)) = zeros (1, An); endif - if(Bn) - dstates((nA+1):(nA+Bn)) = zeros(1,Bn); + if (Bn) + dstates((nA+1):(nA+Bn)) = zeros (1, Bn); endif - [tmp,pv] = sort(dstates); + [tmp, pv] = sort (dstates); A = A(pv,pv); B = B(pv,:); C = C(:,pv); - stname = stname(pv); + stname = stname (pv); ## check for duplicate signal names inname = __sysgroupn__ (inname, "input"); @@ -178,17 +178,17 @@ outname = __sysgroupn__ (outname, "output"); ## mark discrete outputs - outlist = find([Ayd, Byd]); + outlist = find ([Ayd, Byd]); ## build new system - sys = ss(A,B,C,D,tsam,An+Bn,Anz+Bnz,stname,inname,outname); + sys = ss (A, B, C, D, tsam, An+Bn, Anz+Bnz, stname, inname, outname); else ## multiple systems (or a single system); combine together one by one sys = arglist{1}; - for kk=2:length(arglist) - printf("sysgroup: kk=%d\n",kk); - sys = sysgroup(sys,arglist{kk}); + for kk = 2:length(arglist) + printf ("sysgroup: kk=%d\n", kk); + sys = sysgroup (sys, arglist{kk}); endfor endif