home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21fb.zip / octave / SCRIPTS.ZIP / scripts / control / syscont.m < prev    next >
Encoding:
Text File  |  1999-12-15  |  2.7 KB  |  88 lines

  1. ## Copyright (C) 1996 Auburn University.  All Rights Reserved.
  2. ##
  3. ## This file is part of Octave. 
  4. ##
  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 
  7. ## Free Software Foundation; either version 2, or (at your option) any 
  8. ## later version. 
  9. ## 
  10. ## Octave is distributed in the hope that it will be useful, but WITHOUT 
  11. ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
  12. ## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
  13. ## for more details.
  14. ## 
  15. ## You should have received a copy of the GNU General Public License 
  16. ## along with Octave; see the file COPYING.  If not, write to the Free 
  17. ## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. 
  18.  
  19. ## -*- texinfo -*-
  20. ## @deftypefn {Function File} { [@var{csys}, @var{Acd}, @var{Ccd}] = } syscont (@var{sys})
  21. ## Extract the purely continuous subsystem of an input system.
  22. ## 
  23. ## @strong{Inputs}
  24. ## @var{sys} is a system data structure
  25. ## 
  26. ## @strong{Outputs}
  27. ## @table @var
  28. ## @item csys
  29. ##  is the purely continuous input/output connections of @var{sys}
  30. ## @item Acd, Ccd:
  31. ##  connections from discrete states to continuous states,
  32. ##                discrete states to continuous outputs, respectively.
  33. ## 
  34. ##  returns @var{csys} empty if no continuous/continous path exists
  35. ## @end table
  36. ## 
  37. ## @end deftypefn
  38.  
  39. function [csys, Acd, Ccd] = syscont (sys)
  40.  
  41.   ## Written by John Ingram August 1996
  42.  
  43.   save_empty = empty_list_elements_ok;
  44.   empty_list_elements_ok = 1;
  45.  
  46.   if (nargin != 1)
  47.     usage("[csys,Acd,Ccd,Dcd] = syscont(sys)");
  48.   elseif (!is_struct(sys))
  49.     error("sys must be in system data structure form");
  50.   endif
  51.  
  52.   sys = sysupdate(sys,"ss");
  53.   [n_tot,st_c,st_d,y_c,y_d] = syscont_disc(sys);    # get ranges
  54.  
  55.   ## assume there's nothing there; build partitions as appropriate
  56.   Acc = Acd = Bcc = Ccc = Ccd = Dcc = [];
  57.  
  58.   if(isempty(st_c) & isempty(y_c))
  59.     error("syscont: expecting continous states and/or continous outputs");
  60.   elseif (isempty(st_c))
  61.     warning("syscont: no continuous states");
  62.   elseif(isempty(y_c))
  63.     warning("syscont: no continuous outputs");
  64.   endif
  65.  
  66.   [sys_a, sys_b, sys_c, sys_d ] = sys2ss(sys);
  67.   [sys_stname, sys_inname, sys_outname] = sysgetsignals(sys);
  68.   [sys_n, sys_nz, sys_m, sys_p] = sysdimensions(sys);
  69.   if(!isempty(st_c))
  70.     Acc = sys_a(st_c,st_c);
  71.     stname = sys_stname(st_c);
  72.     Bcc = sys_b(st_c,:);
  73.     Ccc = sys_c(y_c,st_c);
  74.     Acd = sys_a(st_c,st_d);
  75.   else
  76.     stname=[];
  77.   endif
  78.   outname = sys_outname(y_c);
  79.   Dcc = sys_d(y_c,:);
  80.   Ccd = sys_c(y_c,st_d);
  81.   inname = sys_inname;
  82.   
  83.   csys = ss2sys(Acc,Bcc,Ccc,Dcc,0,sys_n,0,stname,inname,outname);
  84.  
  85.   empty_list_elements_ok = save_empty;
  86.  
  87. endfunction
  88.