Astronomía y Exploración Espacial

Educación Universitaria / Métodos numéricos en astrofísica

N cuerpos a gran escala y el árbol de Barnes–Hut

Por qué la suma directa cuesta O(N²) y cómo el árbol de octantes con criterio de apertura θ la reduce a O(N log N); suavizado gravitatorio de Plummer y su error; el teorema del virial como diagnóstico de una simulación.

⏱ 180 min complejidad algorítmicaárboles jerárquicosdesarrollo multipolarteorema del virialestadística de errores revision

Al terminar podrás:
  • Cuantificar el coste de la suma directa de fuerzas y demostrar que el número de interacciones por cuerpo en un árbol de Barnes–Hut es O(log N) para una distribución acotada.
  • Construir un árbol de octantes, definir el criterio de apertura s/d menor que θ y acotar el error de la aproximación monopolar.
  • Derivar la fuerza y el potencial del suavizado de Plummer y cuantificar el sesgo (3/2)(ε/r)² que introduce.
  • Demostrar el teorema del virial para un sistema autogravitante y usarlo como diagnóstico de equilibrio y de la calidad del suavizado.
  • Medir en una esfera de Plummer el error y el coste de Barnes–Hut en función de N y de θ.

1. Motivación: de tres cuerpos a mil millones

Ilustración: Motivación: de tres cuerpos a mil millones

En la lección anterior integramos tres cuerpos. Un cúmulo globular tiene N∼105N \sim 10^{5}–10610^{6} estrellas; una simulación cosmológica moderna, N≳1010N \gtrsim 10^{10} partículas. La aceleración de cada cuerpo,

ai=∑j≠iG mj rj−ri∥rj−ri∥3,\mathbf a_i = \sum_{j\ne i} G\,m_j\,\frac{\mathbf r_j - \mathbf r_i}{\lVert\mathbf r_j - \mathbf r_i\rVert^3},

exige N−1N - 1 términos, luego cada evaluación de fuerzas cuesta N(N−1)/2N(N-1)/2 pares: O(N2)O(N^2). Con N=106N = 10^6 son 5×10115\times10^{11} interacciones por paso; a 10910^{9} interacciones por segundo, ocho minutos por paso, y una simulación necesita 10410^{4}–10610^{6} pasos. Barnes y Hut (1986) mostraron que agrupando los cuerpos lejanos en «pseudo-partículas» el coste baja a O(Nlog⁡N)O(N\log N) con un error controlable: es el algoritmo que, con refinamientos (multipolos de orden alto, métodos multipolares rápidos, mallas), está detrás de casi toda la dinámica galáctica y cosmológica numérica.

En esta lección (y en src/lib/math/barneshut.ts) usamos unidades adimensionales con G=1G = 1. Para el modelo de Plummer adoptamos además las unidades de Hénon: masa total M=1M = 1, energía total E=−14E = -\tfrac14, con lo que el radio de escala es a=3π/16≈0.589a = 3\pi/16 \approx 0.589.

2. La idea de Barnes y Hut: aproximación monopolar

Ilustración: La idea de Barnes y Hut: aproximación monopolar

2.1 Potencial de un grupo lejano

Sea un grupo de cuerpos de masas mjm_j en posiciones rj\mathbf r_j, con masa total M=∑mjM = \sum m_j y centro de masas R=∑mjrj/M\mathbf R = \sum m_j\mathbf r_j/M, contenido en una celda de lado ss. Su potencial en un punto r\mathbf r a distancia d=∥r−R∥d = \lVert\mathbf r - \mathbf R\rVert del centro de masas, con xj=rj−R\mathbf x_j = \mathbf r_j - \mathbf R y d=r−R\mathbf d = \mathbf r - \mathbf R, es

Φ(r)=−G∑jmj∥d−xj∥=−Gd∑jmj∑ℓ=0∞(xjd)ℓPℓ(cos⁡γj),\Phi(\mathbf r) = -G\sum_j\frac{m_j}{\lVert\mathbf d - \mathbf x_j\rVert} = -\frac{G}{d}\sum_j m_j\sum_{\ell=0}^{\infty}\left(\frac{x_j}{d}\right)^{\ell} P_\ell(\cos\gamma_j),

donde PℓP_\ell son los polinomios de Legendre y γj\gamma_j el ángulo entre xj\mathbf x_j y d\mathbf d (desarrollo válido para xj<dx_j \lt d). Los tres primeros términos son:

  • ℓ=0\ell = 0 (monopolo): −GM/d-GM/d.
  • ℓ=1\ell = 1 (dipolo): −Gd2∑jmj xj⋅d^=0-\dfrac{G}{d^2}\sum_j m_j\,\mathbf x_j\cdot\hat{\mathbf d} = 0, idénticamente nulo porque ∑jmjxj=0\sum_j m_j\mathbf x_j = 0 por definición del centro de masas.
  • ℓ=2\ell = 2 (cuadrupolo): −Gd3∑jmj xj2 12(3cos⁡2γj−1)-\dfrac{G}{d^3}\sum_j m_j\,x_j^2\,\tfrac12(3\cos^2\gamma_j - 1), de tamaño ≲GMs2/d3\lesssim G M s^2/d^3.

Por tanto, al sustituir el grupo por una sola masa MM en R\mathbf R (aproximación monopolar), el error relativo del potencial es O ⁣((s/d)2)O\!\left((s/d)^2\right) y el de la fuerza, derivando, también O ⁣((s/d)2)O\!\left((s/d)^2\right). Elegir el centro de masas como centro del desarrollo es lo que mata el dipolo y hace que un parámetro tan simple como s/ds/d controle el error cuadráticamente.

