63 votos

Elegir puntos al azar en el volumen de la esfera con probabilidad uniforme

Tengo una esfera de radio $R_{s}$ y me gustaría elegir puntos al azar en su volumen con una probabilidad uniforme. ¿Cómo puedo hacerlo evitando cualquier tipo de agrupación alrededor de los polos o del centro de la esfera?


Ya que soy incapaz de responder a mi propia pregunta, he aquí otra solución:

Utilizando la estrategia sugerida por Wolfram MathWorld para elegir puntos en la superficie de una esfera: Sea $\theta$ sean números reales distribuidos aleatoriamente en el intervalo $[0,2\pi]$ , dejemos que $\phi=\arccos(2v−1)$ donde $v$ es un número real aleatorio en el intervalo $[0,1]$ y que $r=R_s (\mathrm{rand}(0,1))^\frac13$ . Convirtiendo de coordenadas esféricas, un punto aleatorio en $(x,y,z)$ dentro de la esfera sería por tanto: $((r\cos(\theta)\sin(\phi)),(r\sin(\theta)\sin(\phi)),(r\cos(\phi)))$ .

Una prueba rápida con algunos miles de puntos en la esfera de la unidad parece no mostrar ninguna agrupación. Sin embargo, agradecería cualquier comentario si alguien ve un problema con este enfoque.

0 votos

Resumen: Nate propuso un método de transformación, mientras que Kevin propuso un método de rechazo.

0 votos

Creo que la solución que has sacado de MathWorld es sólida, aunque un poco más lenta que los planteamientos propuestos en la respuesta (¡evaluar funciones trascendentales es caro!).

1 votos

No sé mucho pero, mi enfoque sería algo parecido a elegir un polo al azar desde la superficie hasta el centro y luego elegir un punto en esa línea donde la probabilidad es mayor cuanto más cerca de la superficie, para tener en cuenta la expansión de la esfera.

77voto

Reto Meier Puntos 55904

Digamos que tu esfera está centrada en el origen $(0,0,0)$ .

Para la distancia $D$ desde el origen de su punto aleatorio, tenga en cuenta que quiere $P(D \le r) = \left(\frac{r}{R_s}\right)^3$ . Por lo tanto, si $U$ se distribuye uniformemente entre 0 y 1, tomando $D = R_s U^{1/3}$ hará el truco.

Para la dirección, un hecho útil es que si $X_1, X_2, X_3$ son variables aleatorias normales independientes con media 0 y varianza 1, entonces $$\frac{1}{\sqrt{X_1^2 + X_2^2 + X_3^2}} (X_1, X_2, X_3)$$ se distribuye uniformemente en (la superficie de) la esfera unitaria. Se pueden generar variables aleatorias normales a partir de las uniformes de varias maneras; la Algoritmo de Box-Muller es un enfoque sencillo y agradable.

Así que si eliges $U$ distribuido uniformemente entre 0 y 1, y $X_1, X_2, X_3$ normal iid e independiente de $U$ entonces $$\frac{R_s U^{1/3}}{\sqrt{X_1^2 + X_2^2 + X_3^2}} (X_1, X_2, X_3)$$ produciría un punto uniformemente distribuido dentro de la bola de radio $R_s$ .

13 votos

Esto también se generaliza a la $n$ -esfera (con $D = R_s U^{1/n}$ ).

0 votos

Entonces, ¿cuál es la función de densidad de probabilidad (pdf) de dicha distribución (digamos que estamos en $n$ dimensiones). De alguna manera se introduce la función gamma. ¿Podríais ayudarme un poco? Gracias.

1 votos

@nullgeppetto: El pdf es igual a una constante en la bola $B(R_s)$ y 0 fuera del balón. Eso es lo que significa "uniformemente distribuido". La constante será 1 sobre el volumen de la bola (para que el pdf se integre a 1). Puedes encontrar una fórmula para este volumen (con varias derivaciones) en Wikipedia . Sí, algunas formas de escribir la fórmula implican la función gamma.

