stringtranslate.com

Simulación de N-cuerpos

Una simulación de N cuerpos de la formación cosmológica de un cúmulo de galaxias en un universo en expansión

En física y astronomía , una simulación de N cuerpos es una simulación de un sistema dinámico de partículas, generalmente bajo la influencia de fuerzas físicas, como la gravedad (ver el problema de n cuerpos para otras aplicaciones). Las simulaciones de N cuerpos son herramientas ampliamente utilizadas en astrofísica , desde la investigación de la dinámica de sistemas de pocos cuerpos como el sistema Tierra - Luna - Sol hasta la comprensión de la evolución de la estructura a gran escala del universo . [1] En cosmología física , las simulaciones de N cuerpos se utilizan para estudiar procesos de formación de estructuras no lineales, como filamentos de galaxias y halos de galaxias a partir de la influencia de la materia oscura . Las simulaciones directas de N cuerpos se utilizan para estudiar la evolución dinámica de cúmulos estelares .

Naturaleza de las partículas

Las "partículas" tratadas por la simulación pueden o no corresponder a objetos físicos que son de naturaleza particulada. Por ejemplo, una simulación de N cuerpos de un cúmulo de estrellas podría tener una partícula por estrella, por lo que cada partícula tiene algún significado físico. Por otro lado, una simulación de una nube de gas no puede permitirse el lujo de tener una partícula por cada átomo o molécula de gas, ya que esto requeriría del orden de10 23 partículas por cada mol de material (véase la constante de Avogadro ), por lo que una única "partícula" representaría una cantidad mucho mayor de gas (que a menudo se implementa mediante hidrodinámica de partículas suavizadas ). Esta cantidad no tiene por qué tener ningún significado físico, pero debe elegirse como un compromiso entre la precisión y los requisitos informáticos manejables.

Simulación de materia oscura

La materia oscura desempeña un papel importante en la formación de las galaxias. La evolución temporal de la densidad f (en el espacio de fases) de las partículas de materia oscura se puede describir mediante la ecuación de Boltzmann sin colisiones.

En la ecuación, es la velocidad y Φ es el potencial gravitatorio dado por la ecuación de Poisson . Estas dos ecuaciones acopladas se resuelven en un Universo de fondo en expansión, que está regido por las ecuaciones de Friedmann , después de determinar las condiciones iniciales de las partículas de materia oscura. El método convencional empleado para inicializar las posiciones y velocidades de las partículas de materia oscura implica mover partículas dentro de una red cartesiana uniforme o una configuración de partículas similar al vidrio. [2] Esto se hace utilizando una aproximación de teoría lineal o una teoría de perturbación de bajo orden . [3]

Gravitacional directanorte- simulaciones corporales

Simulación de N-cuerpos de 400 objetos con parámetros cercanos a los de los planetas del Sistema Solar

En las simulaciones gravitacionales directas de N cuerpos, las ecuaciones de movimiento de un sistema de N partículas bajo la influencia de sus fuerzas gravitacionales mutuas se integran numéricamente sin ninguna aproximación simplificadora. Estos cálculos se utilizan en situaciones en las que las interacciones entre objetos individuales, como estrellas o planetas, son importantes para la evolución del sistema.

Las primeras simulaciones gravitacionales directas de N cuerpos fueron realizadas por Erik Holmberg en el Observatorio de Lund en 1941, determinando las fuerzas entre estrellas al encontrarse con galaxias a través de la equivalencia matemática entre la propagación de la luz y la interacción gravitacional: colocando bombillas en las posiciones de las estrellas y midiendo los flujos de luz direccionales en las posiciones de las estrellas mediante una fotocélula, las ecuaciones de movimiento se pueden integrar con ⁠ ⁠ esfuerzo. [4] Las primeras simulaciones puramente calculadas fueron realizadas por Sebastian von Hoerner en el Astronomisches Rechen-Institut en Heidelberg , Alemania. Sverre Aarseth en la Universidad de Cambridge (Reino Unido) ha dedicado toda su vida científica al desarrollo de una serie de códigos de N cuerpos altamente eficientes para aplicaciones astrofísicas que utilizan pasos de tiempo adaptativos (jerárquicos), un esquema de vecinos de Ahmad-Cohen y regularización de encuentros cercanos. La regularización es un truco matemático para eliminar la singularidad en la ley de gravitación de Newton para dos partículas que se aproximan arbitrariamente. Los códigos de Sverre Aarseth se utilizan para estudiar la dinámica de cúmulos estelares, sistemas planetarios y núcleos galácticos. [ cita requerida ]

