###
Illustration of the linear congruential method. pp67-68 Problem 72
#
develop the algorithm to run the gnerator.
a <-
5
c <-
7
m <-
8
n <-
20 # number of random values to be
generated
x <-
numeric(n)
x[1]
<- 4 #
seed or x_0
for (i in
2:n){
x[i] <- a*x[i-1]+c
x[i] <- x[i] - trunc(x[i]/m)*m #
this calculates the remainder, i.e., calculates the mod
}
x
#
Question: What does m control in this
random number generator? Why should the
value of m be large?
#############################################################################################################
# A
function that generates psudo random uniform values using the linear
congruential method.
RANU
<- function(seed,n) {
# a,c,m are the values need for the linear
congruential method.
# seed is the value of the seed for the
random number generator.
# n is the length of the vector returned.
a <- 65539
c <- 0
m <- 2**31
x <- numeric(n) # creates the output
vecotor of length n
x[1] <- seed
for (i in 2:n){
x[i]
<- a*x[i-1]+c
x[i]
<- x[i] - trunc(x[i]/m)*m # this calculates the remainder, i.e.,
calculates the mod
}
x <- x/m #
dividing by m gives values between [0,1)
return(x)
}
# A
function that generates psudo random exponential values using the inverse cdf
method.
RANDEXPO
<- function(lam,seed,n){
# lam is the scale parameter in the
density. f(x) = lam*exp(-lam*x) x >= 0
# seed is the value of the seed for the
random number generator.
# n is the length of the vector returned.
u <- RANU(seed,n) #
creates a vector of random uniform values
x <- -log(u)/lam # creates the output vecotor of length n
return(x)
}
###
Illustration of the RANU.
seed
<- 4
n <-
10000 #
number of random values to be generated
u <-
RANU(seed,n)
# plot
a histogram
br
<- seq(0,1,0.1)
hist(u,main='histogram
of random uniform values',probability=T,breaks=br)
# make
a scatter plot of pairs of values.
x <-
u[1:trunc(n/2)]
y <-
u[(trunc(n/2)+1):n]
plot(x,y,main='scatter
plot of pairs of random uniform values')
###
Illustration of RANDEXPO.
lambda
<- 1
e <-
RANDEXPO( lambda,seed,n)
hist(e,main='histogram
of random exponential values',probability=T)
plot(e)