18voto

Ken Puntos 106

Un método alternativo en $3$ dimensiones:

Paso 1: Tome $x, y, $ y $z$ cada uniforme en $[-r_s, r_s]$ .

Paso 2: Si $x^2+y^2+z^2\leq r_s^2$ , para. Si no es así, tíralos y vuelve al paso $1$ .

Su probabilidad de éxito cada vez viene dada por el volumen de la esfera sobre el volumen del cubo, que es aproximadamente $0.52$ . Así que necesitarás un poco más de $2$ muestras de media.

Si estás en dimensiones más altas, esto no es un proceso muy eficiente en absoluto, porque en un gran número de dimensiones un punto aleatorio del cubo probablemente no está en la esfera (por lo que tendrás que tomar muchos puntos antes de obtener un éxito). En ese caso, una versión modificada del algoritmo de Nate sería el camino a seguir.

1 votos

¿Podría explicar por qué funciona esta técnica?

4 votos

La idea es escoger puntos uniformemente del cubo (lo cual es fácil, ya que puedes escoger cada coordenada por separado), y luego descartar cualquier punto que no esté en la esfera. Mientras los puntos sean uniformes en el conjunto mayor, seguirán siendo uniformes cuando se restrinja al conjunto menor.

0 votos

Un cubo de 3 tiene 8 esquinas; un cubo de 16 tiene 32.768 esquinas. Este método no pasará la mayor parte de su tiempo (en 16 dimensiones) generando puntos que están en las esquinas pero no dentro de la bola?

16voto

palehorse Puntos 8268

Nate y Kevin ya respondieron a los dos que conocía... Recordando este y este Creo que otra forma de generar una distribución uniforme sobre la superficie de la esfera sería generar una distribución uniforme sobre el cilindro vertical que encierra la esfera, y luego proyectarla horizontalmente.

Es decir, generar $z \sim U[0,R]$ , $\theta \sim U[0,2\pi]$ y luego $x=\sqrt{R^2-z^2} \cos(\theta)$ , $y=\sqrt{R^2-z^2} \sin(\theta)$ . Esto (si no me equivoco) da una distribución uniforme sobre la superficie de la esfera. Luego, aplica la receta de Nate para obtener una distribución uniforme sobre el volumen de la esfera.

Este método es un poco más simple (y más eficiente) que la respuesta aceptada, aunque no es generalizable a otras dimensiones.

2 votos

Por si no está claro, este método funciona gracias al teorema de Arquímedes sobre el corte de cilindros y esferas: mathworld.wolfram.com/ArchimedesHat-BoxTheorem.html

0 votos

Creo que se necesita un factor de $\sqrt{R^2 - z^2}$ en la elección de $x$ y $y$ para estar en la superficie de la esfera.

0 votos

@ErikP. Claro, tienes razón, se me olvidó hacer la proyección, había dejado los puntos sobre la superficie del cilindro. Arreglado, ¡gracias!

10voto

thomasfermi Puntos 131

Sólo quiero añadir una pequeña derivación a la respuesta de leonbloy, que utiliza el cálculo en lugar de la intuición geométrica. Pasando de la cartesiana $(x,y,z)$ a la esférica $(r,\theta,\phi)$ coordenadas, tenemos para el elemento de volumen $$dx dy dz =r^2 \sin \theta ~ dr d\theta d\phi$$ Las coordenadas $(r,\theta,\phi)$ no funcionan para una distribución uniforme porque seguimos teniendo un factor no constante delante de $dr d\theta d\phi$ . Por lo tanto, introducimos $$u=-\cos \theta \Rightarrow du= \sin \theta d\theta$$ $$\lambda=r^3/R^3 \Rightarrow d \lambda=\frac{3}{R^3}r^2dr$$ con lo que obtenemos una expresión con un pre-factor constante $$dx dy dz= \frac{R^3}{3} d\lambda du d\phi$$ El rango de nuestras variables es $\lambda \in [0,1], ~u \in [-1,1), \phi \in [0, 2\pi) $ . Eligiendo estos números de manera uniforme obtenemos las coordenadas cartesianas