Simulaciones de relatividad general

Muchas simulaciones son lo suficientemente grandes como para que los efectos de la relatividad general en el establecimiento de una cosmología de Friedmann-Lemaitre-Robertson-Walker sean significativos. Esto se incorpora en la simulación como una medida evolutiva de la distancia (o factor de escala ) en un sistema de coordenadas comóviles , lo que hace que las partículas se desaceleren en coordenadas comóviles (así como debido al desplazamiento al rojo de su energía física). Sin embargo, las contribuciones de la relatividad general y la velocidad finita de la gravedad pueden ignorarse de otra manera, ya que las escalas de tiempo dinámicas típicas son largas en comparación con el tiempo de cruce de la luz para la simulación, y la curvatura del espacio-tiempo inducida por las partículas y las velocidades de las partículas son pequeñas. Las condiciones de contorno de estas simulaciones cosmológicas suelen ser periódicas (o toroidales), de modo que un borde del volumen de simulación coincide con el borde opuesto.

Optimizaciones de cálculo

Las simulaciones de N cuerpos son simples en principio, porque implican simplemente la integración de las 6 N ecuaciones diferenciales ordinarias que definen los movimientos de partículas en la gravedad newtoniana . En la práctica, el número N de partículas involucradas es generalmente muy grande (las simulaciones típicas incluyen muchos millones, la simulación Millennium incluyó diez mil millones) y el número de interacciones partícula-partícula que se necesitan calcular aumenta en el orden de N 2 , por lo que la integración directa de las ecuaciones diferenciales puede ser prohibitivamente costosa en términos computacionales. Por lo tanto, se utilizan comúnmente una serie de refinamientos.

La integración numérica se realiza generalmente en pasos de tiempo pequeños utilizando un método como la integración de salto de rana . Sin embargo, toda integración numérica conduce a errores. Los pasos más pequeños dan menos errores pero se ejecutan más lentamente. La integración de salto de rana es aproximadamente de segundo orden en el paso de tiempo, otros integradores como los métodos de Runge-Kutta pueden tener una precisión de cuarto orden o mucho mayor.

Uno de los refinamientos más simples es que cada partícula lleva consigo su propia variable de paso de tiempo, de modo que las partículas con tiempos dinámicos muy diferentes no tienen que evolucionar todas hacia adelante al ritmo de aquella con el tiempo más corto.

Existen dos esquemas básicos de aproximación para reducir el tiempo computacional de dichas simulaciones. Estos pueden reducir la complejidad computacional a O(N log N) o mejor, con pérdida de precisión.

Métodos de árbol

En los métodos de árbol , como una simulación de Barnes-Hut , un octree se utiliza generalmente para dividir el volumen en celdas cúbicas y solo las interacciones entre partículas de celdas cercanas necesitan ser tratadas individualmente; las partículas en celdas distantes pueden ser tratadas colectivamente como una sola partícula grande centrada en el centro de masa de la celda distante (o como una expansión multipolar de orden bajo ). Esto puede reducir drásticamente la cantidad de interacciones de pares de partículas que deben calcularse. Para evitar que la simulación se vea inundada por el cálculo de interacciones partícula-partícula, las celdas deben refinarse a celdas más pequeñas en partes más densas de la simulación que contienen muchas partículas por celda. Para simulaciones donde las partículas no están distribuidas uniformemente, los métodos de descomposición de pares bien separados de Callahan y Kosaraju producen un tiempo O( n  log  n ) óptimo por iteración con dimensión fija.

Método de malla de partículas

Otra posibilidad es el método de malla de partículas en el que el espacio se discretiza en una malla y, a los efectos de calcular el potencial gravitacional , se supone que las partículas se dividen entre los vértices 2x2 circundantes de la malla. La energía potencial Φ se puede encontrar con la ecuación de Poisson

donde G es la constante de Newton y es la densidad (número de partículas en los puntos de la malla). La transformada rápida de Fourier puede resolver esto de manera eficiente yendo al dominio de la frecuencia donde la ecuación de Poisson tiene la forma simple

