Intentaba simular la inyección de puntos aleatorios dentro de un círculo, de modo que cualquier parte del círculo tenga la misma probabilidad de tener un defecto. Esperaba que la cuenta por área de la distribución resultante siguiera una distribución de Poisson si rompo el círculo en rectángulos de igual área.
Como solo requiere colocar puntos dentro de un área circular, inyecté dos distribuciones aleatorias uniformes en coordenadas polares: (radio) y (ángulo polar).
Pero después de hacer esta inyección, claramente obtengo más puntos en el centro del círculo en comparación con el borde.
¿Cuál sería la forma correcta de realizar esta inyección a través del círculo de modo que los puntos se distribuyan aleatoriamente a través del círculo?
random-generation
circular-statistics
Jonjilla
fuente
fuente
Respuestas:
Desea que la proporción de puntos sea uniformemente proporcional al área en lugar de la distancia al origen. Como el área es proporcional a la distancia al cuadrado, genere radios aleatorios uniformes y tome sus raíces cuadradas. Combina eso con un ángulo polar uniforme.
Esto es rápido y simple de codificar, eficiente en la ejecución (especialmente en una plataforma paralela), y genera exactamente el número prescrito de puntos.
Ejemplo
Este es un
R
código de trabajo para ilustrar el algoritmo.fuente
Se pueden usar muestras de rechazo . Esto significa que podemos tomar muestras de la distribución uniforme 2D y seleccionar muestras que satisfagan la condición del disco.
Aquí hay un ejemplo.
fuente
Te daré una respuesta general n-dimensional que también funciona para casos bidimensionales, por supuesto. En tres dimensiones, un análogo de un disco es el volumen de una bola sólida (esfera).
Hay dos enfoques que voy a discutir. Uno de ellos lo llamaría "preciso" , y obtendrá una solución completa con él en R. El segundo lo llamo heurístico , y es solo la idea, no se proporciona una solución completa.
Solución "precisa"
Mi solución se basa en los trabajos de Marsaglia y Muller . Básicamente, sucede para que el vector gaussiano normalizado a su norma le dé los puntos distribuidos uniformemente en una hiperesfera d-dimensional:
Aquí hay un fragmento de código para el caso 3D, es decir, una bola sólida:
Enfoque heurístico
fuente
Aquí hay una solución alternativa en
R
:fuente
r <- seq(0, 1, by=1/10)
r
de Uniform (0,1).