2.2 El árbol de octantes

Se encierra el sistema en un cubo y se subdivide recursivamente en 8 octantes hasta que cada celda contiene a lo sumo un cuerpo. Cada celda interna guarda su masa total y su centro de masas (se acumulan durante la inserción). La construcción cuesta O(Nlog⁡N)O(N\log N) en promedio y el árbol se reconstruye en cada paso (Barnes & Hut lo hacían así; es más barato que mantenerlo).

2.3 Criterio de apertura

Para calcular la fuerza sobre el cuerpo ii se recorre el árbol desde la raíz. En cada celda de lado ss cuyo centro de masas dista dd del cuerpo:

  • si s/d<θs/d \lt \theta (la celda se ve «pequeña»), se usa su monopolo y no se desciende;
  • si no, se abre la celda y se visitan sus hijos;
  • una hoja con un solo cuerpo se trata exactamente.

θ\theta es el parámetro de apertura. Con θ=0\theta = 0 ninguna celda se acepta y el algoritmo degenera en la suma directa (nuestro test lo comprueba a 10−910^{-9}). Valores habituales: θ≈0.5\theta \approx 0.5–0.80.8. El criterio original de Barnes y Hut usa el lado ss y la distancia al centro de masas; Salmon y Warren (1994) mostraron que puede fallar para celdas cuyo centro de masas está cerca del borde, y propusieron añadir a dd el desplazamiento del centro de masas respecto del centro geométrico; nuestra implementación usa el criterio original.

2.4 Coste O(Nlog⁡N)O(N\log N)

Proposición. Para un cuerpo dado y un sistema de NN cuerpos distribuidos con densidad acotada, el número de celdas aceptadas con el criterio s/d<θs/d \lt \theta es O(θ−3log⁡N)O(\theta^{-3}\log N).

Demostración (esbozo). Las celdas del nivel kk tienen lado sk=s0/2ks_k = s_0/2^k. Una celda de ese nivel se acepta si está a distancia d>sk/θd \gt s_k/\theta y su padre fue abierto, es decir, d<2sk/θd \lt 2 s_k/\theta. Las celdas aceptadas del nivel kk viven por tanto en una cáscara esférica de radios sk/θs_k/\theta y 2sk/θ2 s_k/\theta, de volumen 4π3(8−1)(sk/θ)3\tfrac{4\pi}{3}(8 - 1)(s_k/\theta)^3, que contiene a lo sumo ≈29 θ−3\approx 29\,\theta^{-3} celdas de volumen sk3s_k^3. Como hay ≈log⁡2N1/3⋅\approx\log_2 N^{1/3}\cdot const niveles no vacíos (la profundidad del árbol es O(log⁡N)O(\log N) para densidad acotada), el total es O(θ−3log⁡N)O(\theta^{-3}\log N). Sumando sobre los NN cuerpos: O(Nθ−3log⁡N)O(N\theta^{-3}\log N). ■\blacksquare

La dependencia θ−3\theta^{-3} es dura: pasar de θ=1\theta = 1 a θ=0.5\theta = 0.5 multiplica el coste por 8. En nuestra tabla (§5) el cociente medido entre θ=1\theta = 1 y θ=0.5\theta = 0.5 es 530/179≈3530/179 \approx 3, menor que 8 porque a N=2000N = 2000 muchas interacciones son con hojas individuales, no con celdas.

3. Suavizado gravitatorio

Ilustración: Suavizado gravitatorio

3.1 Por qué hace falta

Con NN finito, dos cuerpos pueden acercarse arbitrariamente y la fuerza ∝1/r2\propto 1/r^2 diverge: el paso de tiempo tendría que hacerse minúsculo y, peor, una «colisión» entre dos partículas de simulación no representa nada físico cuando cada partícula simboliza 10410^{4} estrellas o una porción de materia oscura. Se sustituye el potencial de cada partícula por el de una esfera de Plummer de radio ε\varepsilon:

Φε(r)=−Gmr2+ε2,aε=−∇Φε=−Gm r(r2+ε2)3/2.\Phi_\varepsilon(r) = -\frac{G m}{\sqrt{r^2 + \varepsilon^2}},\qquad \mathbf a_\varepsilon = -\nabla\Phi_\varepsilon = -\frac{G m\,\mathbf r}{(r^2 + \varepsilon^2)^{3/2}} .

Es exactamente el potencial generado por la densidad de Plummer (1911), ρ(r)=3m4πε3(1+r2/ε2)−5/2\rho(r) = \dfrac{3m}{4\pi\varepsilon^3}\left(1 + r^2/\varepsilon^2\right)^{-5/2} (ejercicio 3). La fuerza es finita en todas partes: su máximo, ∣a∣max⁡=2Gm33 ε2\lvert a\rvert_{\max} = \dfrac{2Gm}{3\sqrt3\,\varepsilon^2}, ocurre en r=ε/2r = \varepsilon/\sqrt2 (ejercicio 4). Ese mismo ε\varepsilon es el parámetro eps de accelerations en integrators.ts y de todo el módulo barneshut.ts.

3.2 Sesgo y ruido

El precio es un sesgo: para r≫εr \gg \varepsilon,

∣aε∣∣a∣=(1+ε2r2)−3/2=1−32ε2r2+O ⁣(ε4r4),\frac{\lvert\mathbf a_\varepsilon\rvert}{\lvert\mathbf a\rvert} = \left(1 + \frac{\varepsilon^2}{r^2}\right)^{-3/2} = 1 - \frac32\frac{\varepsilon^2}{r^2} + O\!\left(\frac{\varepsilon^4}{r^4}\right),