donde es el número de onda comóvil y los sombreros denotan transformadas de Fourier. Dado que , ahora se puede encontrar el campo gravitacional multiplicando por y calculando la transformada de Fourier inversa (o calculando la transformada inversa y luego usando algún otro método). Dado que este método está limitado por el tamaño de la malla, en la práctica se utiliza una malla más pequeña o alguna otra técnica (como la combinación con un árbol o un algoritmo partícula-partícula simple) para calcular las fuerzas a pequeña escala. A veces se utiliza una malla adaptativa, en la que las celdas de la malla son mucho más pequeñas en las regiones más densas de la simulación.

Optimizaciones de casos especiales

Se utilizan varios algoritmos de perturbación gravitacional diferentes para obtener estimaciones bastante precisas de la trayectoria de los objetos en el Sistema Solar .

La gente suele decidir poner un satélite en una órbita congelada . La trayectoria de un satélite que orbita cerca de la Tierra se puede modelar con precisión a partir de la órbita elíptica de dos cuerpos alrededor del centro de la Tierra y añadiendo pequeñas correcciones debido a la achatación de la Tierra , la atracción gravitatoria del Sol y la Luna, el arrastre atmosférico, etc. Es posible encontrar una órbita congelada sin calcular la trayectoria real del satélite.

La trayectoria de un planeta pequeño, un cometa o una nave espacial de largo alcance a menudo se puede modelar con precisión comenzando desde la órbita elíptica de dos cuerpos alrededor del Sol y agregando pequeñas correcciones de la atracción gravitatoria de los planetas más grandes en sus órbitas conocidas.

Algunas características de las trayectorias a largo plazo de un sistema de partículas se pueden calcular directamente. La trayectoria real de cualquier partícula en particular no necesita calcularse como un paso intermedio. Dichas características incluyen la estabilidad de Lyapunov , el tiempo de Lyapunov , varias mediciones de la teoría ergódica , etc.

Sistemas de dos partículas

Aunque en las simulaciones típicas hay millones o miles de millones de partículas, normalmente corresponden a una partícula real con una masa muy grande, normalmente 10 9 masas solares . Esto puede introducir problemas con las interacciones de corto alcance entre las partículas, como la formación de sistemas binarios de dos partículas . Como las partículas están destinadas a representar grandes cantidades de partículas de materia oscura o grupos de estrellas, estos sistemas binarios no son físicos. Para evitarlo, se utiliza una ley de fuerza newtoniana suavizada , que no diverge como el radio del cuadrado inverso a distancias cortas. La mayoría de las simulaciones implementan esto de forma bastante natural al ejecutar las simulaciones en celdas de tamaño finito. Es importante implementar el procedimiento de discretización de tal forma que las partículas siempre ejerzan una fuerza de desaparición sobre sí mismas.

Reblandecimiento

El suavizado es un truco numérico utilizado en técnicas de N cuerpos para evitar divergencias numéricas cuando una partícula se acerca demasiado a otra (y la fuerza tiende al infinito). Esto se obtiene modificando el potencial gravitatorio regularizado de cada partícula como

(en lugar de 1/r) donde es el parámetro de suavizado. El valor del parámetro de suavizado debe ser lo suficientemente pequeño para mantener las simulaciones realistas.

Resultados denorte- simulaciones corporales

Las simulaciones de N -cuerpos arrojan resultados sobre la distribución de materia oscura a gran escala y la estructura de los halos de materia oscura. Según las simulaciones de materia oscura fría, la distribución general de materia oscura a gran escala no es completamente uniforme. En cambio, muestra una estructura que se asemeja a una red, que consta de huecos, paredes, filamentos y halos. Además, las simulaciones muestran que la relación entre la concentración de halos y factores como la masa, el espectro de fluctuación inicial y los parámetros cosmológicos está vinculada al tiempo de formación real de los halos. [5] En particular, los halos con menor masa tienden a formarse antes y, como resultado, tienen mayores concentraciones debido a la mayor densidad del Universo en el momento de su formación. Se ha descubierto que las formas de los halos se desvían de ser perfectamente esféricas. Por lo general, los halos se alargan y se vuelven cada vez más prolatos hacia sus centros. Sin embargo, las interacciones entre la materia oscura y los bariones afectarían la estructura interna de los halos de materia oscura. Se necesitan simulaciones que modelen tanto la materia oscura como los bariones para estudiar las estructuras a pequeña escala.

Incorporación de bariones, leptones y fotones en simulaciones

