Mercurial > hg > octave-lyh
diff scripts/general/isdefinite.m @ 4610:02d2fcf835fc
[project @ 2003-11-14 17:08:59 by jwe]
author | jwe |
---|---|
date | Fri, 14 Nov 2003 17:08:59 +0000 |
parents | |
children | d62c421f448b |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/scripts/general/isdefinite.m @@ -0,0 +1,57 @@ +## Copyright (C) 2003 Gabriele Pannocchia +## +## This file is part of Octave. +## +## Octave is free software; you can redistribute it and/or modify it +## under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, or (at your option) +## any later version. +## +## Octave is distributed in the hope that it will be useful, but +## WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, write to the Free +## Software Foundation, 59 Temple Place - Suite 330, Boston, MA +## 02111-1307, USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {} isdefinite (@var{x},@var{tol}) +## Return 1 if @var{x} is symmetric positive definite within the +## tolerance specified by @var{tol} or 0 if @var{x} is symmetric +## positive semidefinite. Otherwise, return -1. If @var{tol} +## is omitted, use a tolerance equal to 100 times the machine precision. +## @end deftypefn +## @seealso{issymmetric} + +## Author: Gabriele Pannocchia <g.pannocchia@ing.unipi.it> +## Created: November 2003 +## Adapted-By: jwe + +function retval = isdefinite (x, tol) + + if (nargin == 1 || nargin == 2) + if (nargin == 1) + tol = 100*eps; + endif + sym = issymmetric (x, tol); + if (sym > 0) + ## Matrix is symmetric, check eigenvalues. + mineig = min (eig (x)); + if (mineig > tol) + retval = 1; + elseif (mineig > -tol) + retval = 0; + else + retval = -1; + end + else + error ("isdefinite: matrix x must be symmetric"); + endif + else + usage ("isdefinite (x,tol)"); + endif + +endfunction