Notebook 28
Números aleatórios

Linguagens de programação incluem entre suas funções nativas algum tipo de gerador de números pseudo-aleatórios. Os números não são realmente aleatórios pois são calculados de forma determinística, mas funcionam como tal para muitos fins práticos. Aplicações específicas, entretanto, requerem abordagens mais sofisticadas e até mesmo intervenção de equipamentos para aquisição de dados de fontes radioativas, fenômenos meteorológicos etc., que fornecem números realmente aleatórios.

Em JavaScript Math.random() retorna números aleatórios entre 0 (inclusive) e 1 (exclusive) que obedecem uma distribuição uniforme. Parece restrito, mas com isso é possível gerar números aleatórios que obedecem qualquer tipo de distribuição.

É relativamente fácil especificar uma função $f(a,b)$ que gera números aleatórios entre $a$ (inclusive) e $b$ (exclusive):

$$ f(a,b) = a + (b-a) x $$

Gerar números aleatórios inteiros entre $a$ (inclusive) e $b$ (inclusive) requer alguns cuidados adicionais:

$$ f(a,b) = \text{floor}(a + x(b+1-a)); $$

Podemos utilizar um gerador com uma distribuição uniforme para gerar números aleatórios que obedecem distribuições não uniformes.

Uma distribuição uniforme de probabilidades é aquela em que a probabilidade de se gerar um número entre $x$ e $x + dx$, é dada por:

$$ p(x) dx = dx $$

A distribuição de probabilidade $p(x)$ é normalizada (ou seja, a probabilidade de gerar qualquer número é 1):

$$ \int_{-\infty}^{+\infty} p(x)dx = 1 $$

Se geramos um número aleatório $x$ e o utilizamos para calcular o valor de uma função $y(x)$, a distribuição de probabilidade de $y$, denotada por $p(y)dy$, pode ser obtida com a lei fundamental da transformação das probabilidades:

$$ |p(y) dy| = |p(x) dx| $$

ou:

$$ p(y) = p(x) \left| \frac{dx}{dy} \right| $$

Fazendo $p(x)$ = 1 (distribuição uniforme) e integrando a equação obtém-se:

Consideremos um exemplo concreto.

$$ x = \int_0^y p(y') dy' $$

Invertendo a equação resultante da integração, obtém-se a função $y(x)$ que, dado um número $x$ sorteado de uma distribuição uniforme $p(x)$, retorna um número $y$ que obedece a distribuição $p(y)$.

Um exemplo concreto pode deixar o procedimento mais claro. A distribuição de probabilidades:

$$ p(y) dy = 2y\,dy, \text{ para} 0 \le y \le 1 $$

fornece números aleatórios que obedecem uma "rampa" linear entre 0 e 1 (o fator dois é a constante de normalização, de modo que a integral da função no intervalo considerado seja 1). Utilizando a lei de transformação de probabilidades, fazendo $p(x)$ = 1, integrando a equação e invertendo o resultado obtém-se:

\begin{eqnarray} x & = & \int 2y\,dy = y^2 \\ y & = & \sqrt{x} \\ \end{eqnarray}

Em palavras, isso significa que a raiz quadrada de números sorteados de uma distribuição uniforme obedecem à rampa linear.

Exercícios

  1. Imagine um sistema que a cada interação pode gerar 1 entre 5 resultados distintos (1,2,3,4,5, por exemplo). Internamente o sistema contém 3 subsistemas. A cada interação, os 3 subsistemas têm iguais probabilidades de serem acionados. O subsistema 1 gera apenas os 3 primeiros resultados (1,2,3), com igual probabilidade, o subsistema 2 gera apenas os 3 últimos resultados (3,4,5), com igual probabilidade e o subsistema 3 gera os 3 resultados intermediários (2,3,4), com igual probabilidade.

    Obtenha a distribuição dos resultados após mil interações, que deve ser parecida com a que segue.

  2. Faça um programa que gere uma sequência com $n$ números aleatórios inteiros entre $a$ (inclusive) e $b$ (inclusive) não repetidos (a cada sorteio, o programa deve verificar se o número já foi sorteado, aceitá-lo caso negativo ou descartá-lo caso afirmativo).

  3. Implemente um gerador de números aleatórios que retorne ângulos entre 0 e 90 graus cuja probabilidade de sorteio obedeça uma função cosseno. Esta é, por exemplo, a probabilidade de deteção de raios cósmicos na superfície da Terra, pois para ângulos próximos a 90 graus a espessura de atmosfera a ser atravessada é grande, o que reduz a probabilidade de deteção. Para ângulos próximos de 0 graus, a espessura de atmosfera atravessada é mínima, o que maximiza a deteção.

  4. A probabilidade de que o tempo de espera entre dois decaimentos sucessivos de uma fonte radioativa esteja entre $t$ e $t + dt$ é dada por uma distribuição exponencial: $$ p(t) dt = \lambda \; e^{-\lambda t} dt $$

    onde $\lambda$ é a constante de decaimento do nuclídeo, relacionada à sua meia-vida $T_{1/2}$ por $\lambda = \ln 2/T_{1/2}$

    Neste caso, $y \equiv t$, de modo que:

    $$ \left| \frac{dx}{dy} \right| = \left| \frac{dx}{dt} \right| = \lambda \; e^{-\lambda t} $$

    Integrando essa equação (esqueça o módulo, ele está aí para lembrá-lo de jogar fora sinais negativos — probabilidades são sempre positivas!), obtemos:

    $$ x = \int \lambda \; e^{-\lambda t} dt = - e^{-\lambda t} $$

    Invertendo a equação, obtemos $t$ em função de $x$:

    $$ t = - \frac{1}{\lambda} \ln x $$

    Desta maneira, geramos um número aleatório $x$ que obedece uma distribuição uniforme e o utilizamos para calcular um número aleatório $t$ que obedece uma distribuição exponencial.

    O gráfico a seguir mostra a distribuição do tempo decorrido entre 1000 "decaimentos" de uma fonte radioativa com $\lambda$ = 1 s−1, distribuídos em intervalos de 0,1 segundos.

  5. Um feixe de partículas incide sobre um alvo e são espalhadas. Detetores no arranjo experimental medem a quantidade de partículas espalhadas entre 0° e 180°, inclusive, em intervalos regulares de 6°. A tabela a seguir mostra os dados obtidos.

    Faça gráficos dos dados experimentais e da integral normalizada a 1, como os apresentados a seguir.

    Implemente um gerador de números aleatórios que que gere números que simule os resultados do experimento. O seu gerador deve sortear um número entre 0 e 1 de uma distribuição uniforme (por exemplo, 0,5). Este valor deve ser utilizado para encontrar o valor correspondente no eixo $x$ (o ângulo) no gráfico da integral. A figura a seguir mostra o resultado de 10 mil eventos distribuídos em um histograma com 180 canais.