$$ \begin{align} x&=r \sin(\theta) \cos (\phi) =&R \lambda^{1/3} \sqrt{1-u^2}\cos(\phi)\\ y&=r \sin(\theta) \sin (\phi) =&R \lambda^{1/3} \sqrt{1-u^2}\sin(\phi) \\ z&=r \cos (\theta)=&R \lambda^{1/3} u \end{align} $$

0 votos

¿Por qué tienes $r^3/R^3$ . No entiendo esto. También creo que $u\in[-1,1]$ ya que $u$ es un coseno y va de la forma $-1$ a $1$ . Estoy de acuerdo sólo para el $\pi \in [0,2\pi)$ ya que si $2\pi$ se incluyera, tendríamos un doble recuento de los positivos $x$ eje.

0 votos

Tiene razón sobre $u \in [-1,1]$ Gracias por señalarlo. En cuanto a $\lambda=r^3/R^3$ : Esta es una opción para garantizar que para las nuevas variables $(\lambda,u,\phi)$ el elemento volument es $dV=const. d\lambda du d\phi$ en lugar de $dV=f(\lambda,u,\phi) d\lambda du d\phi$

0 votos

En realidad, al establecer $\lambda=r^3$ sin el $\frac{1}{R^3}$ se seguiría obteniendo un factor constante. Creo que las cosas son más complicadas que una simple sustitución. Por favor, echa un vistazo a mi comentario bajo la primera respuesta a esta pregunta. Propuse alguna explicación, por qué necesita el $\frac{r^3}{R^3}$ . En cuanto a tu método, de reducir el factor antes del elemento diferencial a la unidad, podrías darme alguna referencia donde pueda leer más al respecto.

0voto

user628474 Puntos 1

Una forma mucho más sencilla sería emparejar las superficies a diferentes distancias del centro.

La superficie de una esfera de radio R tiene un área de 4 R^2

Así que sólo hay que emparejar varias superficies que sumen la misma área.

Por ejemplo:

Superficie de la esfera con r = 0 emparejada con la superficie de la esfera con r = R para tener un área total de 4 R^2

Superficie de la esfera con r = R/2 emparejada con la superficie de la esfera con r = sqrt(3)R/2 para tener un área total de 4 R^2

Para obtener el punto aleatorio, haz los siguientes pasos:

1) Para elegir theta (se puede elegir uniformemente en todo su rango, ya que todos los valores de theta son igualmente probables):

Elige un "theta" aleatorio en el rango [0, 2]

2) Para elegir phi (Utilice la misma estrategia que para las áreas, pero esta vez se aplicará emparejando la circunferencia del círculo para un valor de phi 2 R cos(phi) con su complemento para producir una longitud total de 2 R):

Elige una "a" al azar en el rango [0, /2]

Elige una "b" aleatoria en el rango [0, 1]

Elige una "c" al azar que sea 1 o -1 (arriba o abajo)

if b <= cos(a) then
    phi = c a
else
    phi = c inv_cos(1 - cos(a))

3) Para elegir r (Emparejar cada valor de radio posible con su complemento, de forma que la suma de las superficies de las esferas sea igual a 4 R^2):

Elige una "d" aleatoria en el rango [0, 1]

Elige una "e" al azar en el rango [0, 1]

Un valor r es "d R" el valor r complementario es "sqrt(1 - d^2) R".

Área total = 4 (d R)^2 + 4 (sqrt(1 - d^2) R)^2

Área total = 4 (d^2 R^2 + (1 - d^2) R^2)

Área total = 4 (d^2 R^2 + R^2 - d^2 R^2)

Área total = 4 R^2 (como queríamos)

if e <= d^2 then
    r = d R
else
    r = sqrt(1 - d^2) R

Su punto aleatorio elegido uniformemente dentro de la esfera en coordenadas radiales es:

(r, theta, phi)

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