Mercurial > octave
comparison scripts/linear-algebra/bandwidth.m @ 28073:a3b40e48c069 stable
bandwidth: allow nargout == 1 when TYPE is not specified
* bandwidth: Don't check nargout when validating argument list, just
require 1 or two arguments. Update tests.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 17 Feb 2020 14:16:58 -0500 |
parents | a4268efb7334 |
children | 28de41192f3c 0a5b15007766 |
comparison
equal
deleted
inserted
replaced
28072:47238792de58 | 28073:a3b40e48c069 |
---|---|
38 ## @seealso{isbanded, isdiag, istril, istriu} | 38 ## @seealso{isbanded, isdiag, istril, istriu} |
39 ## @end deftypefn | 39 ## @end deftypefn |
40 | 40 |
41 function [lower, upper] = bandwidth (A, type) | 41 function [lower, upper] = bandwidth (A, type) |
42 | 42 |
43 if (! ((nargin == 1 && nargout == 2) || (nargin == 2 && nargout <= 1))) | 43 if (nargin < 1 || nargin > 2) |
44 print_usage (); | 44 print_usage (); |
45 endif | 45 endif |
46 | 46 |
47 if (! isnumeric (A) && ! islogical (A) || ndims (A) != 2) | 47 if (! isnumeric (A) && ! islogical (A) || ndims (A) != 2) |
48 error ("bandwidth: A must be a 2-D numeric or logical matrix"); | 48 error ("bandwidth: A must be a 2-D numeric or logical matrix"); |
53 if (nargin == 1) | 53 if (nargin == 1) |
54 [i, j] = find (A); | 54 [i, j] = find (A); |
55 if (isempty (i)) | 55 if (isempty (i)) |
56 lower = upper = 0; | 56 lower = upper = 0; |
57 else | 57 else |
58 lower = max (i - j); | 58 lower = max (0, max (i - j)); |
59 upper = max (j - i); | 59 upper = max (0, max (j - i)); |
60 endif | 60 endif |
61 else | 61 else |
62 [i, j] = find (A); | 62 [i, j] = find (A); |
63 if (isempty (i)) | 63 if (isempty (i)) |
64 lower = 0; | 64 lower = 0; |
65 elseif (strcmp (type, "lower")) | 65 elseif (strcmp (type, "lower")) |
66 lower = max (i - j); | 66 lower = max (0, max (i - j)); |
67 else | 67 else |
68 lower = max (j - i); | 68 lower = max (0, max (j - i)); |
69 endif | 69 endif |
70 endif | 70 endif |
71 | 71 |
72 endfunction | 72 endfunction |
73 | 73 |
74 | 74 |
75 %!test | 75 %!test |
76 %! [a,b] = bandwidth (speye (100)); | 76 %! [a,b] = bandwidth (speye (100)); |
77 %! assert ([a,b] == [0,0]); | 77 %! assert ([a,b], [0,0]); |
78 %! assert (bandwidth (speye (100), "upper"), 0); | 78 %! assert (bandwidth (speye (100), "upper"), 0); |
79 %! assert (bandwidth (speye (100), "lower"), 0); | 79 %! assert (bandwidth (speye (100), "lower"), 0); |
80 | 80 |
81 %!test | 81 %!test |
82 %! A = [2 3 0 0 0; 1 2 3 0 0; 0 1 2 3 0; 0 0 1 2 3; 0 0 0 1 2]; | 82 %! A = [2 3 0 0 0; 1 2 3 0 0; 0 1 2 3 0; 0 0 1 2 3; 0 0 0 1 2]; |
83 %! [a,b] = bandwidth (A); | 83 %! [a,b] = bandwidth (A); |
84 %! assert ([a,b] == [1,1]); | 84 %! assert ([a,b], [1,1]); |
85 %! assert (bandwidth (A, "lower"), 1); | 85 %! assert (bandwidth (A, "lower"), 1); |
86 %! assert (bandwidth (A, "upper"), 1); | 86 %! assert (bandwidth (A, "upper"), 1); |
87 | 87 |
88 %!assert (bandwidth ([], "lower"), 0) | 88 %!assert (bandwidth ([], "lower"), 0) |
89 %!assert (bandwidth ([], "upper"), 0) | 89 %!assert (bandwidth ([], "upper"), 0) |
90 %!assert (bandwidth ([]), 0) | |
90 %!assert (bandwidth (zeros (3,3), "lower"), 0) | 91 %!assert (bandwidth (zeros (3,3), "lower"), 0) |
91 %!assert (bandwidth (zeros (3,3), "upper"), 0) | 92 %!assert (bandwidth (zeros (3,3), "upper"), 0) |
93 %!assert (bandwidth (zeros (3,3)), 0) | |
92 %!assert (bandwidth (ones (5,5), "lower"), 4) | 94 %!assert (bandwidth (ones (5,5), "lower"), 4) |
93 %!assert (bandwidth (ones (5,5), "upper"), 4) | 95 %!assert (bandwidth (ones (5,5), "upper"), 4) |
96 %!assert (bandwidth (ones (5,5)), 4) | |
97 | |
98 %!assert (bandwidth ([0,1,2,0]), 0) | |
94 | 99 |
95 %!test | 100 %!test |
96 %! [a,b] = bandwidth ([]); | 101 %! [a,b] = bandwidth ([]); |
97 %! assert ([a,b] == [0,0]); | 102 %! assert ([a,b], [0,0]); |
98 %!test | 103 %!test |
99 %! [a,b] = bandwidth (zeros (3,3)); | 104 %! [a,b] = bandwidth (zeros (3,3)); |
100 %! assert ([a,b] == [0,0]); | 105 %! assert ([a,b], [0,0]); |
101 %!test | 106 %!test |
102 %! [a,b] = bandwidth (ones (5,5)); | 107 %! [a,b] = bandwidth (ones (5,5)); |
103 %! assert ([a,b] == [4,4]); | 108 %! assert ([a,b], [4,4]); |
104 | 109 |
105 ## Test input validation | 110 ## Test input validation |
106 %!error bandwidth () | 111 %!error bandwidth () |
107 %!error bandwidth (1,2,3) | 112 %!error bandwidth (1,2,3) |
108 %!error [a,b,c] = bandwidth (ones (2)) | |
109 %!error [a,b] = bandwidth (ones (2), "upper") | |
110 %!error <A must be a 2-D numeric or logical> bandwidth ("string", "lower") | 113 %!error <A must be a 2-D numeric or logical> bandwidth ("string", "lower") |
111 %!error <A must be a 2-D numeric or logical> bandwidth (ones (3,3,3), "lower") | 114 %!error <A must be a 2-D numeric or logical> bandwidth (ones (3,3,3), "lower") |
112 %!error <TYPE must be "lower" or "upper"> bandwidth (ones (2), "uper") | 115 %!error <TYPE must be "lower" or "upper"> bandwidth (ones (2), "uper") |
113 %!error <TYPE must be "lower" or "upper"> bandwidth (ones (2), "uppper") | 116 %!error <TYPE must be "lower" or "upper"> bandwidth (ones (2), "uppper") |