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 / polyvalm.m < prev    next >
Text File  |  1996-09-28  |  2KB  |  59 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 = polyvalm (c, x)
  16.  
  17. # usage: polyvalm (c, x)
  18. #
  19. # Evaluate a polynomial in the matrix sense.
  20. #
  21. # In octave, a polynomial is represented by it's coefficients (arranged
  22. # in descending order). For example a vector c of length n+1 corresponds
  23. # to the following nth order polynomial
  24. #
  25. #   p(x) = c(1) x^n + ... + c(n) x + c(n+1).
  26. #
  27. # polyvalm(c,X) will evaluate the polynomial in the matrix sense, i.e. matrix
  28. # multiplication is used instead of element by element multiplication as is
  29. # used in polyval.
  30. #
  31. # X must be a square matrix.
  32. #
  33. # SEE ALSO: polyval, poly, roots, conv, deconv, residue, filter,
  34. #           polyderiv, polyinteg
  35.  
  36. # Written by Tony Richardson (amr@mpl.ucsd.edu) June 1994.
  37.  
  38.   if(nargin != 2)
  39.     usage ("polyvalm (c, x)");
  40.   endif
  41.  
  42.   if (is_matrix (c))
  43.     error("poly: first argument must be a vector.");
  44.   endif
  45.  
  46.   if(! is_square (x))
  47.     error("poly: second argument must be a square matrix.");
  48.   endif
  49.  
  50.   [v, d] = eig(x);
  51.  
  52.   y = v * diag (polyval (c, diag (d))) * v';
  53.  
  54. endfunction
  55.