Muchas simulaciones simulan únicamente materia oscura fría y, por lo tanto, incluyen únicamente la fuerza gravitacional. La incorporación de bariones , leptones y fotones en las simulaciones aumenta drásticamente su complejidad y, a menudo, se deben realizar simplificaciones radicales de la física subyacente. Sin embargo, esta es un área extremadamente importante y muchas simulaciones modernas ahora intentan comprender los procesos que ocurren durante la formación de galaxias que podrían explicar el sesgo galáctico.

Complejidad computacional

Reif y Tate [6] prueban que si el problema de alcanzabilidad de n cuerpos se define de la siguiente manera: dados n cuerpos que satisfacen una ley de potencial electrostático fija, determinar si un cuerpo alcanza una bola de destino en un límite de tiempo dado donde requerimos un poli( n ) bits de precisión y el tiempo objetivo es poli( n ) está en PSPACE .

Por otra parte, si la pregunta es si el cuerpo llega finalmente a la bola de destino, el problema es complejo para PSPACE. Estos límites se basan en límites de complejidad similares obtenidos para el trazado de rayos .

Simulaciones de ejemplo

Código repetitivo común

La implementación más simple de simulaciones de N-cuerpos donde es una propagación ingenua de cuerpos en órbita; ingenua implica que las únicas fuerzas que actúan sobre los cuerpos en órbita son la fuerza gravitacional que ejercen entre sí. En lenguajes de programación orientados a objetos , como C++ , un código repetitivo es útil para establecer las estructuras matemáticas fundamentales, así como los contenedores de datos necesarios para la propagación; es decir, vectores de estado y, por lo tanto , vectores , y algún objeto fundamental que contenga estos datos, así como la masa de un cuerpo en órbita. Este método también es aplicable a otros tipos de simulaciones de N-cuerpos; una simulación de masas puntuales con cargas utilizaría un método similar, sin embargo, la fuerza se debería a la atracción o repulsión por interacción de campos eléctricos. Independientemente, la aceleración de la partícula es el resultado de los vectores de fuerza sumados, divididos por la masa de la partícula:

Un ejemplo de un método programáticamente estable y escalable para contener datos cinemáticos de una partícula es el uso de matrices de longitud fija, que en código optimizado permite una fácil asignación de memoria y predicción de recursos consumidos, como se ve en el siguiente código C++:

estructura Vector3 { doble e [ 3 ] = { 0 };      Vector3 () {}  ~ Vector3 () {}  Vector3 en línea ( doble e0 , doble e1 , doble e2 )       { esto -> e [ 0 ] = e0 ;   esto -> e [ 1 ] = e1 ;   esto -> e [ 2 ] = e2 ;   }};estructura EntidadOrbital { doble e [ 7 ] = { 0 };      Entidad orbital () {}  ~ Entidad orbital () {}  OrbitalEntity en línea ( doble e0 , doble e1 , doble e2 , doble e3 , doble e4 , doble e5 , doble e6 )               { esto -> e [ 0 ] = e0 ;   esto -> e [ 1 ] = e1 ;   esto -> e [ 2 ] = e2 ;   esto -> e [ 3 ] = e3 ;   esto -> e [ 4 ] = e4 ;   esto -> e [ 5 ] = e5 ;   esto -> e [ 6 ] = e6 ;   }};

Tenga en cuenta que OrbitalEntitycontiene suficiente espacio para un vector de estado, donde:

Además, OrbitalEntitycontiene suficiente espacio para un valor de masa.

Inicialización de parámetros de simulación

Comúnmente, las simulaciones de N cuerpos serán sistemas basados ​​en algún tipo de ecuaciones de movimiento ; de estas, la mayoría dependerán de alguna configuración inicial para "sembrar" la simulación. En sistemas como los que dependen de algún potencial gravitacional o eléctrico, la fuerza sobre una entidad de simulación es independiente de su velocidad. Por lo tanto, para sembrar las fuerzas de la simulación, solo se necesitan posiciones iniciales, pero esto no permitirá la propagación: se requieren velocidades iniciales. Considere un planeta que orbita una estrella: no tiene movimiento, pero está sujeto a la atracción gravitatoria hacia su estrella anfitriona. A medida que avanza el tiempo y se agregan pasos de tiempo , adquirirá velocidad de acuerdo con su aceleración. Para un instante dado en el tiempo, , la aceleración resultante de un cuerpo debido a sus masas vecinas es independiente de su velocidad, sin embargo, para el paso de tiempo , el cambio resultante en la posición es significativamente diferente debido a la dependencia inherente de la propagación en la velocidad. En los mecanismos básicos de propagación, como el método de Euler simpléctico que se utilizará a continuación, la posición de un objeto en solo depende de su velocidad en , ya que el cambio de posición se calcula mediante

