Mercurial > hg > octave-nkf
comparison scripts/control/sysdup.m @ 3228:dbcc24961c44
[project @ 1998-12-09 18:42:12 by jwe]
author | jwe |
---|---|
date | Wed, 09 Dec 1998 18:42:13 +0000 |
parents | ba1c7cdc6090 |
children | 28aba52a2368 |
comparison
equal
deleted
inserted
replaced
3227:e090571062ee | 3228:dbcc24961c44 |
---|---|
1 # Copyright (C) 1996 A. Scottedward Hodel | 1 # Copyright (C) 1996,1998 A. Scottedward Hodel |
2 # | 2 # |
3 # This file is part of Octave. | 3 # This file is part of Octave. |
4 # | 4 # |
5 # Octave is free software; you can redistribute it and/or modify it | 5 # Octave is free software; you can redistribute it and/or modify it |
6 # under the terms of the GNU General Public License as published by the | 6 # under the terms of the GNU General Public License as published by the |
41 # (input_list) | | (output_list) | 41 # (input_list) | | (output_list) |
42 # -------------------- | 42 # -------------------- |
43 | 43 |
44 # A. S. Hodel August 1995 | 44 # A. S. Hodel August 1995 |
45 # modified by John Ingram July 1996 | 45 # modified by John Ingram July 1996 |
46 # $Revision: 1.2 $ | 46 # $Revision: 2.0.0.0 $ |
47 | 47 |
48 save_val = implicit_str_to_num_ok; # save for later | 48 save_val = implicit_str_to_num_ok; # save for later |
49 implicit_str_to_num_ok = 1; | 49 implicit_str_to_num_ok = 1; |
50 | 50 |
51 if( nargin != 3) | 51 if( nargin != 3) |
54 | 54 |
55 if( !is_struct(Asys)) | 55 if( !is_struct(Asys)) |
56 error("Asys must be a system data structure (see ss2sys, tf2sys, or zp2sys)") | 56 error("Asys must be a system data structure (see ss2sys, tf2sys, or zp2sys)") |
57 endif | 57 endif |
58 | 58 |
59 if (Asys.sys(4) != 1) | 59 Asys = sysupdate(Asys,"ss"); |
60 Asys = sysupdate(Asys,'ss'); | 60 [nn,nz,mm,pp] = sysdimensions(Asys); |
61 endif | 61 [aa,bb,cc,dd] = sys2ss(Asys); |
62 | |
63 mm = rows(Asys.inname); | |
64 pp = rows(Asys.outname); | |
65 | 62 |
66 # first duplicate inputs | 63 # first duplicate inputs |
67 if(is_vector(input_list)) | 64 if(is_vector(input_list)) |
68 for ii=1:length(input_list); | 65 for ii=1:length(input_list); |
69 Asys.b(:,mm+ii) = Asys.b(:,input_list(ii)); | 66 bb(:,mm+ii) = bb(:,input_list(ii)); |
70 Asys.d(:,mm+ii) = Asys.d(:,input_list(ii)); | 67 dd(:,mm+ii) = dd(:,input_list(ii)); |
71 end | 68 end |
72 elseif(!isempty(input_list)) | 69 elseif(!isempty(input_list)) |
73 error("input_list must be a vector or empty"); | 70 error("input_list must be a vector or empty"); |
74 endif | 71 endif |
75 | 72 |
76 | 73 |
77 # now duplicate outputs | 74 # now duplicate outputs |
78 osize = min(size(output_list)); | 75 osize = min(size(output_list)); |
79 if(osize == 1) | 76 if(osize == 1) |
80 for ii=1:length(output_list); | 77 for ii=1:length(output_list); |
81 Asys.c(pp+ii,:) = Asys.c(output_list(ii),:); | 78 cc(pp+ii,:) = cc(output_list(ii),:); |
82 Asys.d(pp+ii,:) = Asys.d(output_list(ii),:); | 79 dd(pp+ii,:) = dd(output_list(ii),:); |
83 end | 80 end |
84 elseif(osize != 0) | 81 elseif(osize != 0) |
85 error("output_list must be a vector or empty"); | 82 error("output_list must be a vector or empty"); |
86 endif | 83 endif |
87 | 84 |
88 yd = Asys.yd(output_list); | 85 [stnam,innam,outnam,yd] = sysgetsignals(Asys); |
89 Asys.yd = [Asys.yd yd]; | 86 tsam = sysgettsam(Asys); |
90 | 87 |
91 # give default names to the added inputs | 88 # pack system and then rename signals |
89 retsys = ss2sys(aa,bb,cc,dd,tsam,nn,nz); | |
90 retsys = syssetsignals(retsys,"in",innam,1:mm); | |
91 retsys = syssetsignals(retsys,"out",outnam,1:pp); | |
92 retsys = syssetsignals(retsys,"yd",yd,1:pp); | |
93 | |
94 # update added input names | |
92 for ii=(mm+1):(mm+length(input_list)) | 95 for ii=(mm+1):(mm+length(input_list)) |
93 orig_name = Asys.inname(input_list(ii-mm),:); | 96 onum = input_list(ii-mm); |
94 | 97 strval = sprintf("%s(dup)",sysgetsignals(retsys,"in",onum,1) ); |
95 #disp("sysdup: orig_name=") | 98 retsys = syssetsignals(retsys,"in",strval,ii); |
96 #orig_name | |
97 #disp("/sysdup") | |
98 | |
99 strval = [dezero(orig_name),"(dup)"]; | |
100 | |
101 #disp("sysdup: strval=") | |
102 #strval | |
103 #disp("/sysdup") | |
104 | |
105 Asys.inname(ii,1:length(strval)) = [strval]; | |
106 | |
107 #disp("sysdup: resulting Asys.inname:") | |
108 #Asys.inname | |
109 #disp("/sysdup"); | |
110 | |
111 endfor | 99 endfor |
112 | 100 |
101 # update added output names/discrete flags | |
113 # give default names to the added outputs | 102 # give default names to the added outputs |
114 for jj=(pp+1):(pp+length(output_list)) | 103 for jj=(pp+1):(pp+length(output_list)) |
115 if(isstr(Asys.outname)) | 104 onum = output_list(jj-pp); |
116 orig_name =Asys.outname; | 105 strval = sprintf("%s(dup)",sysgetsignals(retsys,"out",onum,1) ); |
117 else | 106 retsys = syssetsignals(retsys,"out",strval,jj); |
118 orig_name = Asys.outname(output_list(jj-pp),:); | 107 dflg = sysgetsignals(retsys,"yd",onum); |
119 endif | 108 retsys = syssetsignals(retsys,"yd",dflg,jj); |
120 strval = [dezero(orig_name),"(dup)"]; | |
121 Asys.outname(jj,1:length(strval)) = [strval]; | |
122 | |
123 endfor | 109 endfor |
124 | |
125 | |
126 | |
127 if(max(size(Asys.d)) > 1 ) | |
128 Asys.sys = [2 0 0 1]; # change default form to state space | |
129 # tf and zp are no longer relevant | |
130 endif | |
131 | |
132 retsys = Asys; | |
133 | 110 |
134 implicit_str_to_num_ok = save_val; # restore value | 111 implicit_str_to_num_ok = save_val; # restore value |
135 | 112 |
136 endfunction | 113 endfunction |