Mercurial > octave
comparison scripts/sparse/eigs.m @ 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 | a23870bdf30e |
comparison
equal
deleted
inserted
replaced
29076:fa2cdef14442 | 29077:b85f72ec844a |
---|---|
375 | 375 |
376 d = d(idx); | 376 d = d(idx); |
377 | 377 |
378 n = numel (d); | 378 n = numel (d); |
379 | 379 |
380 k = min (k, n); | 380 if (k > n) |
381 error ("eigs: requested number of eigenvalues K (%d) exceeds available eigenvalues (%d)", k, n); | |
382 endif | |
381 | 383 |
382 if (strcmp (sigma, "be")) | 384 if (strcmp (sigma, "be")) |
383 tmp = k / 2; | 385 tmp = k / 2; |
384 n1 = floor (tmp); | 386 n1 = floor (tmp); |
385 n2 = n - ceil (tmp) + 1; | 387 n2 = n - ceil (tmp) + 1; |
1368 %! assert (max (tmp(:)) < 5e-11); | 1370 %! assert (max (tmp(:)) < 5e-11); |
1369 | 1371 |
1370 %!assert (eigs (diag (1:5), 5, "sa"), [1;2;3;4;5]) # call_eig is true | 1372 %!assert (eigs (diag (1:5), 5, "sa"), [1;2;3;4;5]) # call_eig is true |
1371 %!assert (eigs (diag (1:5), 5, "la"), [5;4;3;2;1]) # call_eig is true | 1373 %!assert (eigs (diag (1:5), 5, "la"), [5;4;3;2;1]) # call_eig is true |
1372 %!assert (eigs (diag (1:5), 3, "be"), [1;4;5]) # call_eig is true | 1374 %!assert (eigs (diag (1:5), 3, "be"), [1;4;5]) # call_eig is true |
1373 %!error | |
1374 %! A = rand (10); | |
1375 %! opts.v0 = ones (8, 1); | |
1376 %! eigs (A, 4, "sm", opts); | |
1377 %!testif HAVE_ARPACK | 1375 %!testif HAVE_ARPACK |
1378 %! A = toeplitz ([-2, 1, zeros(1, 8)]); | 1376 %! A = toeplitz ([-2, 1, zeros(1, 8)]); |
1379 %! A = kron (A, eye (10)) + kron (eye (10), A); | 1377 %! A = kron (A, eye (10)) + kron (eye (10), A); |
1380 %! opts.v0 = (1:100)'; | 1378 %! opts.v0 = (1:100)'; |
1381 %! opts.maxit = 3; | 1379 %! opts.maxit = 3; |
1588 | 1586 |
1589 %!testif HAVE_ARPACK <*59486> | 1587 %!testif HAVE_ARPACK <*59486> |
1590 %! A = magic (5); | 1588 %! A = magic (5); |
1591 %! d = eigs (A, [], 1); | 1589 %! d = eigs (A, [], 1); |
1592 %! assert (d, 65, 150*eps); | 1590 %! assert (d, 65, 150*eps); |
1591 | |
1592 ## Test input validation | |
1593 %!error <Invalid call> eigs () | |
1594 %!error <requested number of eigenvalues K \(2\) exceeds available eigenvalues \(1\)> | |
1595 %! eigs (1, [], 2); | |
1596 %!error <"la" requires real symmetric problem> eigs ([i,0;0,1], 1, "la") | |
1597 %!error <"la" requires real symmetric problem> eigs ([1,1;0,1], 1, "la") | |
1598 %!error <"sa" requires real symmetric problem> eigs ([i,0;0,1], 1, "sa") | |
1599 %!error <"sa" requires real symmetric problem> eigs ([1,1;0,1], 1, "sa") | |
1600 %!error <"be" requires real symmetric problem> eigs ([i,0;0,1], 1, "be") | |
1601 %!error <"be" requires real symmetric problem> eigs ([1,1;0,1], 1, "be") | |
1602 %!error <"lr" requires complex or unsymmetric> eigs ([1,0;0,1], 1, "lr") | |
1603 %!error <"sr" requires complex or unsymmetric> eigs ([1,0;0,1], 1, "sr") | |
1604 %!error <"li" requires complex or unsymmetric> eigs ([1,0;0,1], 1, "li") | |
1605 %!error <"si" requires complex or unsymmetric> eigs ([1,0;0,1], 1, "si") | |
1606 %!error <unrecognized value for SIGMA: foobar> eigs (eye (2), 1, "foobar") | |
1607 %!error <opts.v0 must be n-by-1> | |
1608 %! A = rand (10); | |
1609 %! opts.v0 = ones (8, 1); | |
1610 %! eigs (A, 4, "sm", opts); |