la fuerza queda subestimada en un 1.5 (ε/r)21.5\,(\varepsilon/r)^2 (1.51.5 % a r=10εr = 10\varepsilon, 1515 % a r=3εr = 3\varepsilon: sesgoPlummer). Dehnen (2001) analiza el compromiso: ε\varepsilon grande reduce el ruido de la fuerza (las fluctuaciones por el número finito de vecinos, que escalan como N−1/2N^{-1/2} para las fuerzas de corto alcance) pero aumenta el sesgo; existe un ε\varepsilon óptimo que decrece con NN aproximadamente como N−0.2N^{-0.2}–N−0.3N^{-0.3} para el perfil de Plummer, y los núcleos de soporte compacto (splines) son preferibles al de Plummer porque su sesgo se anula exactamente para r>2εr \gt 2\varepsilon. Una regla práctica: ε\varepsilon del orden de la separación media entre vecinos en la región más densa; en nuestra esfera de Plummer con N=1000N = 1000 esa distancia media al vecino más próximo es 0.220.22 (unidades de Hénon).

4. El teorema del virial

Ilustración: El teorema del virial

4.1 Enunciado y demostración

Sea I=∑imi∥ri∥2I = \sum_i m_i\lVert\mathbf r_i\rVert^2 el momento de inercia escalar. Derivando dos veces,

12I¨=∑imi∥vi∥2+∑iri⋅Fi=2K+V,\frac12\ddot I = \sum_i m_i\lVert\mathbf v_i\rVert^2 + \sum_i \mathbf r_i\cdot\mathbf F_i = 2K + \mathcal V,

donde KK es la energía cinética y V=∑iri⋅Fi\mathcal V = \sum_i\mathbf r_i\cdot\mathbf F_i es el virial de Clausius. Para fuerzas por pares Fij=−Fji\mathbf F_{ij} = -\mathbf F_{ji} dirigidas según rij=ri−rj\mathbf r_{ij} = \mathbf r_i - \mathbf r_j, agrupando pares,

V=∑i<j(ri−rj)⋅Fij.\mathcal V = \sum_{i<j}\left(\mathbf r_i - \mathbf r_j\right)\cdot\mathbf F_{ij}.

Si Fij\mathbf F_{ij} deriva de un potencial homogéneo de grado −1-1 (Φ=−Gmimj/rij\Phi = -G m_i m_j/r_{ij}), rij⋅Fij=−r ∂rΦ=Φ\mathbf r_{ij}\cdot\mathbf F_{ij} = -r\,\partial_r\Phi = \Phi, y V=W\mathcal V = W, la energía potencial total. Promediando en el tiempo un sistema acotado (⟨I¨⟩=0\langle\ddot I\rangle = 0):

2⟨K⟩+⟨W⟩=0,E=⟨K⟩+⟨W⟩=−⟨K⟩=12⟨W⟩.2\langle K\rangle + \langle W\rangle = 0,\qquad E = \langle K\rangle + \langle W\rangle = -\langle K\rangle = \tfrac12\langle W\rangle.

■\blacksquare (Binney & Tremaine §4.8.)

4.2 El virial con suavizado

Con Plummer la fuerza no es homogénea de grado −2-2, y el virial de la fuerza difiere de la energía potencial suavizada:

Vε=−∑i<jGmimj rij2(rij2+ε2)3/2,Wε=−∑i<jGmimjrij2+ε2,Vε=Wε+∑i<jGmimj ε2(rij2+ε2)3/2.\mathcal V_\varepsilon = -\sum_{i<j}\frac{G m_i m_j\, r_{ij}^2}{(r_{ij}^2 + \varepsilon^2)^{3/2}},\qquad W_\varepsilon = -\sum_{i<j}\frac{G m_i m_j}{\sqrt{r_{ij}^2 + \varepsilon^2}},\qquad \mathcal V_\varepsilon = W_\varepsilon + \sum_{i<j}\frac{G m_i m_j\,\varepsilon^2}{(r_{ij}^2+\varepsilon^2)^{3/2}} .

Así que la relación correcta en equilibrio es 2K+Vε=02K + \mathcal V_\varepsilon = 0, no 2K+Wε=02K + W_\varepsilon = 0; la diferencia es positiva y de orden (ε/r)2∣W∣(\varepsilon/r)^2\lvert W\rvert. virial() devuelve las tres cantidades. En nuestra esfera de Plummer (N=1000N = 1000): con ε=0\varepsilon = 0, K=0.262K = 0.262, W=−0.521W = -0.521, 2K/∣W∣=1.0062K/\lvert W\rvert = 1.006 (la desviación del 0.6 % frente a 1 es ruido de muestreo; los valores teóricos son K=14K = \tfrac14, W=−12W = -\tfrac12). Con ε=0.1\varepsilon = 0.1, Wε=−0.506W_\varepsilon = -0.506 y Vε=−0.484\mathcal V_\varepsilon = -0.484: la condición ingenua 2K/∣Wε∣2K/\lvert W_\varepsilon\rvert da 1.0351.035 y la correcta 2K/∣Vε∣2K/\lvert\mathcal V_\varepsilon\rvert da 1.081.08: el sistema, generado en equilibrio newtoniano, está un 8 % «demasiado caliente» para la gravedad suavizada y se expandirá ligeramente al integrarlo. Con ε=0.3\varepsilon = 0.3 (≈a/2\approx a/2) la discrepancia sube al 40 %: un suavizado así ya no simula el mismo sistema.

4.3 Uso como diagnóstico

