¿Es el sistema de tres cuerpos "único"?

Dado un estado de un sistema ideal de 3 cuerpos (es decir, sin interferencia externa) en el tiempo t : la velocidad v i , t , masa metro i , t y posición X i , t por i { 1 , 2 , 3 } , usando el método numérico es posible determinar cualquier estado en el tiempo t ^ , donde t ^ > t . Pero, ¿es posible determinar un estado único en el tiempo? t ¯ donde t ¯ < t ?

En otras palabras, ¿es suficiente conocer un solo estado del sistema durante un tiempo dado para deducir los estados del sistema para todos los tiempos?

De manera equivalente, ¿darán como resultado dos estados diferentes del sistema de 3 cuerpos en el mismo estado (tal vez en un momento diferente) en el futuro?

Nunca se puede tener un conocimiento perfecto del estado de un sistema, por lo que siempre habría incertidumbre en el estado inicial. Además, el problema de los 3 cuerpos no tiene una solución analítica general, por lo que tendríamos que aproximarnos con métodos numéricos, lo que esencialmente garantiza errores adicionales.
Hay, también, dos clases de 3 problemas corporales. Estable a largo plazo y caótico. El Sol-Tierra-Luna o Sol-Tierra-Marte son ejemplos de problemas de 3 cuerpos estables a largo plazo donde las órbitas, pero no necesariamente las posiciones exactas, son predecibles a largo plazo. El caótico problema de los 3 cuerpos no suele ser estable a largo plazo. Ambos pueden aproximarse bastante en el futuro con computadoras y alguna tediosa programación matemática, pero como señala Stephen G, los errores se multiplican a medida que avanzas.
Pregúntale a Cixin Liu :-)

Respuestas (1)

Lo que realmente estás preguntando tiene menos que ver con la astronomía y más con las matemáticas. Básicamente, está preguntando si, dado un sistema de ecuaciones diferenciales, ¿existirá una solución única para todos los tiempos? Para obtener una respuesta, debe consultar los teoremas de existencia y unicidad de las ecuaciones diferenciales . Sería mejor hacer preguntas como esta en el intercambio de pila de Matemáticas.

Sin embargo, para discutir el caso astronómico particular sobre el que ha preguntado, la respuesta es sí, puede ejecutar ese sistema tanto hacia adelante como hacia atrás si conoce algún estado inicial. La mecánica newtoniana es completamente determinista en el sentido de que si conoce todas las ecuaciones de movimiento involucradas, así como el estado completo del sistema en un momento dado, puede averiguar el estado de ese sistema en cualquier otro momento, tanto en el pasado como en el pasado. el futuro.

Sin embargo, para hablar de su problema particular de órbita de 3 cuerpos, diré que el sistema de ecuaciones no se puede resolver en forma cerrada, es decir, no puede escribir una solución analítica para las ecuaciones como podría hacerlo para el 2- caso del cuerpo Como dice userLTK , puede escribir soluciones aproximadas en el problema restringido de 3 cuerpos , donde una masa es significativamente menor que las otras dos y orbita bajo condiciones específicas.

Para obtener una solución en cualquier momento t ^ , es necesario utilizar métodos numéricos. Por supuesto, los métodos numéricos son inherentemente defectuosos. Los errores numéricos se acumulan cuanto más tiempo simula debido a pasos de tiempo que no son infinitesimales, a errores dentro de los algoritmos numéricos utilizados y errores generales de punto flotante. En teoría, si tuviera una computadora con una precisión infinita y un poder de cómputo infinito, podría resolver perfectamente un sistema de 3 cuerpos (o n cuerpos), pero vivimos en el mundo real donde tales cosas son imposibles.

Sin embargo, para demostrar que puede averiguar el estado en cualquier momento en el pasado o presente para un cuerpo de tres cuerpos, he escrito una simulación básica en Python 3. Puede ejecutarse tanto hacia adelante como hacia atrás desde una condición de inicio dada y comenzar hora. Esencialmente, pone tres masas casi idénticas en posiciones y velocidades iniciales artificiales. Debajo del código hay diagramas de resultados.

import numpy as np
from numpy.linalg import norm
from matplotlib.pyplot import *
from time import time

# Define physical constants
G = 6.67408E-11          # Gravitational Constant, m^3 kg^-1 s^-2

# Define body 1 parameters
m1 = 2.2E30                # Mass, kg
x1 = np.array([0,1E11])  # Position, m
v1 = np.array([-3.5E4,0])  # Velocity, m/s

# Define body 2 parameters
m2 = 1.9E30
x2 = np.array([1E11*np.cos(210*np.pi/180),
               1E11*np.sin(210*np.pi/180)])
v2 = np.array([3E4*np.cos(300*np.pi/180),
               3E4*np.sin(300*np.pi/180)])

# Define body 3 parameters
m3 = 2E30
x3 = np.array([1E11*np.cos(330*np.pi/180),
               1E11*np.sin(330*np.pi/180)])
