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
Obtenha a distribuição dos resultados após mil interações, que deve ser parecida com a que segue.
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.
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.