May 112008

I was unfortunately caught in the rain this evening and my glasses were blurred by the rain drops. When I came back the office, took them off and was about to clear the beads, I just found a good RNG (Random Number Generator) from the nature:

People who are familiar with statistical computation must have learned how to generate random numbers following a U(0, 1) distribution. One of the most common generators is the linear congruential generator. This is just what I was reminded of by the rain drops on my glasses. The plot below is made in R based the linear congruential generator:

n = 100
x = numeric(n + 1)
# the seed: generated from the system clock (number of seconds from 00:00)
x[1] = sum(as.integer(substring(Sys.time(), c(12, 15, 18),
   c(13, 16, 19))) * c(3600, 60, 1))/(24 * 60 * 60)
for (i in 1:n) x[i + 1] = (7^5 * x[i])%%(2^31 - 1)
# "normalize" to [0, 1]
x = x/(2^31 - 1)
op = par(mar = c(1, 1, 1, 1), bg = "black")
plot(x, col = "white")
par(op)

Do they look like each other? Here is a simple animation.

Related Posts

5 Responses to “Random Number Generation on the Glasses (A Natural RNG)”

Comments (5)
  1. Bati says:

    Nice!

    • Yihui says:

      The initial value x[1] had better be changed to something like this:

      x[1] = sum(as.integer(substring(Sys.time(), c(12, 15, 18),
        c(13, 16, 19))) * c(3600, 60, 1))/(24 * 60 * 60) 

      so that we can guarantee the first random number will lie in the range [0, 1] (if we use x[1] = as.numeric(Sys.time()), x[1] will be larger than 1 after about 30 years)

  2. michal says:

    Hi!

    Why don't you try inputing actual data from the picture and try analyzing it through some point pattern analysis? You can then test if it is really uniform :) I did not try such a thing before, but it is possible to import a graphics file to R via e.g. 'grid' package, you could then use 'locator' to get a grip on rain drop locations. That would be a funny analysis :)

    cheerios!

    michal

    • Yihui says:

      The image of my glasses is not easy to deal with because the elements in it are complicated, I think. If we really want to perform such a test, we'd better use a "cleaner" material to collect the raindrops, and take a picture on a background with a pure color. In that case, we may either simply use locator() or other methods to obtain the location of beads, and perform the further test such as ks.test() or something else.

Leave a Reply

(required)

(required)

WWW.YIHUI.NAME XIE@YIHUI.NAME © 2007 - 2010 by Yihui Xie