En una simulación se monitoriza Q=2K/∣V∣Q = 2K/\lvert\mathcal V\rvert (además de EE, P\mathbf P y L\mathbf L):

  • QQ oscila alrededor de 1 con periodo ∼\sim tiempo dinámico: sistema en equilibrio.
  • Q>1Q \gt 1 sostenido: sistema caliente, se expande; Q<1Q \lt 1: colapsa. Un sistema en colapso frío (Q≈0Q \approx 0) «relaja violentamente» hacia Q≈1Q \approx 1 en pocos tiempos dinámicos (Lynden-Bell 1967).
  • Deriva secular de QQ con EE constante: relajación por dos cuerpos (evaporación, colapso del núcleo), un efecto físico en cúmulos pero espurio en simulaciones de sistemas no colisionales, donde señala ε\varepsilon demasiado pequeño o NN demasiado pequeño.

5. Resultados numéricos

Ilustración: Resultados numéricos

Todos de barneshut.ts sobre esferas de Plummer generadas con modeloPlummer (semilla 7), ε=0.01\varepsilon = 0.01; el error relativo de cada cuerpo es ∥aBH−adirecta∥/∥adirecta∥\lVert\mathbf a_{\text{BH}} - \mathbf a_{\text{directa}}\rVert/\lVert\mathbf a_{\text{directa}}\rVert.

5.1 Coste y error en función de NN (θ=0.5\theta = 0.5)

NNInteracciones por cuerpo (BH)Directa (N−1N-1)AhorroError medianoError máximo
2501442491.74.6×10−34.6\times10^{-3}2.7×10−22.7\times10^{-2}
5002314992.23.7×10−33.7\times10^{-3}3.0×10−23.0\times10^{-2}
10003589992.83.0×10−33.0\times10^{-3}2.2×10−22.2\times10^{-2}
200053019993.82.6×10−32.6\times10^{-3}6.0×10−26.0\times10^{-2}
400073839995.42.3×10−32.3\times10^{-3}0.150.15
800095879998.41.9×10−31.9\times10^{-3}0.160.16

Al multiplicar NN por 32 (250 → 8000) las interacciones por cuerpo se multiplican por 6.7, mientras que la suma directa se multiplica por 32. El crecimiento es más rápido que log⁡N\log N puro (que daría ×1.6\times 1.6) porque a estos NN el perfil de Plummer, muy concentrado, hace que una fracción grande de interacciones sea con hojas; el régimen asintótico O(log⁡N)O(\log N) solo se alcanza a NN mucho mayores, cuando la profundidad del árbol domina sobre las interacciones con hojas. El error máximo crece con NN: siempre hay algún cuerpo para el que una celda queda justo en el límite del criterio; es el caso que motivó la corrección de Salmon y Warren.

5.2 Error en función de θ\theta (N=2000N = 2000)

θ\thetaInteracciones por cuerpoError medianoError máximo
0.213262.3×10−42.3\times10^{-4}1.7×10−31.7\times10^{-3}
0.39696.8×10−46.8\times10^{-4}6.9×10−36.9\times10^{-3}
0.55302.6×10−32.6\times10^{-3}6.0×10−26.0\times10^{-2}
0.73196.7×10−36.7\times10^{-3}0.140.14
1.01791.8×10−21.8\times10^{-2}0.410.41
1.5936.0×10−26.0\times10^{-2}1.51.5

El error mediano escala aproximadamente como θ2.5\theta^{2.5} entre 0.20.2 y 11 (la predicción monopolar es θ2\theta^{2} por celda, pero el número de celdas aceptadas también crece con θ\theta y los errores se suman con signos aleatorios). Con θ=1.5\theta = 1.5 hay cuerpos cuya fuerza es completamente errónea (error 150 %): el criterio ha aceptado celdas que contienen al propio vecino más cercano.

5.3 Qué precisión hace falta

Un error relativo de fuerza del 10−310^{-3} por partícula y por paso, con signos aleatorios, se acumula tras nn pasos como n⋅10−3\sqrt n\cdot 10^{-3}: en 10410^{4} pasos, un 10 %. Pero el ruido de discretización (usar NN partículas para representar un continuo) produce ya errores de fuerza del orden de N−1/2N^{-1/2} (Dehnen 2001): para N=106N = 10^{6}, 10−310^{-3}. No tiene sentido calcular la fuerza mucho mejor que ese ruido intrínseco: de ahí que θ≈0.5\theta \approx 0.5–0.70.7 sea el estándar.

tres masas iguales, T ≈ 6.3259 · t = 0.00

Qué observar. El simulador usa suma directa (tres cuerpos no justifican un árbol). Con el escenario «Pitagórico», activa el suavizado con ε=0.1\varepsilon = 0.1 y compara la evolución con la de ε=0\varepsilon = 0: los encuentros cercanos que expulsan a la masa 3 se amortiguan y el estado final cambia. Es la demostración más directa de que ε\varepsilon es un parámetro físico del modelo, no un detalle numérico.

Problemas

1. (Cuadrupolo). Demuestra que para un grupo de masas con centro de masas en el origen el término cuadrupolar del potencial en d\mathbf d es −G2d3∑jmj(3(xj⋅d^)2−xj2)-\dfrac{G}{2d^3}\sum_j m_j\left(3(\mathbf x_j\cdot\hat{\mathbf d})^2 - x_j^2\right), y que para una celda cúbica de lado ss centrada en el centro de masas está acotado en valor absoluto por 34 GMs2/d3\tfrac34\,G M s^2/d^3. Concluye que el error relativo del potencial monopolar es ≤34(s/d)2\le \tfrac34(s/d)^2 y, con θ=0.5\theta = 0.5, inferior al 19 % en el peor caso.

Ver solución

