Function that uses RAND to generate random integers in the specified linear range, as follows:
result = floor(a + (b-a+1).* rand(N)),
where specified range is [a b]
Please note: There are lots of ways to do this and lots of interesting submissions on FEX which provide similar results (see below).
#18443 - Random Integer Generator
#5346 - MYRANDINT -- Random Integer Generation
#27942 - WWW.RANDOM.ORG random integers/sequences/strings
#27809 - Unique Random Integer List
#13007 - Random Number Generator
#21353 - True Random Integer Generator (random.org)
#30189 - RANDPERMFULL (derangement)
#17981 - RANDBLOCK
#27076 - Shuffle
DS (2020). Generate uniform pseudo-random integers from linear range. (https://www.mathworks.com/matlabcentral/fileexchange/35324-generate-uniform-pseudo-random-integers-from-linear-range), MATLAB Central File Exchange. Retrieved .
"range must be integers" --> "range bounds must be integers"
"range is integers" --> "range bounds are integers"
error('Specified range must be a matrix with 2 elements.');
error('Specified range must be integers.');
Updated first error msg to match modified numel check. Second error check confirms the range is integers (It's not immediately obvious, but non-integer range bounds can result in integers outside the bounds, which may not be what the user expects.) (I don't like the 1* in prod, but prod can't handle logical (in my older version anyway) and that converts logical to double which prod can handle.)
A very well documented and nicely written function. Useful and usable, vectorized and check of inputs.
A suggestion: The check of the size of R crashs, if R has more than 2 dimensions: "if (size(R)==[1 1])". "if numel(R)==1" is saver and faster. Afterwards rejecting "numel(R)~=2" is sufficient and accepts a [2x1] column vector also.
Modified code included as detailed in previous update.
Added a check for imaginary and non-integer range specifications. Thanks to Travis B for pointing out this edge-case behavior.
Fixed help format to accommodate LOOKFOR queries.
Thanks to Jan Simon for suggesting the use of numel instead of abusing the size function (see comments).