diff scripts/linear-algebra/istril.m @ 18900:49961d67e4b9

Add new matrix functions (isdiag, isbanded, istril, istriu) (bug #42688). * NEWS: Announce new functions. * scripts/linear-algebra/module.mk: Add new functions to build system. * scripts/linear-algebra/isdiag.m: New function. * scripts/linear-algebra/isbanded.m: New function. * scripts/linear-algebra/istril.m: New function. * scripts/linear-algebra/istriu.m: New function. * numbers.txi: Add new functions to manual.
author Massimiliano Fasi <massimiliano.fasi@gmail.com>
date Sat, 05 Jul 2014 10:09:56 +0200
parents
children 9addb5ad9426
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/linear-algebra/istril.m	Sat Jul 05 10:09:56 2014 +0200
@@ -0,0 +1,61 @@
+## Copyright (C) 2014 Massimiliano Fasi
+##
+## 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 3 of the License, 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, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {} istril (@var{x})
+## Return true if @var{x} is a lower triangular matrix.
+##
+## A lower triangular matrix has nonzero entries only on the main diagonal
+## and below.
+## @seealso{istriu, isbanded, isdiag, tril}
+## @end deftypefn
+
+## Author: Massimiliano Fasi
+
+function retval = istril (A)
+
+  if (nargin != 1)
+    print_usage ();
+  endif
+
+  retval = (isnumeric (A) || islogical (A)) && ndims (A) == 2;
+  if (retval)
+    [i, j] = find (A);
+    retval = all (i >= j);
+  endif
+
+endfunction
+
+
+%!assert (! istril ("string"))
+%!assert (istril ([]))
+%!assert (! istril (zeros (2,2,2)))
+
+%!assert (istril (1))
+%!assert (! istril ([1, 1]))
+%!assert (istril ([1; 1]))
+%!assert (istril (eye (10)))
+%!assert (istril (speye (100)))
+
+%!assert (istril (tril (randn (10))))
+%!assert (! istril (randn (10)))
+
+%% Test input validation
+%!error istril ()
+%!error istril (1,2)
+