De P2(cos⁡γ)=12(3cos⁡2γ−1)P_2(\cos\gamma) = \tfrac12(3\cos^2\gamma - 1) y xjcos⁡γj=xj⋅d^x_j\cos\gamma_j = \mathbf x_j\cdot\hat{\mathbf d} sale la expresión. Dentro de un cubo de lado ss centrado en el centro de masas, xj≤32sx_j \le \tfrac{\sqrt3}{2}s, luego ∣3(xj⋅d^)2−xj2∣≤2xj2≤32s2\lvert 3(\mathbf x_j\cdot\hat{\mathbf d})^2 - x_j^2\rvert \le 2 x_j^2 \le \tfrac32 s^2 y el término queda acotado por 34GMs2/d3\tfrac{3}{4}G M s^2/d^3. Relativo al monopolo GM/dGM/d: 34(s/d)2<34θ2\tfrac34(s/d)^2 \lt \tfrac34\theta^2. Con θ=0.5\theta = 0.5: 1919 % como cota del potencial en el peor caso; el error típico es mucho menor (la tabla da mediana 0.30.3 %) porque las masas rara vez están todas en las esquinas y los errores de distintas celdas se cancelan parcialmente. La fuerza (derivada) tiene cota del mismo orden con constante distinta.

2. (Dipolo nulo). Demuestra que si el desarrollo se hace alrededor de un punto C\mathbf C distinto del centro de masas (por ejemplo, el centro geométrico de la celda), aparece un término dipolar de error relativo O(s/d)O(s/d), y calcula cuánto peor es con θ=0.5\theta = 0.5.

Ver solución

Con xj′=rj−C\mathbf x_j' = \mathbf r_j - \mathbf C, ∑jmjxj′=M(R−C)≠0\sum_j m_j\mathbf x_j' = M(\mathbf R - \mathbf C) \ne 0, y el término ℓ=1\ell = 1 vale −GMd2(R−C)⋅d^-\dfrac{G M}{d^2}(\mathbf R - \mathbf C)\cdot\hat{\mathbf d}, de tamaño relativo ∥R−C∥/d≤32s/d\lVert\mathbf R - \mathbf C\rVert/d \le \tfrac{\sqrt3}{2}s/d. Frente al cuadrupolo ∼(s/d)2\sim(s/d)^2, con s/d=0.5s/d = 0.5 el dipolo es ≈0.43\approx 0.43 frente a 0.190.19: más del doble, y decae solo linealmente al alejarse. Por eso el centro de masas (y no el geométrico) es el centro del desarrollo. Es una aplicación del principio general: siempre se puede anular el dipolo eligiendo el origen; no así el cuadrupolo.

3. (Densidad de Plummer). Demuestra, con la ecuación de Poisson ∇2Φ=4πGρ\nabla^2\Phi = 4\pi G\rho, que el potencial Φε=−Gm/r2+ε2\Phi_\varepsilon = -Gm/\sqrt{r^2+\varepsilon^2} corresponde a ρ(r)=3m4πε3(1+r2/ε2)−5/2\rho(r) = \dfrac{3m}{4\pi\varepsilon^3}\left(1 + r^2/\varepsilon^2\right)^{-5/2}, y comprueba que ∫ρ dV=m\int\rho\,dV = m.

Ver solución

En simetría esférica ∇2Φ=r−2 ∂r(r2∂rΦ)\nabla^2\Phi = r^{-2}\,\partial_r(r^2\partial_r\Phi). Con u=r2+ε2u = r^2 + \varepsilon^2: ∂rΦ=Gm r u−3/2\partial_r\Phi = G m\,r\,u^{-3/2}, r2∂rΦ=Gm r3u−3/2r^2\partial_r\Phi = G m\,r^3 u^{-3/2}, y ∂r(r3u−3/2)=3r2u−3/2−3r4u−5/2=3r2u−5/2(u−r2)=3r2ε2u−5/2\partial_r(r^3 u^{-3/2}) = 3r^2u^{-3/2} - 3r^4u^{-5/2} = 3r^2u^{-5/2}(u - r^2) = 3r^2\varepsilon^2u^{-5/2}. Luego ∇2Φ=3Gmε2(r2+ε2)−5/2\nabla^2\Phi = 3Gm\varepsilon^2(r^2+\varepsilon^2)^{-5/2} y ρ=3mε24π(r2+ε2)−5/2\rho = \dfrac{3m\varepsilon^2}{4\pi}(r^2+\varepsilon^2)^{-5/2}, que es la expresión pedida. Masa: ∫0∞4πr2ρ dr=3mε2∫0∞r2(r2+ε2)−5/2dr=3m∫0∞t2(1+t2)−5/2dt=3m⋅13=m\int_0^\infty 4\pi r^2\rho\,dr = 3m\varepsilon^2\int_0^\infty r^2(r^2+\varepsilon^2)^{-5/2}dr = 3m\int_0^\infty t^2(1+t^2)^{-5/2}dt = 3m\cdot\tfrac13 = m (la integral vale 13\tfrac13: sustituir t=tan⁡ϕt = \tan\phi). ■\blacksquare El 50 % de la masa está dentro de r=1.305 εr = 1.305\,\varepsilon (ecuación r3/(r2+ε2)3/2=12r^3/(r^2+\varepsilon^2)^{3/2} = \tfrac12). En unidades de Hénon, con a=3π/16a = 3\pi/16, se obtiene W=−3π32GM2a=−12W = -\tfrac{3\pi}{32}\dfrac{GM^2}{a} = -\tfrac12 y, por el virial, K=14K = \tfrac14, E=−14E = -\tfrac14: los valores que usa el test.

