Mercurial > octave-nkf
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 |