Sin aceleración, es estático, sin embargo, desde la perspectiva de un observador que ve solo la posición, se necesitarán dos pasos de tiempo para ver un cambio en la velocidad.

Se puede lograr una simulación similar a la del sistema solar tomando las distancias promedio de masas puntuales equivalentes a planetas desde una estrella central. Para simplificar el código, se utilizará un enfoque no riguroso basado en semiejes mayores y velocidades medias. Se debe reservar espacio de memoria para estos cuerpos antes de configurarlos; para permitir la escalabilidad, se puede utilizar un comando malloc :

OrbitalEntity * entidades_orbitales = malloc ( tamaño de ( OrbitalEntity ) * ( 9 + N_ASTEROIDES ));       orbital_entities [ 0 ] = { 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.989e30 }; // una estrella similar al sol       orbital_entities [ 1 ] = { 57.909e9 , 0.0 , 0.0 , 0.0 , 47.36e3 , 0.0 , 0.33011e24 }; // un planeta similar a mercurio       orbital_entities [ 2 ] = { 108.209e9 , 0.0 , 0.0 , 0.0 , 35.02e3 , 0.0 , 4.8675e24 }; // un planeta similar a Venus       orbital_entities [ 3 ] = { 149.596e9 , 0.0 , 0.0 , 0.0 , 29.78e3 , 0.0 , 5.9724e24 }; // un planeta similar a la Tierra       orbital_entities [ 4 ] = { 227.923e9 , 0.0 , 0.0 , 0.0 , 24.07e3 , 0.0 , 0.64171e24 }; // un planeta similar a Marte       orbital_entities [ 5 ] = { 778.570e9 , 0.0 , 0.0 , 0.0 , 13e3 , 0.0 , 1898.19e24 }; // un planeta similar a Júpiter       orbital_entities [ 6 ] = { 1433.529e9 , 0.0 , 0.0 , 0.0 , 9.68e3 , 0.0 , 568.34e24 }; // un planeta similar a Saturno       orbital_entities [ 7 ] = { 2872.463e9 , 0.0 , 0.0 , 0.0 , 6.80e3 , 0.0 , 86.813e24 }; // un planeta similar a Urano       orbital_entities [ 8 ] = { 4495.060e9 , 0.0 , 0.0 , 0.0 , 5.43e3 , 0.0 , 102.413e24 }; // un planeta similar a Neptuno       

donde N_ASTEROIDSes una variable que permanecerá en 0 temporalmente, pero permite la inclusión futura de una cantidad significativa de asteroides, a discreción del usuario. Un paso crítico para la configuración de simulaciones es establecer los rangos de tiempo de la simulación, hasta , así como el paso de tiempo incremental que hará avanzar la simulación:

doble t_0 = 0 ;   doble t = t_0 ;   doble dt = 86400 ;   double t_end = 86400 * 365 * 10 ; // aproximadamente una década en segundos        double BIG_G = 6.67e-11 ; // constante gravitacional    

Las posiciones y velocidades establecidas anteriormente se interpretan como correctas para .

El alcance de una simulación sería, lógicamente, el período en el que .

Propagación

Una simulación completa puede constar de cientos, miles, millones, miles de millones o, a veces, billones de pasos de tiempo. En el nivel elemental, cada paso de tiempo (para simulaciones con partículas que se mueven debido a fuerzas ejercidas sobre ellas) implica

Lo anterior se puede implementar de forma bastante sencilla con un bucle while que continúa mientras exista en el rango mencionado anteriormente:

mientras ( t < t_fin ) { para ( tamaño_t m1_idx = 0 ; m1_idx < 9 + N_ASTEROIDES ; m1_idx ++ ) { Vector3 a_g = { 0 , 0 , 0 };                       para ( tamaño_t m2_idx = 0 ; m2_idx < 9 + N_ASTEROIDES ; m2_idx ++ ) { si ( m2_idx != m1_idx ) { Vector3 r_vector ;                   r_vector . e [ 0 ] = entidades_orbitales [ m1_idx ] . e [ 0 ] - entidades_orbitales [ m2_idx ]. e [ 0 ]; r_vector . e [ 1 ] = entidades_orbitales [ m1_idx ]. e [ 1 ] - entidades_orbitales [ m2_idx ] . e [ 1 ]; r_vector . e [ 2 ] = entidades_orbitales [ m1_idx ]. e [ 2 ] - entidades_orbitales [ m2_idx ]. e [ 2 ] ;               doble r_mag = sqrt ( r_vector . e [ 0 ] * r_vector . e [ 0 ] + r_vector . e [ 1 ] * r_vector . e [ 1 ] + r_vector . e [ 2 ] * r_vector . e [ 2 ]);               doble aceleración = -1.0 * BIG_G * ( entidades_orbitales [ m2_idx ]. e [ 6 ]) / pow ( r_mag , 2.0 );           Vector3 r_unit_vector = { r_vector . e [ 0 ] / r_mag , r_vector . e [ 1 ] / r_mag , r_vector . e [ 2 ] / r_mag };              a_g . e [ 0 ] += aceleración * r_unit_vector . e [ 0 ]; a_g . e [ 1 ] += aceleración * r_unit_vector . e [ 1 ]; a_g . e [ 2 ] += aceleración * r_unit_vector . e [ 2 ]; } }                 entidades_orbitales [ m1_idx ]. e [ 3 ] += a_g . e [ 0 ] * dt ; entidades_orbitales [ m1_idx ]. e [ 4 ] += a_g . e [ 1 ] * dt ; entidades_orbitales [ m1_idx ]. e [ 5 ] += a_g . e [ 2 ] * dt ; }                para ( tamaño_t id_entidad = 0 ; id_entidad < 9 + N_ASTEROIDES ; id_entidad ++ ) { entidades_orbitales [ id_entidad ]. e [ 0 ] += entidades_orbitales [ id_entidad ]. e [ 3 ] * dt ; entidades_orbitales [ id_entidad ] . e [ 1 ] += entidades_orbitales [ id_entidad ]. e [ 4 ] * dt ; entidades_orbitales [ id_entidad ]. e [ 2 ] += entidades_orbitales [ id_entidad ]. e [ 5 ] * dt ; } t += dt ; }                               

Centrándose en los cuatro planetas rocosos interiores de la simulación, las trayectorias resultantes de la propagación anterior se muestran a continuación:

Véase también

Referencias

  1. ^ Trenti, Michele; Choza, Piet (2008). "Simulaciones de N cuerpos (gravitacionales)". Scholarpedia . 3 (5): 3930. Código bibliográfico : 2008SchpJ...3.3930T. doi : 10.4249/scholarpedia.3930 .
  2. ^ CMBaugh; E.Gaztañaga; G. Efstathiou (1995). "Una comparación de la evolución de los campos de densidad en la teoría de perturbaciones y simulaciones numéricas - II. Análisis de conteos en celdas". Monthly Notices of the Royal Astronomical Society . arXiv : astro-ph/9408057 . doi : 10.1093/mnras/274.4.1049 . eISSN  1365-2966.
  3. ^ Jenkins, Adrian (21 de abril de 2010). "Condiciones iniciales de la teoría de perturbación lagrangiana de segundo orden para resimulaciones". Monthly Notices of the Royal Astronomical Society . 403 (4): 1859–1872. arXiv : 0910.0258 . Bibcode :2010MNRAS.403.1859J. doi : 10.1111/j.1365-2966.2010.16259.x . eISSN  1365-2966. ISSN  0035-8711.
  4. ^ Holmberg, Erik (1941). "Sobre las tendencias de agrupamiento entre las nebulosas. II. Un estudio de encuentros entre modelos de laboratorio de sistemas estelares mediante un nuevo procedimiento de integración". The Astrophysical Journal . 94 (3): 385–395. Bibcode :1941ApJ....94..385H. doi : 10.1086/144344 .
  5. ^ Navarro, Julio F.; Frenk, Carlos S.; White, Simon DM (diciembre de 1997). "Un perfil de densidad universal a partir de agrupamiento jerárquico". The Astrophysical Journal . 490 (2): 493–508. arXiv : astro-ph/9611107 . Bibcode :1997ApJ...490..493N. doi :10.1086/304888. eISSN  1538-4357. ISSN  0004-637X.
  6. ^ John H. Reif; Stephen R. Tate (1993). "La complejidad de la simulación de N-cuerpos". Autómatas, lenguajes y programación . Apuntes de clase en informática. págs. 162–176. CiteSeerX 10.1.1.38.6242 . 

Lectura adicional