4. (Fuerza máxima). Demuestra que ∣aε∣=Gm r(r2+ε2)−3/2\lvert\mathbf a_\varepsilon\rvert = Gm\,r(r^2+\varepsilon^2)^{-3/2} es máxima en r=ε/2r = \varepsilon/\sqrt2 con valor 2Gm33 ε2\dfrac{2Gm}{3\sqrt3\,\varepsilon^2}, y deduce una cota inferior del paso de tiempo de un leapfrog estable, h≲ε3/2/Gmh \lesssim \varepsilon^{3/2}/\sqrt{Gm}.

Ver solución

ddr[r(r2+ε2)−3/2]=(r2+ε2)−5/2(r2+ε2−3r2)=0⇒r2=ε2/2\dfrac{d}{dr}\left[r(r^2+\varepsilon^2)^{-3/2}\right] = (r^2+\varepsilon^2)^{-5/2}\left(r^2 + \varepsilon^2 - 3r^2\right) = 0 \Rightarrow r^2 = \varepsilon^2/2. Sustituyendo: amax⁡=Gm ε/2(3ε2/2)3/2=Gmε2⋅1/2(3/2)3/2=2Gm33 ε2a_{\max} = Gm\,\dfrac{\varepsilon/\sqrt2}{(3\varepsilon^2/2)^{3/2}} = \dfrac{Gm}{\varepsilon^2}\cdot\dfrac{1/\sqrt2}{(3/2)^{3/2}} = \dfrac{2Gm}{3\sqrt3\,\varepsilon^2}. La «frecuencia» local máxima de un encuentro es ω2∼amax⁡/r∼Gm/ε3\omega^2 \sim a_{\max}/r \sim Gm/\varepsilon^3, y la estabilidad del leapfrog para un oscilador exige hω<2h\omega \lt 2 (lección anterior, ejercicio 4): h≲2ε3/(Gm)h \lesssim 2\sqrt{\varepsilon^3/(Gm)}. Este es el verdadero motivo práctico del suavizado: acota el paso de tiempo desde abajo. Con ε=0.01\varepsilon = 0.01 y m=10−3m = 10^{-3} (nuestra esfera de N=1000N = 1000), h≲0.06h \lesssim 0.06.

5. (Virial con suavizado). Demuestra la identidad Vε=Wε+∑i<jGmimjε2(rij2+ε2)−3/2\mathcal V_\varepsilon = W_\varepsilon + \sum_{i<j}G m_i m_j\varepsilon^2(r_{ij}^2+\varepsilon^2)^{-3/2} y concluye que ∣Vε∣<∣Wε∣\lvert\mathcal V_\varepsilon\rvert \lt \lvert W_\varepsilon\rvert: un sistema en equilibrio newtoniano siempre parece «caliente» para la gravedad suavizada.

Ver solución

Para un par, rij⋅Fij=−Gmimj rij2/(rij2+ε2)3/2\mathbf r_{ij}\cdot\mathbf F_{ij} = -G m_i m_j\,r_{ij}^2/(r_{ij}^2+\varepsilon^2)^{3/2}. Escribiendo r2=(r2+ε2)−ε2r^2 = (r^2+\varepsilon^2) - \varepsilon^2: −Gmimjr2+ε2+Gmimjε2(r2+ε2)3/2-\dfrac{G m_i m_j}{\sqrt{r^2+\varepsilon^2}} + \dfrac{G m_i m_j\varepsilon^2}{(r^2+\varepsilon^2)^{3/2}}. Sumando sobre pares sale la identidad; el segundo término es positivo, luego Vε>Wε\mathcal V_\varepsilon \gt W_\varepsilon y, siendo ambos negativos, ∣Vε∣<∣Wε∣<∣W0∣\lvert\mathcal V_\varepsilon\rvert \lt \lvert W_\varepsilon\rvert \lt \lvert W_0\rvert. Un sistema con 2K=∣W0∣2K = \lvert W_0\rvert tiene 2K/∣Vε∣>12K/\lvert\mathcal V_\varepsilon\rvert \gt 1. En nuestro modelo: 1.081.08 con ε=0.1\varepsilon = 0.1, en acuerdo con la tabla. Para corregirlo se generan las velocidades con el potencial suavizado o se reescala KK por ∣Vε∣/∣W0∣\lvert\mathcal V_\varepsilon\rvert/\lvert W_0\rvert.

6. (Computacional: árbol en 2D). Implementa un árbol de cuadrantes para NN cuerpos en el plano, con criterio s/d<θs/d \lt \theta, y mide (a) el número de interacciones por cuerpo para N=102,103,104N = 10^2, 10^3, 10^4 con θ=0.5\theta = 0.5; (b) el error mediano frente a la suma directa para θ∈{0.3,0.5,0.7,1}\theta \in \{0.3, 0.5, 0.7, 1\}. Compara con las tablas de §5.

Ver solución

Estructura mínima en Python (recursiva; para N=104N = 10^4 tarda segundos):

import numpy as np
class Celda:
    def __init__(self, cx, cy, s):
        self.cx, self.cy, self.s = cx, cy, s
        self.m = 0.0; self.X = 0.0; self.Y = 0.0   # masa y centro de masas acumulados
        self.cuerpo = None; self.hijos = None
    def insertar(self, i, x, y, m):
        if self.m == 0 and self.hijos is None:          # hoja vacía
            self.cuerpo, self.m, self.X, self.Y = i, m, x, y; return
        if self.hijos is None:                          # hoja ocupada: subdividir
            self.hijos = [None]*4; j = self.cuerpo; self.cuerpo = None
            mj, xj, yj = self.m, self.X, self.Y; self.m = 0
            self._bajar(j, xj, yj, mj)
        self._bajar(i, x, y, m)
        self.X = (self.X*self.m + x*m)/(self.m+m); self.Y = (self.Y*self.m + y*m)/(self.m+m); self.m += m
    def _bajar(self, i, x, y, m):
        k = (x >= self.cx) + 2*(y >= self.cy); q = self.s/4
        if self.hijos[k] is None:
            self.hijos[k] = Celda(self.cx + (q if k & 1 else -q), self.cy + (q if k & 2 else -q), self.s/2)
        self.hijos[k].insertar(i, x, y, m)
