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

  1. # Copyright (C) 1996 A. Scottedward Hodel 
  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. # Octave is distributed in the hope that it will be useful, but WITHOUT 
  10. # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
  11. # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
  12. # for more details.
  13. # You should have received a copy of the GNU General Public License 
  14. # along with Octave; see the file COPYING.  If not, write to the Free 
  15. # Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  16.  
  17. function [a,b,c,d] = series(a1,b1,c1,d1,a2,b2,c2,d2)
  18. # Forms the series connection of two systems.
  19. #
  20. # Superseded by sysmult.  Do not use this routine!
  21. # used internally in zp2ss
  22. #
  23. # Type of input: Transfer functions
  24. # Command:       [num,den]=series(num1,den1,num2,den2)
  25. # Forms the series representation of the two transfer functions.
  26. #
  27. # Type of input: State space systems
  28. # Command:       [a,b,c,d]=series(a1,b1,c1,d1,a2,b2,c2,d2)
  29. # Forms the series representation of the two state space system arguments.
  30. # The series connected system will have the inputs of system 1 and the 
  31. # outputs of system 2.
  32. #
  33. # Type of input: system data structure
  34. # Command:       syst=series(syst1,syst2)
  35. # Forms the series representation of the two mu system arguments.
  36. # Written by David Clem August 15, 1994
  37.  
  38. # If two arguments input, take care of mu system case
  39.  
  40.   warning("series is superseded by sysmult; use sysmult instead.")
  41.  
  42.   muflag = 0;
  43.   if(nargin == 2)
  44.     temp=b1;
  45.     [a1,b1,c1,d1]=sys2ss(a1);
  46.     [a2,b2,c2,d2]=sys2ss(temp);
  47.     muflag = 1;
  48.   endif
  49.  
  50. # If four arguments input, put two transfer functions in series
  51.  
  52.   if(nargin == 4)
  53.     a = conv(a1,c1);    % was conv1
  54.     b = conv(b1,d1);    % was conv1
  55.     c = 0;
  56.     d = 0;
  57.  
  58. # Find series combination of 2 state space systems
  59.  
  60.   elseif((nargin == 8)||(muflag == 1))
  61.  
  62. # check matrix dimensions
  63.   
  64.     [n1,m1,p1] = abcddim(a1,b1,c1,d1);
  65.     [n2,m2,p2] = abcddim(a2,b2,c2,d2);
  66.  
  67.     if((n1 == -1) || (n2 == -1))
  68.       error("Incorrect matrix dimensions");
  69.     endif
  70.  
  71. # check to make sure the number of outputs of system1 equals the number
  72. # of inputs of system2
  73.  
  74.    if(p1 ~= m2)
  75.      error("System 1 output / System 2 input connection sizes do not match");
  76.    endif
  77.  
  78. # put the two state space systems in series
  79.  
  80.     a = [a1, zeros(rows(a1),columns(a2));b2*c1, a2];
  81.     b = [b1;b2*d1];
  82.     c = [d2*c1, c2];
  83.     d = [d2*d1];
  84.  
  85. # take care of mu output
  86.  
  87.     if(muflag == 1)
  88.       a=ss2sys(a,b,c,d);
  89.       b=c=d=0;
  90.     endif 
  91.   endif
  92.  
  93. endfunction
  94.  
  95.