home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / octave-1.1.1p1-src.tgz / tar.out / fsf / octave / scripts / polynomial / conv.m < prev    next >
Text File  |  1996-09-28  |  2KB  |  74 lines

  1. # Copyright (C) 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 y = conv (a, b)
  16.   
  17. # usage: conv (a, b)
  18. #
  19. # Convolve two vectors.
  20. #
  21. # y = conv (a, b) returns a vector of length equal to length (a) +
  22. # length (b) -1.
  23. #
  24. # If a and b are polynomial coefficient vectors, conv returns the
  25. # coefficients of the product polynomial.
  26. #
  27. # SEE ALSO: deconv, poly, roots, residue, polyval, polyderiv, polyinteg 
  28.  
  29. # Written by Tony Richardson (amr@mpl.ucsd.edu) June 1994.
  30.  
  31.   if (nargin != 2)
  32.     usage ("conv(a, b)");
  33.   endif
  34.  
  35.   if (is_matrix (a) || is_matrix (b))
  36.     error("conv: both arguments must be vectors");
  37.   endif
  38.  
  39.   la = length (a);
  40.   lb = length (b);
  41.  
  42.   ly = la + lb - 1;
  43.  
  44.   # Ensure that both vectors are row vectors.
  45.   if (rows (a) > 1)
  46.     a = reshape (a, 1, la);
  47.   endif
  48.   if (rows (b) > 1)
  49.     b = reshape (b, 1, lb);
  50.   endif
  51.  
  52.   # Use the shortest vector as the coefficent vector to filter.
  53.   if (la < lb)
  54.     if (ly > lb)
  55.       x = [b, zeros (1, ly - lb)];
  56.     else
  57.       x = b;
  58.     endif
  59.     y = filter (a, 1, x);
  60.   else
  61.     if(ly > la)
  62.       x = [a, zeros (1, ly - la)];
  63.     else
  64.       x = a;
  65.     endif
  66.     y = filter (b, 1, x);
  67.   endif
  68.  
  69. endfunction
  70.