def fuerza(c, i, x, y, theta, eps, cont):
    if c.m == 0 or c.cuerpo == i: return np.zeros(2)
    dx, dy = c.X - x, c.Y - y; d = np.hypot(dx, dy)
    if c.hijos is None or c.s < theta*d:
        cont[0] += 1; return c.m*np.array([dx, dy])/(d*d + eps*eps)**1.5
    return sum(fuerza(h, i, x, y, theta, eps, cont) for h in c.hijos if h is not None)

Se construye la raíz con el cuadrado que contiene a todos los cuerpos y se llama a fuerza para cada uno. Resultados esperados: el número de interacciones por cuerpo crece despacio (en 2D el factor es θ−2\theta^{-2} en lugar de θ−3\theta^{-3}), y los errores medianos con θ=0.5\theta = 0.5 son del orden de 10−310^{-3}, como en 3D. El error debe anularse con θ=0\theta = 0: es el primer test que hay que pasar.

7. (Computacional: relajación violenta). Genera una esfera de Plummer con N=1000N = 1000 y reduce todas las velocidades a la mitad (Q=0.25Q = 0.25). Integra con leapfrog (h=0.01h = 0.01, ε=0.05\varepsilon = 0.05, θ=0.5\theta = 0.5) durante t=20t = 20 y grafica Q(t)=2K/∣Vε∣Q(t) = 2K/\lvert\mathcal V_\varepsilon\rvert, E(t)E(t) y el radio que contiene la mitad de la masa. ¿En cuántos tiempos dinámicos se alcanza Q≈1Q \approx 1?

Ver solución

Con modeloPlummer, leapfrogBarnesHut y virial de barneshut.ts (o la versión Python del problema 6). El tiempo dinámico de la esfera es tdin=a3/(GM)≈0.45t_{\text{din}} = \sqrt{a^3/(GM)} \approx 0.45 en unidades de Hénon. El sistema colapsa: QQ sube por encima de 1 (rebote) y se amortigua hacia 1 en unos 55–10 tdin10\,t_{\text{din}}, es decir t≈2t \approx 2–55: la relajación violenta de Lynden-Bell. El radio de media masa cae a ≈0.6\approx 0.6 del inicial y el sistema queda más concentrado y con una envoltura extensa; EE debe conservarse al nivel del 1 % (el error viene de θ\theta y del paso); si no, reduce hh o θ\theta. Una fracción pequeña de partículas puede escapar (Ei>0E_i \gt 0).

✦ Autoevaluación

  1. 1. ¿Por qué el término dipolar desaparece en la aproximación de Barnes–Hut?
  2. 2. Con el criterio s/d menor que θ, reducir θ de 1 a 0.5 en 3D multiplica el número de celdas aceptadas aproximadamente por…
  3. 3. El suavizado de Plummer con parámetro ε…
  4. 4. Para un sistema autogravitante en equilibrio sin suavizado, el teorema del virial afirma que…
  5. 5. Una esfera generada en equilibrio newtoniano e integrada con suavizado ε tiene 2K/|𝒱ε|…
  6. 6. En una simulación no colisional, una deriva lenta de 2K/|𝒱| con energía bien conservada indica…
Responde todas para comprobar.

Lecturas

  • Barnes & Hut (1986), Nature 324, 446: el artículo original, de cuatro páginas, legible por completo.
  • Aarseth (2003), Gravitational N-Body Simulations, cap. 6: códigos de árbol en el contexto de los métodos directos; cap. 1 para el planteamiento.
  • Dehnen (2001), MNRAS 324, 273, y Dehnen & Read (2011), EPJ Plus 126, 55: la revisión moderna de suavizado, árboles, multipolos rápidos y pasos individuales.
  • Binney & Tremaine (2008), Galactic Dynamics, §2.9 (resolución numérica de la ecuación de Poisson: árboles, mallas) y §4.8 (ecuaciones de Jeans y virial); §2.2.2 para la esfera de Plummer.
  • Aarseth, Hénon & Wielen (1974), A&A 37, 183: el algoritmo de muestreo del modelo de Plummer que usa modeloPlummer.
  • Salmon, J. K. & Warren, M. S. (1994). Skeletons from the treecode closet. J. Comput. Phys. 111, 136–155: los fallos del criterio original y los criterios con cota de error garantizada.
🍎 Guía para el profesor
Tiempo
2 clases de 90 min más un taller de programación de 2 h
Resultado de aprendizaje
Al finalizar, el estudiante justifica el coste O(N²) de la suma directa y el O(N log N) del árbol, deriva el error de la aproximación monopolar, explica el papel del suavizado y usa el teorema del virial como diagnóstico de una simulación.
Evidencia de aprendizaje
Entrega del problema 6 (árbol 2D con verificación θ = 0 y tablas de coste y error) y del problema 7 (gráficas de Q(t), E(t) y radio de media masa con interpretación).

Materiales

  • Python 3 con NumPy y Matplotlib
  • Código de referencia: src/lib/math/barneshut.ts y su test
  • El artículo de Barnes & Hut (1986), para lectura previa
  • Simulador N cuerpos del portal (escenario Pitagórico con y sin suavizado)

Secuencia sugerida

