Estou procurando um algoritmo para gerar uma matriz de N números aleatórios, de modo que a soma dos N números seja 1 e todos os números estejam entre 0 e 1. Por exemplo, N = 3, o ponto aleatório (x, y, z) deve estar dentro do triângulo:
x + y + z = 1
0 < x < 1
0 < y < 1
0 < z < 1
Idealmente, quero que cada ponto dentro da área tenha igual probabilidade. Se for muito difícil, posso cancelar o requisito. Obrigado.
Respostas:
Vamos primeiro assumir que você deseja provar dentro de
Isso não faz muita diferença, pois o ponto de amostra ainda estará na área solicitada com alta probabilidade.
Agora você fica com a amostragem de um ponto a partir de um simplex . No exemplo 3d, você obtém um 2d simplex (triângulo) realizado em 3d.
Como escolher um ponto uniformemente aleatoriamente foi discutido neste post do blog (veja os comentários).
0.4 0.2 0.1
0 0.1 0.2 0.4 1
0.1 0.1 0.2 0.6
x+y+z=1
fonte
Isso é para adicionar às respostas existentes.
Devroye é uma excelente referência para perguntas desse tipo. A Cap.7 fornece os algoritmos necessários para gerar estatísticas uniformes de ordem, das quais o OP está atrás.
fonte
Aqui,
uniform(0,1)
retorna um número real independentemente e uniformemente distribuído entre 0 e 1.fonte
Veja este artigo : Smith, N. e Tromble, R., Amostragem uniformemente a partir da unidade simplex .
fonte