Gerar a mesma sequência de números aleatórios no Matlab
Nesta aula, vou demonstrar como gerar sequências de números aleatórios consistentes no Matlab.
Por que é importante gerar números aleatórios consistentes? A geração de números aleatórios se baseia em algoritmos que produzem listas de números pseudoaleatórios a partir de sementes, conforme distribuições estatísticas. Essa sequência varia em cada sessão, mas há situações em que é fundamental manter a mesma sequência, como durante o teste de um programa.
Para alcançar sequências consistentes, é possível armazenar o estado da sequência numa variável.
>> x=rand("state");
Com isso, você configura o estado da função rand() no início do seu script ou sessão, utilizando a variável x.
>> rand("state",x);
Este comando do Matlab assegura a repetição da mesma sequência de números aleatórios em todas as execuções.
Veja um exemplo prático:
Crie uma matriz de inteiros aleatórios.
>> randi(3,3)
ans =
1 3 1
1 2 3
1 2 3
Depois, reintroduza a geração de números aleatórios na memória usando a variável x.
>> rand("state",x);
A seguir, gere uma nova matriz aleatória 3x3.
>> randi(3,3)
ans =
1 3 1
1 2 3
1 2 3
As duas matrizes resultarão idênticas.
Assim, é possível gerar a mesma sequência de números aleatórios quantas vezes for necessário.
Observação: Para utilizar a mesma variável x em outras sessões ou em diferentes computadores, é recomendável salvar o conteúdo da variável num arquivo no seu computador e carregá-lo na memória do Matlab ao iniciar uma nova sessão.
Reiniciando a Sequência de Números Aleatórios
Para reiniciar a sequência do estado atual, utilize 0 como segundo parâmetro.
Por exemplo, digite rand("state", x) para carregar a sequência de números aleatórios previamente salva na variável x.
>> rand("state",x);
Gere uma matriz de inteiros aleatórios.
>> randi(3,3)
ans =
1 3 1
1 2 3
1 2 3
Ao digitar rand("state", 0), você reinicia a sequência.
>> rand("state",0)
Em seguida, crie uma matriz aleatória 3x3.
>> randi(3,3)
ans =
1 3 1
1 2 3
1 2 3
A matriz resultante será a mesma a cada execução.