Clase 1 (90 min). Inicio (15 min): cuánto cuesta un paso de suma directa para N=106N = 10^{6} y por qué no basta con «un ordenador más grande». Desarrollo (60 min): desarrollo multipolar y anulación del dipolo (§2.1), construcción del árbol en pizarra con 8–10 puntos en 2D, criterio de apertura, proposición del coste O(Nlog⁡N)O(N\log N). Cierre (15 min): problema 2 en parejas.

Clase 2 (90 min). Inicio (10 min): demostración del simulador con y sin suavizado. Desarrollo (55 min): potencial de Plummer y ecuación de Poisson (problema 3), sesgo de la fuerza, teorema del virial con y sin suavizado (§4), lectura de las tablas de §5. Cierre (25 min): problemas 4 y 5; mini-prueba.

Taller (2 h). Problema 6 completo (árbol 2D) con la verificación θ=0\theta = 0 como primer hito, y problema 7 con las gráficas de diagnóstico. Los estudiantes que terminen pueden añadir el término cuadrupolar y medir cuánto baja el error a igual θ\theta.

Errores frecuentes

  • Pensar que ε es un «truco numérico» sin consecuencias. Mostrar el cambio de estado final del problema pitagórico y el cociente virial 1.08 con ε = 0.1: ε define el sistema que se simula.
  • Hacer el desarrollo multipolar alrededor del centro geométrico de la celda. Pedir el problema 2 antes de programar.
  • Creer que un error de fuerza del 0.3 % es «demasiado» o «demasiado poco» sin compararlo con el ruido de discretización N^(−1/2). Discutir §5.3.
  • Diagnosticar el equilibrio con 2K/|W| en lugar de 2K/|𝒱ε| cuando hay suavizado. Es el problema 5.
  • Confundir relajación violenta (no colisional, rápida) con relajación por dos cuerpos (colisional, lenta). Pedir las escalas de tiempo de cada una.
Palabras clave de esta lección (9)

Términos del glosario que aparecen en el texto. Cada uno enlaza a su ficha completa.

  • Problema de N cuerpos Simular muchos cuerpos que se atraen todos con todos: un cúmulo de estrellas, una galaxia, el universo. Como cada cuerpo siente a todos los demás, el cálculo crece muy rápido con N; el truco de Barnes–Hut agrupa los lejanos.
  • Teorema del virial Una regla que relaciona la energía de movimiento de un conjunto de estrellas con la de su gravedad. Permite «pesar» un cúmulo de galaxias midiendo solo la velocidad de sus miembros.
  • Logaritmo La pregunta «¿a qué potencia hay que elevar 10 para obtener este número?». log(1000) = 3. Convierte multiplicaciones en sumas y comprime números enormes: por eso las magnitudes de las estrellas usan logaritmos.
  • Punto de Lagrange Cinco lugares especiales cerca de dos cuerpos (como el Sol y la Tierra) donde una nave puede quedarse «quieta» respecto a ellos. El telescopio James Webb está en uno de ellos, L2, a 1,5 millones de km.
  • Leapfrog (salto de rana) Un método de simulación que alterna «empujón» (cambiar la velocidad) y «deslizamiento» (mover la posición), como una rana que salta. Es sencillo, reversible en el tiempo y conserva muy bien la energía.
  • Gravedad La fuerza con que un planeta atrae todo hacia su centro. En la Tierra hace caer las cosas a 9,8 m/s cada segundo; en Marte, con menos masa y menos tamaño, es solo un 38 % de la terrestre.
  • Problema de dos cuerpos Calcular cómo se mueven dos cuerpos que solo se atraen entre sí, como el Sol y un planeta. Tiene solución exacta: las elipses de Kepler. Con tres cuerpos ya no hay fórmula cerrada.
  • Derivada La rapidez con que cambia algo en un instante: la derivada de la posición es la velocidad, y la de la velocidad, la aceleración. Es la pendiente de la gráfica en cada punto.
  • Materia oscura Una materia invisible que no emite ni refleja luz, pero cuya gravedad se nota: hace girar las galaxias más rápido de lo esperado. Hay unas cinco veces más materia oscura que materia normal, y aún no sabemos qué es.

Ver todo el glosario →

Referencias

  • Barnes, J. & Hut, P. (1986). A hierarchical O(N log N) force-calculation algorithm. Nature 324, 446–449. doi:10.1038/324446a0
  • Aarseth, S. J. (2003). Gravitational N-Body Simulations: Tools and Algorithms. Cambridge University Press. Cap. 1 (el problema de N cuerpos) y cap. 6 (códigos de árbol).
  • Dehnen, W. (2001). Towards optimal softening in three-dimensional N-body codes — I. Minimizing the force error. MNRAS 324, 273–291. doi:10.1046/j.1365-8711.2001.04237.x
  • Dehnen, W. & Read, J. I. (2011). N-body simulations of gravitational dynamics. European Physical Journal Plus 126, 55. arXiv:1105.1082
  • Binney, J. & Tremaine, S. (2008). Galactic Dynamics, 2.ª ed. Princeton University Press. §2.9 (resolución numérica de la ecuación de Poisson) y §4.8 (teorema del virial).
  • Aarseth, S. J., Hénon, M. & Wielen, R. (1974). A comparison of numerical methods for the study of star cluster dynamics. Astronomy & Astrophysics 37, 183–187.
  • Plummer, H. C. (1911). On the problem of distribution in globular star clusters. MNRAS 71, 460–470.
  • Hairer, E., Lubich, C. & Wanner, G. (2006). Geometric Numerical Integration, 2.ª ed. Springer. Cap. I.2 (leapfrog) y IX (análisis de error regresivo).

Simuladores de esta lección: N cuerpos: integradores y caos