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 / special-matrix / toeplitz.m < prev    next >
Text File  |  1996-09-28  |  2KB  |  82 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 retval = toeplitz (c, r)
  16.  
  17. # usage: toeplitz (c, r)
  18. #
  19. # Return the Toeplitz matrix constructed given the first column
  20. # c, and (optionally) the first row r.
  21. #
  22. # If the second argument is omitted, the first row is taken to be the
  23. # same as the first column.  If the first element of c is not the same
  24. # as the first element of r, the first element of c is used.
  25. #
  26. # See also: hankel, vander, hadamard, hilb, invhib
  27.  
  28.   if (nargin == 1)
  29.     r = c;
  30.   elseif (nargin != 2)
  31.     usage ("toeplitz (c, r)");
  32.   endif
  33.  
  34.   [c_nr, c_nc] = size (c);
  35.   [r_nr, r_nc] = size (r);
  36.  
  37.   if ((c_nr != 1 && c_nc != 1) || (r_nr != 1 && r_nc != 1))
  38.     error ("toeplitz: expecting vector arguments")
  39.   endif
  40.  
  41.   if (c_nc != 1)
  42.     c = c.';
  43.   endif
  44.  
  45.   if (r_nr != 1)
  46.     r = r.';
  47.   endif
  48.  
  49.   if (r (1) != c (1))
  50.     warning ("toeplitz: column wins diagonal conflict");
  51.   endif
  52.  
  53. # If we have a single complex argument, we want to return a
  54. # Hermitian-symmetric matrix (actually, this will really only be
  55. # Hermitian-symmetric if the first element of the vector is real).
  56.  
  57.   if (nargin == 1)
  58.     c = conj (c);
  59.     c(1) = conj (c(1));
  60.   endif
  61.  
  62. # This should probably be done with the colon operator...
  63.  
  64.   nc = length (r);
  65.   nr = length (c);
  66.  
  67.   retval = zeros (nr, nc);
  68.  
  69.   for i = 1:min (nc, nr)
  70.     retval (i:nr, i) = c (1:nr-i+1);
  71.   endfor
  72.  
  73.   for i = 1:min (nr, nc-1)
  74.     retval (i, i+1:nc) = r (2:nc-i+1);
  75.   endfor
  76.  
  77. endfunction
  78.