Mercurial > hg > octave-lyh
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 |