# HG changeset patch # User Rik # Date 1373779559 25200 # Node ID 1909e1ed63e61b1724afdb26f001d8da4b17716e # Parent 9aa293e004753fa539d7bd71b95cce787e52a599 gallery.m: Add 'integerdata' matrix to function. * scripts/special-matrix/gallery.m: Add 'integerdata' matrix to function. diff -r 9aa293e00475 -r 1909e1ed63e6 scripts/special-matrix/gallery.m --- a/scripts/special-matrix/gallery.m Sat Jul 13 19:43:36 2013 -0700 +++ b/scripts/special-matrix/gallery.m Sat Jul 13 22:25:59 2013 -0700 @@ -389,8 +389,7 @@ case "grcar" , [varargout{1:n_out}] = grcar (varargin{:}); case "hanowa" , [varargout{1:n_out}] = hanowa (varargin{:}); case "house" , [varargout{1:n_out}] = house (varargin{:}); - case "integerdata" - error ("gallery: matrix %s not implemented.", name); + case "integerdata", [varargout{1:n_out}] = integerdata (varargin{:}); case "invhess" , [varargout{1:n_out}] = invhess (varargin{:}); case "invol" , [varargout{1:n_out}] = invol (varargin{:}); case "ipjfact" , [varargout{1:n_out}] = ipjfact (varargin{:}); @@ -1265,6 +1264,48 @@ endif endfunction +function A = integerdata (varargin) + + if (nargin < 3) + error ("gallery: At least 3 arguments required for integerdata matrix."); + endif + + if (isnumeric (varargin{end})) + jidx = varargin{end}; + svec = [varargin{:}]; + varargin(end) = []; + elseif (ischar (varargin{end})) + if (nargin < 4) + error (["gallery: CLASS argument requires 4 inputs " ... + "for integerdata matrix."]); + endif + jidx = varargin{end-1}; + svec = [varargin{1:end-1}]; + varargin(end-1) = []; + else + error (["gallery: J must be an integer in the range [0, 2^32-1] " ... + "for integerdata matrix"]); + endif + + if (! (isnumeric (jidx) && isscalar (jidx) + && jidx == fix (jidx) + && jidx >= 0 && jidx <= 0xFFFFFFFF)) + error (["gallery: J must be an integer in the range [0, 2^32-1] " ... + "for integerdata matrix"]); + endif + + ## Save and restore random state. Initialization done so that reproducible + ## data is available from gallery depending on the jidx and size vector. + randstate = rand ("state"); + unwind_protect + rand ("state", svec); + A = randi (varargin{:}); + unwind_protect_cleanup + rand ("state", randstate); + end_unwind_protect + +endfunction + function A = invhess (x, y) ## INVHESS Inverse of an upper Hessenberg matrix. ## INVHESS(X, Y), where X is an N-vector and Y an N-1 vector,