changeset 23381:e15ffa2b2262

gallery: use broadcasting to generate cauchy and fiedler matrices
author Carnë Draug <carandraug@octave.org>
date Mon, 10 Apr 2017 15:00:25 +0100
parents c319e6d737f2
children 5a3c3ff03167
files scripts/special-matrix/gallery.m
diffstat 1 files changed, 50 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/special-matrix/gallery.m	Mon Apr 10 07:02:42 2017 +0200
+++ b/scripts/special-matrix/gallery.m	Mon Apr 10 15:00:25 2017 +0100
@@ -555,8 +555,7 @@
     error ("gallery: X and Y must be vectors of same length for cauchy matrix.");
   endif
 
-  C = x * ones (1, n) + ones (n, 1) * y.';
-  C = ones (n) ./ C;
+  C = 1 ./ (x .+ y.');
 endfunction
 
 function C = chebspec (n, k = 0)
@@ -1097,8 +1096,7 @@
   endif
   c = c(:).';           # Ensure c is a row vector.
 
-  A = ones (n, 1) * c;
-  A = abs (A - A.');    # NB. array transpose.
+  A = abs (c - c.');
 endfunction
 
 function A = forsythe (n, alpha = sqrt (eps), lambda = 0)
@@ -2918,8 +2916,43 @@
 %!assert (gallery ("minij", 0), [])
 %!assert (gallery ("minij", -1), [])
 
-%!assert (size (gallery ("cauchy", 5)), [5 5])
-%!assert (size (gallery ("cauchy", 2:5, 5:8)), [4 4])
+%!test
+%! exp = 1 ./ [
+%!   2  3  4  5  6
+%!   3  4  5  6  7
+%!   4  5  6  7  8
+%!   5  6  7  8  9
+%!   6  7  8  9  10];
+%! assert (gallery ("cauchy", 5), exp)
+%! assert (gallery ("cauchy", 1:5), exp)
+%! assert (gallery ("cauchy", 1:5, 1:5), exp)
+%!
+%! exp = 1 ./ [
+%!   1  2  3  4  5
+%!   2  3  4  5  6
+%!   3  4  5  6  7
+%!   4  5  6  7  8
+%!   5  6  7  8  9];
+%! assert (gallery ("cauchy", 0:4, 1:5), exp)
+%! assert (gallery ("cauchy", 1:5, 0:4), exp)
+%! assert (gallery ("cauchy", 1:5, 4:-1:0), fliplr (exp))
+%!
+%! exp = 1 ./ [
+%!  -1  0  1  2  3
+%!   0  1  2  3  4
+%!   1  2  3  4  5
+%!   2  3  4  5  6
+%!   3  4  5  6  7];
+%! assert (gallery ("cauchy", 1:5, -2:2), exp)
+%!
+%! exp = 1 ./ [
+%!    8  18  -4  2
+%!   13  23   1  7
+%!    9  19  -3  3
+%!   15  25   3  9];
+%! assert (gallery ("cauchy", [-2 3 -1 5], [10 20 -2 4]), exp)
+%! assert (gallery ("cauchy", [-2 3 -1 5], [10 20 -2 4]'), exp)
+%! assert (gallery ("cauchy", [-2 3 -1 5]', [10 20 -2 4]), exp)
 
 %!assert (size (gallery ("chebspec", 5)), [5 5])
 %!assert (size (gallery ("chebspec", 5, 1)), [5 5])
@@ -2959,8 +2992,17 @@
 %!assert (size (gallery ("dramadah", 5)), [5 5])
 %!assert (size (gallery ("dramadah", 5, 2)), [5 5])
 
-%!assert (size (gallery ("fiedler", 5)), [5 5])
-%!assert (size (gallery ("fiedler", 2:5)), [4 4])
+%!test
+%! exp = [
+%!   0   1   2   3   4
+%!   1   0   1   2   3
+%!   2   1   0   1   2
+%!   3   2   1   0   1
+%!   4   3   2   1   0];
+%! assert (gallery ("fiedler", 5), exp)
+%! assert (gallery ("fiedler", 1:5), exp)
+%! assert (gallery ("fiedler", -2:2), exp)
+%! assert (gallery ("fiedler", 2:4), exp(1:4,1:4))
 
 %!assert (size (gallery ("forsythe", 5)), [5 5])
 %!assert (size (gallery ("forsythe", 5, 1, 0.5)), [5 5])