Quiero simular una Galaxia de partículas que tengo que generar primero. Lo que he hecho hasta ahora no conduce al resultado que quiero ver. Probablemente cometí un error y no lo veo. Aquí viene lo que hice:
1) Generar partículas uniformemente distribuidas dentro de un círculo unitario con masa :
Por cada punto que hago:
R = 1;
radius = R*sqrt(rand(0,1));
phi = rand(0,2*pi);
m = 1/N;
x = radius*cos(phi);
y = radius*sin(phi);
Haciendo eso obtengo la siguiente distribución:
2) Generar velocidades tales que el círculo no explote o implosione:
Quiero generar algo donde
Desde y Puedo igualar ambas ecuaciones y obtener la velocidad
es la masa dentro del radio . puedo escribir y (densidad ). De esas ecuaciones obtengo . Ahora puedo volver a ponerlo en y obten:
Desde Yo obtengo:
Entonces, para cada punto que hago:
velocity = sqrt(radius);
v_x = -velocity*sin(phi);
v_y = velocity*cos(phi);
Entonces obtengo el siguiente resultado:
Ok, parece que el círculo explota de alguna manera. Las partículas del centro se mueven hacia el exterior. ¿Es mi cálculo para mal, o simplemente no funciona para mi propósito? ¿Necesito otra distribución de velocidad? Al final, para grandes , No puedo ver que se formen brazos espirales ni ninguna otra estructura. Lo intenté y . ¿Necesito más partículas? Hice algo mal?
Su lógica es correcta, incluida la elección de la velocidad tangencial como
x = r*cos(phi);
y = r*sin(phi);
vx=-v*sin(phi);
vy= v*cos(phi);
Donde (intentaste) poner v
en equilibrio centrífugo. Sin embargo, la atracción gravitacional de un disco es diferente de la de una esfera, en particular, su suposición de que la aceleración es igual a GM(r)/r^2 es incorrecta. La mejor manera de encontrar la forma correcta es obtener las fuerzas de su modelo de N-cuerpo y tomar el promedio azimutal de la aceleración radial en intervalos radiales. Su modelo inicial debe satisfacer el teorema del virial , es decir, la energía cinética debe ser -0,5 veces la energía gravitacional.
Pero, ¿cómo calculaste las fuerzas y cómo integraste las ecuaciones de movimiento? Debe evitar las fuerzas exactas de N-cuerpos, ya que divergen en los encuentros cercanos y, en su lugar, utilizan fuerzas suavizadas . Básicamente, agrega para cada interacción partícula-partícula un desplazamiento vertical constante h
, la longitud de ablandamiento . Ajústelo a aproximadamente 0,1 veces el radio.
La integración de tiempo se realiza mejor utilizando el integrador de salto. Por ejemplo
for(I:particles)
I.vel += 0.5*tau*I.acc
I.pos += tau*I.vel
time += tau
compute_accelerations(particles);
for(I:particles)
I.vel += 0.5*tau*I.acc
para integrar un paso de tiempo de longitud tau
. Por supuesto, debe calcular las aceleraciones iniciales antes del primer paso. El tamaño del paso tau
debe ser lo suficientemente pequeño para que la energía total se conserve en una parte en 1000 o más.
AccidentalFourierTransformar
phi
para las velocidades debe elegirse al azar (uniforme enGilfoyle
phi
que ya tomo para la posición de la partícula. ¿Es eso incorrecto? ¿ Tengo que generarphi
una segunda vez para la velocidad?AccidentalFourierTransformar
phi
una segunda vez para la velocidad (¡trata de pensar por qué!).Gilfoyle
phi
. Esto significaría que la velocidad no es tangencial. ¿Y eso no significaría que obtendría un círculo de puntos que se mueven aleatoriamente en lugar de una rotación de cuerpo rígido?AccidentalFourierTransformar
phi
tanto para la posición como para las velocidades, está haciendo que todas las velocidades sean radiales (es decir, sin componente tangencial). Esta es la razón de la "explosión exterior" inicial.Gilfoyle
AccidentalFourierTransformar