home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21eb.zip / octave / SCRIPTS.ZIP / scripts.fat / control / abcddim.m next >
Text File  |  1999-04-29  |  3KB  |  99 lines

  1. # Copyright (C) 1993, 1994, 1995 John W. Eaton
  2. # This file is part of Octave.
  3. # Octave is free software; you can redistribute it and/or modify it
  4. # under the terms of the GNU General Public License as published by the
  5. # Free Software Foundation; either version 2, or (at your option) any
  6. # later version.
  7. # Octave is distributed in the hope that it will be useful, but WITHOUT
  8. # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  9. # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  10. # for more details.
  11. # You should have received a copy of the GNU General Public License
  12. # along with Octave; see the file COPYING.  If not, write to the Free
  13. # Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  14.  
  15. function [n, m, p] = abcddim (a, b, c, d)
  16.  
  17. # Usage: [n, m, p] = abcddim (a, b, c, d)
  18. #
  19. # Check for compatibility of the dimensions of the matrices defining
  20. # the linear system (a, b, c, d).
  21. #
  22. # Returns n = number of system states,
  23. #         m = number of system inputs,
  24. #         p = number of system outputs.
  25. #
  26. # Note: n = 0 (pure gain block) is returned without warning.
  27. #
  28. # Returns n = m = p = -1 if the system is not compatible.
  29. #
  30. # See also: is_abcd
  31.  
  32. # Written by A. S. Hodel (scotte@eng.auburn.edu) August 1993.
  33. # a s hodel: modified to accept pure-gain systems aug 1996
  34.  
  35.   if (nargin != 4)
  36.     error ("abcddim: four arguments required");
  37.   endif
  38.  
  39.   n = m = p = -1;
  40.  
  41.   [a,an,am] = abcddims(a);
  42.   [b,bn,bm] = abcddims(b);
  43.   [c,cn,cm] = abcddims(c);
  44.   [d,dn,dm] = abcddims(d);
  45.  
  46.   if ( (!is_sqr(a)) & (!isempty(a)) )
  47.     warning (["abcddim: a is not square (",num2str(an),"x",num2str(am),")"]);
  48.     return
  49.   endif
  50.  
  51.   if( (bm == 0) & (dm == 0) )
  52.     warning("abcddim: no inputs");
  53.   elseif (bn != am)
  54.     warning (["abcddim: a(",num2str(an),"x",num2str(am), ...
  55.       " and b(",num2str(bn),"x",num2str(bm),") are not compatible"]);
  56.     return
  57.   endif
  58.  
  59.   if( (cn == 0) & (dn == 0 ) )
  60.     warning("abcddim: no outputs");
  61.   elseif (cm != an)
  62.     warning (["abcddim: a(",num2str(an),"x",num2str(am), ...
  63.     " and c(",num2str(cn),"x",num2str(cm),") are not compatible"]);
  64.     return
  65.   endif
  66.  
  67.   have_connections = (bn*cn != 0);
  68.  
  69.   if( (dn == 0) & have_connections)
  70.     warning("abcddim: empty d matrix passed; setting compatibly with b, c");
  71.     [d,dn,dm] = abcddims(zeros(cn,bm));
  72.   endif
  73.  
  74.   if(an > 0)
  75.     [dn, dm] = size(d);
  76.     if ( (cn != dn) & have_connections )
  77.       warning (["abcddim: c(",num2str(cn),"x",num2str(cm), ...
  78.     " and d(",num2str(dn),"x",num2str(dm),") are not compatible"]);
  79.       return
  80.     endif
  81.  
  82.     if ( (bm != dm) & have_connections )
  83.       warning (["abcddim: b(",num2str(bn),"x",num2str(bm), ...
  84.       " and d(",num2str(dn),"x",num2str(dm),") are not compatible"]);
  85.       return
  86.     endif
  87.  
  88.     m = bm;
  89.     p = cn;
  90.   else
  91.     [p,m] = size(d);
  92.   endif
  93.   n = an;
  94. endfunction
  95.