changeset 29077:b85f72ec844a

eigs.m: Add error when requested number of eigenvalues K exceeds number possible. * eigs.m (select): Check that number of eigenvalues requested (k) is less than number possible (n). * eigs.m: Add BIST tests for input validation.
author Rik <rik@octave.org>
date Thu, 19 Nov 2020 15:20:42 -0800
parents fa2cdef14442
children c43e748de388
files scripts/sparse/eigs.m
diffstat 1 files changed, 23 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/sparse/eigs.m	Thu Nov 19 13:08:00 2020 -0800
+++ b/scripts/sparse/eigs.m	Thu Nov 19 15:20:42 2020 -0800
@@ -377,7 +377,9 @@
 
   n = numel (d);
 
-  k = min (k, n);
+  if (k > n)
+    error ("eigs: requested number of eigenvalues K (%d) exceeds available eigenvalues (%d)", k, n);
+  endif
 
   if (strcmp (sigma, "be"))
     tmp = k / 2;
@@ -1370,10 +1372,6 @@
 %!assert (eigs (diag (1:5), 5, "sa"), [1;2;3;4;5]) # call_eig is true
 %!assert (eigs (diag (1:5), 5, "la"), [5;4;3;2;1]) # call_eig is true
 %!assert (eigs (diag (1:5), 3, "be"), [1;4;5]) # call_eig is true
-%!error
-%! A = rand (10);
-%! opts.v0 = ones (8, 1);
-%! eigs (A, 4, "sm", opts);
 %!testif HAVE_ARPACK
 %! A = toeplitz ([-2, 1, zeros(1, 8)]);
 %! A = kron (A, eye (10)) + kron (eye (10), A);
@@ -1590,3 +1588,23 @@
 %! A = magic (5);
 %! d = eigs (A, [], 1);
 %! assert (d, 65, 150*eps);
+
+## Test input validation
+%!error <Invalid call> eigs ()
+%!error <requested number of eigenvalues K \(2\) exceeds available eigenvalues \(1\)>
+%! eigs (1, [], 2);
+%!error <"la" requires real symmetric problem> eigs ([i,0;0,1], 1, "la")
+%!error <"la" requires real symmetric problem> eigs ([1,1;0,1], 1, "la")
+%!error <"sa" requires real symmetric problem> eigs ([i,0;0,1], 1, "sa")
+%!error <"sa" requires real symmetric problem> eigs ([1,1;0,1], 1, "sa")
+%!error <"be" requires real symmetric problem> eigs ([i,0;0,1], 1, "be")
+%!error <"be" requires real symmetric problem> eigs ([1,1;0,1], 1, "be")
+%!error <"lr" requires complex or unsymmetric> eigs ([1,0;0,1], 1, "lr")
+%!error <"sr" requires complex or unsymmetric> eigs ([1,0;0,1], 1, "sr")
+%!error <"li" requires complex or unsymmetric> eigs ([1,0;0,1], 1, "li")
+%!error <"si" requires complex or unsymmetric> eigs ([1,0;0,1], 1, "si")
+%!error <unrecognized value for SIGMA: foobar> eigs (eye (2), 1, "foobar")
+%!error <opts.v0 must be n-by-1>
+%! A = rand (10);
+%! opts.v0 = ones (8, 1);
+%! eigs (A, 4, "sm", opts);