If you're seeing this message, it means we're having trouble loading external resources on our website.

Se você está atrás de um filtro da Web, certifique-se que os domínios *.kastatic.org e *.kasandbox.org estão desbloqueados.

Conteúdo principal

Distribuição normal de números aleatórios

Digamos que queremos criar um programa que gera um mundo de macacos. Seu programa poderia gerar mil objetos Monkey, cada um deles com um valor de altura entre 200 e 300 (uma vez que este é um mundo de macacos que têm alturas entre 200 e 300 pixels).
var randomHeight = random(200, 300);
Isso retrata com precisão as alturas de seres do mundo real? Pense em uma calçada movimentada da cidade de Nova York. Ao escolher qualquer pessoa da rua, pode parecer que sua altura é aleatória. No entanto, não se trata do tipo de aleatoriedade que random() produz. A altura das pessoas não é distribuída de maneira uniforme. Há muito mais pessoas com uma altura média que pessoas muito baixas ou muito altas. Para simular a natureza, talvez seja interessante que haja uma probabilidade maior de que nossos macacos tenham uma altura média (250 pixels), e ainda assim, que eles possam ser, ocasionalmente, muito baixos ou muito altos.
Uma distribuição de valores que se encontram próximos de uma média (chamada de “valor esperado”) é conhecida como uma distribuição “normal”. Ela também é chamada de distribuição Gaussiana (em homenagem ao matemático Carl Friedrich Gauss) ou, se você for francês, distribuição de Laplace (em homenagem a Pierre-Simon Laplace). Os dois matemáticos trabalharam ao mesmo tempo, no início do século XIX, definindo esse tipo de distribuição.
Ao representar graficamente a distribuição, obtém-se algo como a figura abaixo, conhecida informalmente como curva de sino:
Gráfico de uma curva de sino padrão
Uma curva de sino padrão
A curva é gerada por uma função matemática que define a probabilidade de um valor qualquer ocorrer como uma função da média (muitas vezes escrita como μ, a letra grega mu) e do desvio-padrão (σ, a letra grega sigma).
É bem fácil entender o valor esperado. Se os nossos valores de altura estão entre 200 e 300, quer dizer que, provavelmente, você tem uma ideia intuitiva de que o valor esperado (ou seja, a média) seja 250. No entanto, e se eu dissesse que o desvio-padrão é 3 ou 15? O que isso significa para os números? Analisando os gráficos, podemos encontrar uma dica. O gráfico acima nos mostra a distribuição com um desvio-padrão bastante baixo, em que a maioria dos valores se encontra próxima ao valor esperado. O gráfico abaixo nos mostra um desvio-padrão mais alto, em que os valores são igualmente mais espaçados em relação à média:
Gráfico de uma curva de sino com um desvio-padrão mais alto
Uma curva de sino com um desvio-padrão mais alto
O conceito de "desvio-padrão" não é familiar? Não se preocupe! Você pode estudar variância e desvio-padrão separadamente na Khan Academy antes de continuar.
Os números funcionam da seguinte maneira: dada uma população, 68% dos membros dessa população terão valores no intervalo de um desvio-padrão do valor esperado, 98% dela terão valores em dois desvios-padrão e 99,7%, em três desvios-padrão. Dado um desvio-padrão de 5 pixels, apenas 0,3% das alturas dos macacos será inferior a 235 pixels (três desvios-padrão abaixo do valor esperado de 250) ou superior a 265 pixels (três desvios-padrão acima do valor esperado de 250).

Cálculo do valor esperado e do desvio-padrão
Considere uma turma de dez alunos que recebem as seguintes notas (de 0 a 100) em uma prova:
85, 82, 88, 86, 85, 93, 98, 40, 73, 83
O valor esperado é a média: 81,3
O desvio-padrão é calculado como a raiz quadrada da média dos quadrados dos desvios próximos ao valor esperado. Em outras palavras, é o mesmo que calcular a diferença do valor esperado de cada aluno e elevar isso ao quadrado (variância). Calcule a média de todos esses valores e calcule as raízes quadradas como o desvio-padrão.
NotaDiferença do valor esperadoVariância
858581,3 = 3,7(3,7)2 = 13,69
828281,3 = 0,7(0,7)2 = 0,49
888881,3 = 6,7(6,7)2 = 44,89
etc.... ... 
 Variância média:228,81
O desvio-padrão é a raiz quadrada da variância média: 15,13
Quer entender melhor o desvio-padrão? Você pode estudar variância e desvio-padrão em mais profundidade aqui na Khan Academy.

Para nossa sorte, para usar uma distribuição normal de números aleatórios em um programa, não precisamos fazer nenhum desses cálculos. Ao invés disso, podemos usar o objeto Random fornecido pela ProcessingJS.
Para usar Random, primeiro devemos instanciar um novo objeto Random, passando 1 como o parâmetro. Chamamos essa variável de "generator" porque o que criamos pode ser basicamente considerado um gerador de números aleatórios.
var generator = new Random(1);
Se quisermos produzir um número aleatório com uma distribuição normal (ou Gaussiânica) cada vez que passarmos por draw(), isso é tão fácil quanto chamar a funçãonextGaussian().
var num = generator.nextGaussian();
println(num);
Então, agora, o que devemos fazer com este valor? E se quisermos usá-lo, por exemplo, para atribuir a posição x de um formato que desenhamos na tela?
A função nextGaussian() retorna uma distribuição normal de números aleatórios com os seguintes parâmetros: um valor esperado de zero e um desvio-padrão de um. Digamos que queremos um valor esperado de 200 (o pixel horizontal do centro em uma janela de largura igual a 400) e um desvio-padrão de 60 pixels. Podemos ajustar o valor aos nossos parâmetros, se o multiplicarmos pelo desvio-padrão e somarmos ao valor esperado.
var standardDeviation = 60;
var mean = 200;
var x = standardDeviation * num + mean;
Agora já podemos criar nosso programa que desenha círculos semitransparantes, de acordo com uma distribuição normal. O ponto mais escuro ficará perto do centro, onde a maioria dos valores está. Porém, de vez em quando, os círculos são desenhados em um local mais distante, à direita ou à esquerda do centro.

Este curso "Natural Simulations" é um derivado do "The Nature of Code" por Daniel Shiffman, usado sob a Creative Commons Attribution-NonCommercial 3.0 Unported License.

Quer participar da conversa?

Você entende inglês? Clique aqui para ver mais debates na versão em inglês do site da Khan Academy.