4 votos

Cómo generar eficientemente un conjunto de números uniformemente distribuidos que sumen $n$ .

Necesito una solución más generalizada para este problema.

Tengo un generador de números aleatorios que genera números del 0 al 1. Usando esto, quiero encontrar $r$ números que se suman a $n$ . ¿Cómo puedo hacer esto de manera eficiente y de forma que los números se distribuyan uniformemente?

Para mi caso concreto, necesito poder generar $6$ números que suman $2\pi$ .

Editar: He pensado en utilizar posiblemente el mismo método de la otra pregunta, pero multiplicando el conjunto final de números por $2\pi$ . ¿Estaría esto uniformemente distribuido? Y si es así, ¿cómo se puede demostrar (aunque esto es sólo por curiosidad)?

1voto

user21820 Puntos 11547

Como tus números aleatorios deben sumar n, deben ser dependientes, pero entonces no tiene mucho sentido porque podrías dejar que uno de ellos fuera $X \sim U([0,a])$ y el resto todo sea $\frac{1}{r-1}(n-X) \sim U([\frac{n-a}{r-1},\frac{n}{r-1}])$ para cualquier $a \ge 0$ . Todas ellas están ciertamente uniformemente distribuidas pero son bastante inútiles como números aleatorios, al igual que en el método de soakley, ya que no tiene sentido tener dos o más variables aleatorias que estén tan directamente relacionadas.

0voto

Mischa Puntos 26200

Hay una manera fácil de hacerlo cuando $r$ es incluso mediante el uso de pares correlativos. Por lo tanto, para su problema, aquí es cómo:

Generar $X_1 \sim \textrm{Unif}[0,{2 \pi \over 3}]$ y $X_2 = {2 \pi \over 3} - X_1.$ Del mismo modo, generar $X_3 \sim \textrm{Unif}[0,{2 \pi \over 3}]$ y $X_4 = {2 \pi \over 3} - X_3.$ Por último, haz lo mismo con el tercer par, con $X_5 \sim \textrm{Unif}[0,{2 \pi \over 3}]$ y $X_6 = {2 \pi \over 3} - X_5.$ Cada par suma ${2 \pi \over 3},$ y la suma de los 6 es $2 \pi$ según sea necesario.

Por último, cada una de las variables aleatorias componentes tiene una distribución uniforme en $[0,{2 \pi \over 3}].$

0voto

Mischa Puntos 26200

Esta es otra forma que se puede generalizar a $r$ números. Mostraré la construcción para 6 números que suman 1. Para ver el mismo método con $r=5,$ mira el enlace en la primera línea de la pregunta.

Generar $V$ como Uniforme $[0,{1 \over 3}].$

Dejemos que $$ W = \begin{cases} V+{1/15} \ , & \text{if} \ V \le {4/15} \\ V-{4/15} \ , & \text{if} \ V \gt {4/15} \end{cases} $$

$$ X = \begin{cases} V+{2/15} \ , & \text{if} \ V \le {3/15} \\ V-{3/15} \ , & \text{if} \ V \gt {3/15} \end{cases} $$ $$ Y = \begin{cases} V+{3/15} \ , & \text{if} \ V \le {2/15} \\ V-{2/15} \ , & \text{if} \ V \gt {2/15} \end{cases} $$

$$ Z = \begin{cases} V+{4/15} \ , & \text{if} \ V \le {1/15} \\ V-{1/15} \ , & \text{if} \ V \gt {1/15} \end{cases} $$

$$U = 1-V-W-X-Y-Z.$$

0voto

Mark Gerolimatos Puntos 101

Me disculpo por la respuesta ingenua, pero no lo entiendo: ¿Por qué no elegir una forma modificada de la sugerencia del autor de la pregunta? ¿Por qué no se pueden generar N números de la distribución, y luego simplemente normalizar multiplicando cada uno por la relación de (suma_deseada/suma_real_de_los_números)?

No soy un tipo de matemáticas, pero ¿por qué no funciona esta respuesta? Lo mejor es que lo más seguro es que sigan distribuidos uniformemente (Casi seguro $C \times \operatorname{Unif}[0,1] $ es $\operatorname{Unif}[0,C]$ ), aunque en una región diferente (nota: basta con multiplicar por $2\pi$ es insuficiente, ya que no hay garantía de que los números sumen $1$ de hecho, eso sería un milagro).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X