v3 = np.array([3E4*np.cos(60*np.pi/180),
               3E4*np.sin(60*np.pi/180)])

# Define simulation parameters
n = 3                    # Number of bodies, unitless
t = 0                    # Simulation time, s
dt = 1E4                 # Simulation time step, s
tEnd = 1E8               # Simulation end time, s
m = np.array((m1,m2,m3)) # All masses
x = np.vstack((x1,x2,x3))# All positions
v = np.vstack((v1,v2,v3))# All velocities
xHist = [[list(x1)],[list(x2)],[list(x3)]]
vHist = [[list(v1)],[list(v2)],[list(v3)]]

# Simulate until end time is reached
start = time()
while True:
    # Calculate acceleration
    a = []
    for i in range(n):
        a.append(0)
        for j in range(n):
            if i == j: continue
            a[-1] += - G * m[j] / norm(x[i]-x[j])**3 * (x[i] - x[j])

    # Update velocities
    for i,vi,ai in zip(range(n),v,a):
        vi += ai * dt
        vHist[i].append(list(vi))

    # Update positions
    for i,xi,vi in zip(range(n),x,v):
        xi += vi * dt
        xHist[i].append(list(xi))

    # Update time and end simulation if past tEnd
    t += dt
    if dt > 0 and t > tEnd: break
    if dt < 0 and t < tEnd: break

end = time()
print('Simulation finished in {:.4f} seconds.'.format(end-start))

# Convert xHist and vHist to np arrays
xHist = np.array(xHist)
vHist = np.array(vHist)

# Plot everything up
figure()
for i,c in enumerate(['or','ob','oc']):
    # Plot starting positions
    plot(xHist[i,0,0], xHist[i,0,1], c)
for i,c in enumerate(['-r','-b','-c']):
    # Plot path of star
    plot(xHist[i,:,0], xHist[i,:,1], c)
gca().set_aspect(1)
gca().set_xticks([])
gca().set_yticks([])
show(block = False)

Tenga en cuenta que las gráficas muestran las posiciones iniciales de las estrellas como puntos y luego trazan sus caminos a lo largo del tiempo.

Camino de tres masas para t < t 0 ingrese la descripción de la imagen aquíEn este escenario, las tres masas terminan en el escenario artificial. Ejecuté la simulación al revés configurando el paso de dttiempo y el tiempo final tEndpara que fueran negativos.

Camino de tres masas para t 0 < t ingrese la descripción de la imagen aquíA partir de aquí, la simulación se ejecuta hacia adelante con positivo dty tEnd, comenzando desde el mismo escenario artificial que el anterior.

Tenga en cuenta lo caótico e inestable que es este sistema. Todo el sistema solo permanece como un sistema de 3 cuerpos por menos de 6 años. Antes de eso, las tres masas están separadas y haciendo lo suyo. Se encuentran "casualmente" (porque lo configuré para que así sea), orbitan uno alrededor del otro durante un poco menos de 6 años, y uno es expulsado, lo que hace que los otros dos sigan orbitando entre sí.

Escenario artificial con metro 1 = metro 2 = metro 3 , | v 1 | = | v 2 | = | v 3 | , y todas las posiciones 120 o entre sí ingrese la descripción de la imagen aquí Sólo por diversión, un problema "estable" de 3 cuerpos con todas las estrellas de igual masa y órbitas. Esta es realmente una órbita de equilibrio inestable y cualquier perturbación la estropeará y verá lo que vio en los dos gráficos anteriores. De hecho, si ejecuta esto el tiempo suficiente, las inestabilidades numéricas de mi código darán como resultado que las órbitas se rompan. Esta inestabilidad numérica, como dije anteriormente, es inherente a cualquier solución numérica y no se puede superar, solo minimizar. Encuentro que, utilizando el método numérico que hice, mi sistema es resistente a las inestabilidades numéricas durante aproximadamente 7 años. Si quiero ejecutar esto por más tiempo (y seguir siendo preciso), necesito métodos numéricos más sólidos.

¡Gracias por su completa respuesta! Solo por curiosidad, ¿cuánto tiempo llevó a cabo su experimento hasta que el primer sistema expulsa un cuerpo?
Como dije anteriormente, todo el tiempo fue de unos 6 años. Estaba sobre uniformemente derramado, con el t < t 0 tardar unos tres años y el t 0 < t tardando unos tres años. En general, no es un sistema muy estable.
FWIW, puede reducir los errores numéricos utilizando una mejor técnica de integración que la integración de Euler (que es lo que usa su código). Para simulaciones orbitales, debe usar un integrador simpléctico (es decir, uno que conserve energía). Mi preferencia es por la forma sincronizada de integración de Leapfrog ; otra opción popular de integrador simpléctico es la integración de Verlet, como se menciona en esa página de Wikipedia.
@ PM2Ring Eso es definitivamente cierto. No estaba tratando de hacer una simulación muy robusta. Sólo algo rápido y sucio para probar un punto. Pero sí, una simulación real sería mejor si se usara algo más que la integración básica de Euler.