comparison scripts/control/system/sysmult.m @ 4771:b8105302cfe8

[project @ 2004-02-16 17:45:50 by jwe]
author jwe
date Mon, 16 Feb 2004 17:45:50 +0000
parents 22bd65326ec1
children bdbee5282954
comparison
equal deleted inserted replaced
4770:ef5e598f099b 4771:b8105302cfe8
41 if(nargin < 1) 41 if(nargin < 1)
42 usage("sysmult: sys = sysmult(Asys{,Bsys,...})"); 42 usage("sysmult: sys = sysmult(Asys{,Bsys,...})");
43 endif 43 endif
44 44
45 ## collect all arguments 45 ## collect all arguments
46 arglist = list(); 46 arglist = {};
47 for kk=1:nargin 47 for kk=1:nargin
48 arglist(kk) = varargin{kk}; 48 arglist{kk} = varargin{kk};
49 if(!isstruct(nth(arglist,kk))) 49 if(!isstruct(arglist{kk}))
50 error("sysadd: argument %d is not a data structure",kk); 50 error("sysadd: argument %d is not a data structure",kk);
51 endif 51 endif
52 endfor 52 endfor
53 53
54 ## check system dimensions 54 ## check system dimensions
55 [n,nz,mg,pg,Gyd] = sysdimensions(nth(arglist,1)); 55 [n,nz,mg,pg,Gyd] = sysdimensions(arglist{1});
56 for kk=2:nargin 56 for kk=2:nargin
57 [n,nz,mh,ph,Hyd] = sysdimensions(nth(arglist,kk)); 57 [n,nz,mh,ph,Hyd] = sysdimensions(arglist{kk});
58 if(ph != mg) 58 if(ph != mg)
59 error("arg %d has %d outputs; arg %d has %d inputs",kk,ph,kk-1,mg); 59 error("arg %d has %d outputs; arg %d has %d inputs",kk,ph,kk-1,mg);
60 endif 60 endif
61 [n,nz,mg,pg,Gyd] = sysdimensions(nth(arglist,kk)); # for next iteration 61 [n,nz,mg,pg,Gyd] = sysdimensions(arglist{kk}); # for next iteration
62 endfor 62 endfor
63 63
64 ## perform the multiply 64 ## perform the multiply
65 if(nargin == 2) 65 if(nargin == 2)
66 Asys = nth(arglist,1); Bsys = nth(arglist,2); 66 Asys = arglist{1};
67 Bsys = arglist{2};
67 68
68 [An,Anz,Am,Ap] = sysdimensions(Asys); 69 [An,Anz,Am,Ap] = sysdimensions(Asys);
69 [Bn,Bnz,Bm,Bp] = sysdimensions(Bsys); 70 [Bn,Bnz,Bm,Bp] = sysdimensions(Bsys);
70 71
71 [Aa,Ab,Ac,Ad,Atsam,An,Anz,Astname,Ainname,Aoutname,Ayd] = sys2ss(Asys); 72 [Aa,Ab,Ac,Ad,Atsam,An,Anz,Astname,Ainname,Aoutname,Ayd] = sys2ss(Asys);
101 ## now keep only outputs of A and inputs of B 102 ## now keep only outputs of A and inputs of B
102 sys = sysprune(sys,1:Ap,Am+(1:Bm)); 103 sys = sysprune(sys,1:Ap,Am+(1:Bm));
103 104
104 else 105 else
105 ## multiple systems (or a single system); combine together one by one 106 ## multiple systems (or a single system); combine together one by one
106 sys = nth(arglist,1); 107 sys = arglist{1};
107 for kk=2:length(arglist) 108 for kk=2:length(arglist)
108 sys = sysmult(sys,nth(arglist,kk)); 109 sys = sysmult(sys,arglist{kk});
109 endfor 110 endfor
110 endif 111 endif
111 112
112 endfunction 113 endfunction
113 114