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 / linear-algebra / norm.m < prev    next >
Text File  |  1996-09-28  |  3KB  |  107 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 = norm (x, p)
  16.  
  17. # usage: norm (x, p)
  18. #
  19. # Compute the p-norm of x.
  20. #
  21. # If x is a matrix:
  22. #
  23. #   value of p     norm returns
  24. #   ----------     ------------
  25. #       1          1-norm, the largest column sum of x
  26. #       2          largest singular value of x
  27. #      Inf         infinity norm, the largest row sum of x
  28. #     "fro"        Frobenius norm of x, sqrt (sum (diag (x' * x)))
  29. #
  30. # If x is a vector or a scalar:
  31. #
  32. #   value of p     norm returns
  33. #   ----------     ------------
  34. #      Inf         max (abs (x))
  35. #     -Inf         min (abs (x))
  36. #     other        p-norm of x, sum (abs (x) .^ p) ^ (1/p)
  37. #
  38. # If the second argument is missing, p = 2 is assumed.
  39. #
  40. # See also: cond, svd
  41.  
  42.   if (nargin < 1 || nargin > 2)
  43.     error ("usage: norm (x [, p])")
  44.   endif
  45.  
  46.   if (isempty (x))
  47.     retval = [];
  48.     return;
  49.   endif
  50.  
  51. # Do we have a vector or matrix as the first argument?
  52.  
  53.   if (rows (x) == 1 || columns (x) == 1)
  54.  
  55.     if (nargin == 2)
  56.       if (isstr (p))
  57.         if (strcmp (p, "fro"))
  58.           retval = sqrt (sum (diag (x' * x)));
  59.         else
  60.           error ("norm: unrecognized norm");
  61.         endif
  62.       else
  63.     if (p == Inf)
  64.       retval = max (abs (x));
  65.     elseif (p == -Inf)
  66.       retval = min (abs (x));
  67.     else
  68.       retval = sum (abs (x) .^ p) ^ (1/p);
  69.     endif
  70.       endif
  71.     elseif (nargin == 1)
  72.       retval = sum (abs (x) .^ 2) ^ 0.5;
  73.     endif
  74.  
  75.   else
  76.  
  77.     if (nargin == 2)
  78.       if (isstr (p))
  79.         if (strcmp (p, "fro"))
  80.           retval = sqrt (sum (diag (x' * x)));
  81.         else
  82.           error ("norm: unrecognized norm");
  83.         endif
  84.       else
  85.         if (p == 1)
  86.           retval = max (sum (abs (real (x)) + abs (imag (x))));
  87.         elseif (p == 2)
  88.           s = svd (x);
  89.           retval = s (1);
  90.         elseif (p == Inf)
  91.           xp = x';
  92.           retval = max (sum (abs (real (xp)) + abs (imag (xp))));
  93.         endif
  94.       endif
  95.     elseif (nargin == 1)
  96.       s = svd (x);
  97.       retval = s (1);
  98.     endif
  99.  
  100.   endif
  101.  
  102. endfunction
  103.