Section 7: Random Number Generators (Matlab
Examples).
· Monte Carlo Methods
· Random Numbers
· Random Number Cycle
· Linear Congruential Generators
· Multiplicative LCG
· Mixed LCG
lcg.m
this Matlab code implements a comprehensive function LCG(a,
c, m, X0) with the following inputs and outputs:
inputs:

m is the modulus

a the multiplier

c the increment

X0 the initial “seed”
outputs:

P period of the sequence

mean average of one period of the real random numbers

var variance of the sequence of one period of the random numbers

one period and three (P+3) integer numbers.
Below is given the Matlab code for the function. Stedents can generate
random numbers using different input parameters.
function [p, mean, var, oneperiod]=lcg(a, c, m, x)
% Linear Congruential Generators
% x the initial seed, 0 <= c < m
% a the multiplier, 0 <= a < m, normally greater than 1
% c the increment 0 <= c < m
% m the modulus, prime numbers are best
xseq=x;
for j=1:m+5 % generate m+5 integers
x= rem((a*x+c),m); % (a*x + c) mod m;
xseq=[xseq;x]; % concatenate numbers, in a cloumn
row=xseq'; % transpose to a row
end
% find out the period
i=1;
j=2;
while row(i) ~= row(j)
if j > m % integer row(i) doesn’t repeat in the sequence
i=i+1; % see if the next integer repeats or
not
j=i;
end;
j=j+1;
end;
p=ji;
% one period of random integer number
oneperiod=row(i:i+p+2); % one period and three integers
% calculate the real number of a period p
r=row(i:i+p1)/m; % divide by m, so distributed in [0,1)
mean = sum(r)/p; % average
diff=meanr;
square=diff.*diff;
var=sum(square)/p; % variance
However, Matlab environment has already predefined functions to generate
random numbers:
RAND
Uniformly distributed random numbers.

RAND(N) is an NbyN matrix with random entries,
chosen from a uniform distribution on the interval (0.0,1.0)

RAND(M,N) and RAND([M,N]) are MbyN matrices
with random entries

RAND(M,N,P,...) or RAND([M,N,P,...]) generate
random arrays

RAND with no arguments is a scalar whose value
changes each time it is referenced

RAND(SIZE(A)) is the same size as A
RANDN Normally
distributed random numbers.

RANDN(N) is an NbyN matrix with random entries, chosen from
a normal distribution with mean zero and variance one.

RANDN(M,N) and RANDN([M,N]) are MbyN matrices with
random entries.

RANDN(M,N,P,...) or RANDN([M,N,P...]) generate random
arrays.

RANDN with no arguments is a scalar whose value changes each
time it is referenced.

RANDN(SIZE(A)) is the same size as A.
SPRAND Sparse
uniformly distributed random matrix.

R = SPRAND(S) has the same sparsity structure as S, but uniformly
distributed random entries.

R = SPRAND(m,n,density) is a random, mbyn, sparse matrix with
approximately density*m*n uniformly distributed nonzero entries. SPRAND
is designed to produce large matrices with small density and will generate
significantly fewer nonzeros than requested if m*n is small or density
is large.

R = SPRAND(m,n,density,rc) also has reciprocal condition number
approximately equal to rc. R is constructed from a sum of matrices
of rank one.
SPRANDN Sparse
normally distributed random matrix.

R = SPRANDN(S) has the same sparsity structure as S, but normally
distributed random entries.

R = SPRANDN(m,n,density) is a random, mbyn, sparse matrix with
approximately density*m*n normally distributed nonzero entries. SPRANDN
is designed to produce large matrices with small density and will generate
significantly fewer nonzeros than requested if m*n is small or density
is large.

R = SPRANDN(m,n,density,rc) also has reciprocal condition number
approximately equal to rc. R is constructed from a sum of matrices
of rank one.
RANDPERM Random permutation.

RANDPERM(n) is a random permutation of the integers from 1 to n.
For example, RANDPERM(6) might be [2 4 5 6 1 3].
Valentin Muresan, Dublin City University, muresanv@eeng.dcu.ie