comparison scripts/control/system/syscont.m @ 4460:cef48c4b902d

[project @ 2003-07-11 18:37:48 by jwe]
author jwe
date Fri, 11 Jul 2003 18:37:48 +0000
parents 22bd65326ec1
children b8105302cfe8
comparison
equal deleted inserted replaced
4459:75ee1995d2b4 4460:cef48c4b902d
39 ## Author: John Ingram <ingraje@eng.auburn.edu> 39 ## Author: John Ingram <ingraje@eng.auburn.edu>
40 ## Created: August 1996 40 ## Created: August 1996
41 41
42 function [csys, Acd, Ccd] = syscont (sys) 42 function [csys, Acd, Ccd] = syscont (sys)
43 43
44 save_empty = empty_list_elements_ok; 44 save_warn_empty_list_elements = warn_empty_list_elements;
45 empty_list_elements_ok = 1; 45 unwind_protect
46 warn_empty_list_elements = 0;
46 47
47 if (nargin != 1) 48 if (nargin != 1)
48 usage("[csys,Acd,Ccd,Dcd] = syscont(sys)"); 49 usage("[csys,Acd,Ccd,Dcd] = syscont(sys)");
49 elseif (!isstruct(sys)) 50 elseif (!isstruct(sys))
50 error("sys must be in system data structure form"); 51 error("sys must be in system data structure form");
51 endif 52 endif
52 53
53 sys = sysupdate (sys, "ss"); 54 sys = sysupdate (sys, "ss");
54 [n_tot, st_c, st_d, y_c, y_d] = __syscont_disc__ (sys); # get ranges 55 [n_tot, st_c, st_d, y_c, y_d] = __syscont_disc__ (sys); # get ranges
55 56
56 ## assume there's nothing there; build partitions as appropriate 57 ## assume there's nothing there; build partitions as appropriate
57 Acc = Acd = Bcc = Ccc = Ccd = Dcc = []; 58 Acc = Acd = Bcc = Ccc = Ccd = Dcc = [];
58 59
59 if(isempty(st_c) & isempty(y_c)) 60 if(isempty(st_c) & isempty(y_c))
60 error("syscont: expecting continous states and/or continous outputs"); 61 error("syscont: expecting continous states and/or continous outputs");
61 elseif (isempty(st_c)) 62 elseif (isempty(st_c))
62 warning("syscont: no continuous states"); 63 warning("syscont: no continuous states");
63 elseif(isempty(y_c)) 64 elseif(isempty(y_c))
64 warning("syscont: no continuous outputs"); 65 warning("syscont: no continuous outputs");
65 endif 66 endif
66 67
67 [sys_a, sys_b, sys_c, sys_d ] = sys2ss(sys); 68 [sys_a, sys_b, sys_c, sys_d ] = sys2ss(sys);
68 [sys_stname, sys_inname, sys_outname] = sysgetsignals(sys); 69 [sys_stname, sys_inname, sys_outname] = sysgetsignals(sys);
69 [sys_n, sys_nz, sys_m, sys_p] = sysdimensions(sys); 70 [sys_n, sys_nz, sys_m, sys_p] = sysdimensions(sys);
70 if(!isempty(st_c)) 71 if(!isempty(st_c))
71 Acc = sys_a(st_c,st_c); 72 Acc = sys_a(st_c,st_c);
72 stname = sys_stname(st_c); 73 stname = sys_stname(st_c);
73 Bcc = sys_b(st_c,:); 74 Bcc = sys_b(st_c,:);
74 Ccc = sys_c(y_c,st_c); 75 Ccc = sys_c(y_c,st_c);
75 Acd = sys_a(st_c,st_d); 76 Acd = sys_a(st_c,st_d);
76 else 77 else
77 stname=[]; 78 stname=[];
78 endif 79 endif
79 outname = sys_outname(y_c); 80 outname = sys_outname(y_c);
80 Dcc = sys_d(y_c,:); 81 Dcc = sys_d(y_c,:);
81 Ccd = sys_c(y_c,st_d); 82 Ccd = sys_c(y_c,st_d);
82 inname = sys_inname; 83 inname = sys_inname;
83 84
84 csys = ss2sys(Acc,Bcc,Ccc,Dcc,0,sys_n,0,stname,inname,outname); 85 csys = ss2sys(Acc,Bcc,Ccc,Dcc,0,sys_n,0,stname,inname,outname);
85 86
86 empty_list_elements_ok = save_empty; 87 unwind_protect_cleanup
88 warn_empty_list_elements = save_warn_empty_list_elements;
89 end_unwind_protect
87 90
88 endfunction 91 endfunction