I wrote the code found in this post in the Student Version of MATLAB R2009a (188.8.131.527) on Windows Vista SP2.
function U = js_randv(i, x) %js_randv Pseudo Random Number Vector Generator % Returns a pseudo random number vector % according to congruential random number generator % i = length of vector % x = seed value of sequence % U = vector of Xi+1 = (a * Xi) mod m isFirst = 0; a = 16807; % 7^5 predetermined multiplicative value m = 2147483647; % 2^31-1 predetermined prime number r = 2836; % m div a q = 127773; % m mod a T = zeros(1, i); % holds seed values U = zeros(1, i); % holds returned uniform random numbers in (0,1) % loop through all indices of vector for j=1:i % if this is the first value, use seed if isFirst == 0 seed = (a * mod(x, q)) - (r * (x / q)); T(1, j) = seed; isFirst = 1; % if this is not the first value, use current index else previousValue = T(1, j-1); seed = (a * mod(previousValue, q)) - (r * (previousValue / q)); T(1, j) = seed; end U(1, j) = seed / m; end end
This function will return a vector of size i containing randomly generated numbers uniformly distributed between 0 and 1. It’s not perfect, but it got the job done. I’ll get around to explaining it more beyond the meager comments another time.