2.4 Ejercicios

Ejercicio 2.1 (Método de los cuadrados medios)

Uno de los primeros generadores utilizados fue el denominado método de los cuadrados medios propuesto por Von Neumann (1946). Con este procedimiento se generan números pseudoaleatorios de 4 dígitos de la siguiente forma:

  1. Se escoge un número de cuatro dígitos x0 (semilla).

  2. Se eleva al cuadrado (x20) y se toman los cuatro dígitos centrales (x1).

  3. Se genera el número pseudo-aleatorio como u1=x1104.

  4. Volver al paso ii y repetir el proceso.

Para obtener los k (número par) dígitos centrales de x2i se puede utilizar que: xi+1=(x2ix2i10(2kk2)10(2kk2))/10k2

Estudiar las características de este generador a partir de una secuencia de 500 valores. Emplear únicamente métodos gráficos.

Este algoritmo está implementado en la función simres::rvng() (ver también simres::rng(); fichero rng.R):

simres::rvng
## function(n, seed = as.numeric(Sys.time()), k = 4) {
##   seed <- seed %% 10^k
##   aux <- 10^(2*k-k/2)
##   aux2 <- 10^(k/2)
##   u <- numeric(n)
##   for(i in 1:n) {
##     z <- seed^2
##     seed <- trunc((z - trunc(z/aux)*aux)/aux2)
##     u[i] <- seed/10^k
##   }
##   # Almacenar semilla y parámetros
##   assign(".rng", list(seed = seed, type = "vm", parameters = list(k = k)),
##       envir = globalenv())
##   # .rng <<- list(seed = seed, type = "vm", parameters = list(k = k))
##   # Para continuar con semilla y parámetros:
##   #   with(.rng, rvng(n, seed, parameters$k))
##   # Devolver valores
##   return(u)
## }
## <bytecode: 0x0000023f0a06dad8>
## <environment: namespace:simres>

Ejercicio 2.2

Considerando el generador congruencial multiplicativo de parámetros a=75=16807, c=0 y m=2311 (minimal standar de Park y Miller, 1988). ¿Se observan los mismos problemas que con el algoritmo RANDU al considerar las tripletas (xk,xk+1,xk+2)?