El generador de números aleatorios

Julia incluye un generador de números (seudo-)aleatorios (RNG, "Random Number Generator"). Cada vez que llamamos a la función rand(), regresa un número aleatorio distinto. El generador de Julia es (actualmente) uno llamado Mersenne Twister. Utiliza ideas complejas de teoría de números para asegurarse que los números aleatorios son "suficientemente aleatorios".

[1] Teclea

rand()

en el REPL o en IJulia (por ejemplo, en JuliaBox). En IJulia, utiliza Shift-Enter para ejecutar el comando y crear una nueva celda, o Ctrl-Enter para ejecutar el comando y quedarse en la misma celda.

Hazlo varias veces. ¿Qué tipo de números regresa? Utiliza la función typeof para verificar tu respuesta. El último valor se obtiene con ans. ¿Entre dónde y dónde están acotados los números?

[2] ¿Qué pasa si tecleas rand sin las paréntesis?

[3] Utiliza ?rand para obtener ayuda sobre la función.

[4] ¿Cómo se pueden generar varios números aleatorios a la vez, usando rand? ¿Y una matriz aleatoria? ¿Qué tipos tienen las respuestas obtenidas?

Graficar

Hay varios paquetes disponibles para graficar en Julia. Comenzaremos con uno llamado PyPlot, que es un interfaz de Julia a la librería matplotlib de Python. Para asegurarte de tener instalado el paquete en tu sistema, haz

Pkg.add("PyPlot")

Necesitas estar conectado a internet. Esto se hace una sola vez para cada instalación de Julia.

Luego en cada notebook, utiliza

using PyPlot

para hacer disponible la funcionalidad del paquete.

[5] Genera un número grande de números aleatorios usando rand. Asigna la respuesta obtenida a una variable x. Usa plot(x) para dibujar los resultados. Puedes agregar una opción "o" a la función plot para dibujar con puntos.

[6] Define una variable entera N. Genera dos colecciones de números aleatorios x y y, las dos de longitud N. Dibuja los pares $(x,y)$ con

plot(x, y)

con puntos. Utiliza

axis("equal")

para que la razón de aspecto se vea mejor.

¿Qué observas? ¿Qué tipo de distribución tienen los números aleatorios?

[7] Genera una colección de números aleatorios x. Genera otra colección y con el mismo tamaño que x pero con puros ceros, usando la función zeros. Dibuja el resultado para ver cómo se distribuyen los números aleatorios en una sola dimensión.

Usando los números aleatorios: caminatas aleatorias

¿Para qué utilizamos los números aleatorios? A menudo, es para llevar a cabo una operación con cierta probabilidad.

[8] Pensando en cómo se distribuyen los números aleatorios, ¿cómo se puede llevar a cabo una operación con probabilidad 0.5? ¿Con probabilidad $p$ tal que $0 < p < 1$?

[9] Define una función que genera un paso de una caminata aleatoria, que toma pasos a la izquierda con probabilidad 0.5 y a la derecha con probabilidad 0.5. La función regresa el paso escogido.

[10] Generaliza tu función para aceptar un argumento p que corresponde a la probabilidad $p$ de brincar a la derecha, y $1-p$ a la izquierda.

[11] Haz una función que genera una trayectoria de una caminata aleatoria con $N$ pasos y probabilidad $p$.


In [1]:
function f(p,n)
    x=[0.0]
    for i in 2:n
        if rand()<=p
            push!(x,x[i-1]+0.5)
        else
            push!(x,x[i-1]-0.5)
        end
    end
    return x
end


Out[1]:
f (generic function with 1 method)

In [2]:
using PyPlot

In [4]:
plot(f(0.5,100))


Out[4]:
1-element Array{Any,1}:
 PyObject <matplotlib.lines.Line2D object at 0x54b27d0>

In [ ]: