Calc Astr
Calc Astr
Calc Astr
6 de junio de 2017
Resumen
Después de algunas consideraciones teóricas básicas sobre los puntos de Lagrange y las
curvas de velocidad cero, se estudia experimentalmente el comportamiento de algunas de
las órbitas que aparecen en el problema restringido circular plano de los tres cuerpos. El
código empleado para generar las figuras y los datos está disponible en:
http://www.uam.es/fernando.chamizo/physics/files/prog_calc_astr.tar.gz
Índice
1. El modelo teórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1
1. El modelo teórico
Dos masas m1 y m2 bajo la acción de la atracción gravitatoria admiten órbitas elı́pticas con
foco común en el centro de masas, que supondremos el origen, y ejes mayores contenidos en una
misma recta. En el caso especial de excentricidad nula tenemos órbitas circulares recorridas
con velocidad angular constante ω0 dada por la tercera ley de Kepler
m1 + m2
(1) ω02 = G 3
r12
con r12 la distancia entre ambas masas. Esta situación se ajusta aproximadamente a los movi-
mientos de los planetas con la excepción de Mercurio ya que no presentan grandes excentrici-
dades:
' ♀ ♁ ♂ X Y Z [
e 0.2056 0.0068 0.0167 0.0934 0.0484 0.0542 0.0472 0.0086
El problema restringido circular de los tres cuerpos consiste en introducir una tercera ma-
sa m3 cuya influencia gravitatoria sobre m1 y m2 es despreciable. Por ejemplo, podrı́a corres-
ponder a una sonda espacial suficientemente cerca de Marte para que el sistema Sol-Marte sea
predominante.
2
Debido a la simetrı́a, no hay restricción en suponer 0 ≤ µ ≤ 1/2. Con esta notación, las
coordenadas en R del segundo miembro de (2) son
1 − µ µ
q q
(6) ∇ + con r1 = (x1 + µ)2 + x22 + x23 y r2 = (x1 − 1 + µ)2 + x22 + x23 .
r1 r2
Separando las coordenadas del primer miembro de (2) con (3), se deducen las ecuaciones de
movimiento en R
∂U ∂U ∂U 1 1−µ µ
(7) ẍ1 = 2ẋ2 + , ẍ2 = −2ẋ1 + , ẍ3 = con U = (x21 + x22 ) + + .
∂x1 ∂x2 ∂x3 2 r1 r2
Los puntos de Lagrange son aquellos en los que la masa m3 puede permanecer con velocidad
relativa nula con respecto a m1 y m2 . En el sistema no rotado, verı́amos que las tres masas
avanzan con la misma velocidad angular en sus órbitas circulares. De acuerdo con (7) los
puntos de Lagrange vienen determinados por la ecuación ∇U = ~0. La tercera coordenada lleva
a x3 = 0, como es lógico pensando en la dirección de las fuerzas. En consonancia con ello, en
este trabajo nos centraremos sobre todo en el problema plano en que m3 se mueve en el plano
orbital de m1 y m2 identificado con XY . Consecuentemente en lo sucesivo escribiremos x e y
en vez de x1 y x2 . De este modo el potencial efectivo U es
( p
1 2 2 1−µ µ r1 = (x + µ)2 + y 2 ,
(8) U = (x + y ) + + con p
2 r1 r2 r2 = (x − 1 + µ)2 + y 2 .
Las soluciones que se ven a simple vista son las que son menos naturales desde el punto de
vista fı́sico: r1 = r2 = 1 que dan lugar a los puntos
√ √
1 3 1 3
(11) L4 = − µ, y L5 = − µ, − .
2 2 2 2
Geométricamente corresponden a que las tres masas formen un triángulo equilátero. El resto
de las soluciones de (10), tienen y = 0, es decir, corresponden al caso natural fı́sicamente en
que las tres masas están alineadas y las fuerzas sobre m3 se compensan con la fuerza centrı́fuga.
3
La numeración habitual es llamar L1 a la solución entre m1 y m2 , L2 a la que está a la derecha
de m2 y L3 el que está a la izquierda de m1 . Son soluciones de ecuaciones de quinto grado
[Cor98] que en general no admiten soluciones explı́citas. Una situación natural se da cuando
m1 es mucho mayor que m2 (por ejemplo en el citado ejemplo del Sistema Solar), lo que se
traduce por (5) en que µ es pequeño. En esa situación, se tienen las aproximaciones
Es fácil dar explicaciones sencillas de estas aproximaciones sin pasar al sistema de referencia R.
Por ejemplo, para L1 , una partı́cula en una órbita circular de radio r con frecuencia angular
ω0 sufre con nuestras unidades una fuerza centrı́fuga ω02 r = r y una atracción gravitatoria por
m1 y m2 dada por (1 − µ)/(r − µ)2 y µ/(r − 1 + µ)2 . El balance de fuerzas para r = 1 − bajo
el ansatz µ = O(2 ) es
1−µ µ
(13) = +r que implica 1 + 2 + O(2 ) = µ−2 + 1 − .
(r − µ)2 (r − 1 + µ)2
def l l a g (mu) :
l a g = [ 0 , 0 , 0 , ((1 −2∗mu) / 2 , s q r t ( 3 ) / 2 ) , ((1 −2∗mu) / 2 , −s q r t ( 3 ) / 2 ) ]
return l a g
4
Lo cual implica que la llamada constante de Jacobi
∂2U 3 ∂ 2 U ∂ 2 U ∂ 2 U 2 3 9 27 27
(17) 2
= > 0, 2 2
− = · − (1 − 2µ)2 = µ(1 − µ) > 0.
∂x 4 ∂x ∂y ∂x∂y 4 4 16 4
Por tanto las curvas de nivel que las contienen se reducen a un punto. Por otra parte, L1 , L2 y
L3 son puntos de silla de U [MD99, §3.7.1] y entonces existen curvas de velocidad cero crı́ticas
que pasan por ellos. La siguiente función en SageMath dada una lista de ı́ndices L dibuja estas
curvas crı́ticas donde i − 1 corresponde a Li .
def z e r o v e l c ( a , L) :
lag = l l a g (a)
f = x ˆ2 + y ˆ2 +2∗((1−a ) / s q r t ( ( x+a ) ˆ2+y ˆ 2 )+a / s q r t ( ( x−1+a ) ˆ2+y ˆ 2 ) )
P = p o i n t ( [ ( 0 , 0 ) ] , s i z e =0)
for k in L :
c = f ( x=l a g [ k ] [ 0 ] , y=l a g [ k ] [ 1 ] )
P += i m p l i c i t p l o t ( f −c , ( x , − 2 , 2) , ( y , − 2 , 2) , p l o t p o i n t s =400)
return P
5
Las siguientes figuras se obtienen invocando a zero_vel_c(0.1,L) con L=[0], L=[1], L=[2]
y L=[0,1,2] (esto es, la superposición de las figuras anteriores).
Para interpretar mejor los resultados se dibujan en rojo los cinco puntos de Lagrange y en
verde las dos masas m1 y m2 . Además se indican en azul en tamaño pequeño el origen y el
(1, 0) para que sirvan de referencia.
Es interesante ver la evolución de estas curvas cuando se disminuye el valor de µ, por
ejemplo cuando cambiamos µ = 0.1 por µ = 0.005 son
Para dibujar familias de curvas de velocidad cero (no crı́ticas) se emplea la siguiente función
que ajusta autmáticamente el rango aprovechando que en L4 se alcanza un mı́nimo y buscando
un máximo en los bordes del marco de la figura.
def z e r o v e l (mu, l =1.6) :
P = p o i n t ( [ ( 0 , 0 ) ] , s i z e =0)
f = x ˆ2 + y ˆ2 +2∗((1−mu) / s q r t ( ( x+mu) ˆ2+y ˆ 2 )+mu/ s q r t ( ( x−1+mu) ˆ2+y ˆ 2 ) )
cmin = f ( x=(1−2∗mu) / 2 , y=s q r t ( 3 ) / 2 )
cmax = min ( f ( x=−l , y=0) , f ( x=0 , y=−l ) )
N = 12
h = ( cmax−cmin ) /N
for c in s r a n g e ( cmin+h / 2 , cmax , h ) :
P += i m p l i c i t p l o t ( f −c , ( x,− l , l ) , ( y,− l , l ) , p l o t p o i n t s =400)
return P
El número de curvas viene dado por N y está arbitrariamente fijado a 12. el parámetro opcional
l especifica el tamaño del cuadrado dentro del que se dibujan las curvas.
6
Aquı́ se muestran algunos ejemplos para diferentes valores del único argumento obligato-
rio µ.
typedef struct ph sp {
double t x;
double t y;
double t vx ;
double t vy ;
} ph sp ;
7
6
7 runge kutta4 ( coord rk4 ) ;
8
9 f p = f o p e n ( " r3b . dat " , "w" ) ;
10 if (NULL == f p ) {
11 f p r i n t f ( s t d e r r , " File failed \n" ) ;
12 return FAILURE ;
13 }
14 f p r i n t f ( fp , " %.15e\n %.15e\n %d\n" , MU, CJ , N STEPS+1) ;
15 for ( i =0; i <N STEPS+1; i ++){
16 f p r i n t f ( fp , " %e , %e\n" , ( double ) c o o r d r k 4 [ i ] . x ,
,→ ( double ) c o o r d r k 4 [ i ] . y ) ;
17 }
18 f c l o s e ( fp ) ;
19
20 f r e e ( coord rk4 ) ;
21
22 return SUCCESS ;
23 }
La lı́nea 5 reserva el espacio en memoria para almacenar los datos de la órbita y la 7 llama al
método numérico de Runge-Kutta. El resultado quedará acumulado en la estructura de datos
coord_rk4. Las lı́neas 9–18 extraen las coordenadas x e y y las escribe en el fichero de datos
r3b.dat que se encabeza con los valores de µ, la constante de Jacobi cJ y el número de pasos
más uno. Los dos primeros los utilizará el código que dibuja los datos y el último evitará errores
de lectura. Finalmente, en la lı́nea 20 se libera la memoria.
ph sp dynamics ( ph sp ph ) {
ph sp outph ;
d o u b l e t r 1 c = ph . x+MU;
d o u b l e t r 2 c = ph . x−1.0+MU;
r 1 c = s q r t ( r 1 c ∗ r 1 c+ph . y∗ph . y ) ;
r 1 c ∗= r 1 c ∗ r 1 c ;
r 2 c = s q r t ( r 2 c ∗ r 2 c+ph . y∗ph . y ) ;
r 2 c ∗= r 2 c ∗ r 2 c ;
/* velocity */
outph . x = ph . vx ;
outph . y = ph . vy ;
/* Force */
outph . vx = −(1.0−MU) ∗ ( ph . x+MU) / r1c−MU∗ ( ph . x−1.0+MU) / r 2 c ;
outph . vy = −(1.0−MU) ∗ph . y/ r1c−MU∗ph . y/ r 2 c ;
8
/* Efective force ( Coriolis correction ) */
outph . vx += 2 . 0 ∗ ph . vy + ph . x ;
outph . vy += −2.0∗ph . vx + ph . y ;
return outph ;
}
Los valores que determinan la órbita aparecen como parámetros a través de la directiva
#define dentro de un fichero de cabecera .h que, como veremos, es generado automáticamente
por un programa
SageMath.
Los parámetros son µ y las posiciones y velocidades iniciales
x(0), y(0) y ẋ(0), ẏ(0) (indicados a la izquierda para un ejemplo de órbita horseshoe que
veremos más adelante)
# define MU 0 . 0 0 0 9 5 3 8 7 5
# define X0 −0.97668
# define Y0 0 . 0 # define N ORB 3 0 . 0
# define VX0 0 . 0 # define DT 0 . 0 1
# define VY0 −0.06118
Por otra parte, hay dos parámetros relativos al método numérico (columna de la derecha),
N_ORB indica el tiempo en unidades de órbitas de las masas m1 y m2 , mientras que DT indica
la discretización en el tiempo. A partir de ellos se define el número de pasos con
# define N STEPS ( ( int ) ( 2 . 0 ∗ M PI∗N ORB/DT) )
Para mayor comodidad, se interactúa con el código C anterior a través de una función,
orbit, definida en SageMath (de hecho en la parte no gráfica es en su mayorı́a Python puro)
que tiene tres argumentos, el último de ellos opcional. El primero es una lista con los parámetros
orbitales y el segundo con los del método numérico, ordenados como se ha indicado antes. Ası́,
la órbita puesta como ejemplo se invoca con
Lorb = [ 0 . 0 0 0 9 5 3 8 7 5 , −0.97668 , 0 . 0 , 0 . 0 , − 0 . 0 6 1 1 8 ]
Lnum = [ 3 0 . 0 , 0 . 0 1 ]
o r b i t ( Lorb , Lnum )
9
el fichero r3b.dat. Además de los datos se representa también la curva de velocidad cero
correspondiente a la órbita para que sean claras las zonas prohibidas.
Una pequeña nota técnica es que para evitar imágenes muy “pesadas” que no añaden
información, en run_and_plot solo se aprovechan los datos de r3b.dat que podrı́an dar lugar
a pı́xeles distintos con resolución razonable. Esto se hace con el if de
for k in r a n g e ( n s t e p s ) :
l i n e=f . r e a d l i n e ( )
xy = l i n e . s p l i t ( ’,’ )
xy = ( f l o a t ( xy [ 0 ] ) , f l o a t ( xy [ 1 ] ) )
if abs ( l x y [0] − xy [ 0 ] ) / r e s x + abs ( l x y [1] − xy [ 1 ] ) / r e s y > 1 :
l x y = xy
Ldat . append ( xy )
Aquı́ res_x y res_y se calculan automáticamente para que haya a lo más 800 pı́xeles por
coordenada.
10
al segundo miembro de (18). Tenemos que ver que la derivada de c1 (µ) = F µ, x1 (µ) no se
anula para 0 < µ < 1/2 y ası́ c1 será monótona. Utilizando que, por definición, en L1 se cumple
∂F/∂x1 = 0, la anulación de c01 (µ) implicarı́a
∂F ∂F dx1 ∂F 2(1 + x1 ) 2(1 − x1 )
(19) c01 (µ) = + = =− 2
+ = 0,
∂µ ∂x1 dµ ∂µ (x1 + µ) (1 − µ − x1 )2
y de aquı́
1 1 2T 2T
(20) µ= + T− donde se ha escrito x1 = con 0 ≤ T ≤ 1.
2 2 1 + T2 1 + T2
Sustituyendo en la primera ecuación de (10) con x = x1 e y = 0 y extrayendo un factor
T (T − 1), se llega una ecuación de tercer grado que no tiene solución en T ∈ (0, 1).
Las figuras corresponden a µ = 0.2 que implica c1 = 3.8047 y c2 = 3.5524. Los valores elegidos
de cJ son respectivamente 3.9, 3.7 y 3.5.
11
En los dos primeros casos tenemos órbitas confinadas alrededor de m1 y m2 porque, recor-
demos, las curvas de velocidad cero establecen fronteras para las regiones permitidas.
Lorb = [ 0 . 5 , 0 . 0 , 0 . 0 , 0 . 5 , 0 . 0 ]
Lnum = [ 5 . 0 , 0 . 0 0 0 1 ]
c1 = 4, cJ = 3.75, c2 = 3.4568
Si nos fijamos en la salida desde el punto inicial, que es el origen, observamos un desvı́o en
la trayectoria hacia abajo a pesar de la velocidad inicial es horizontal. La explicación es que la
simetrı́a y ↔ −y es solo aparente pues en el sistema inercial centro de masas m1 y m2 están
rotando. La desviación se debe al término de Coriolis en (3).
(x0 , y0 ) = (0, 0) (vx0 , vy0 ) = (0.6, 0.12) (x0 , y0 ) = (0.1, 0) (vx0 , vy0 ) = (0.85, 0.57)
µ = 0.4, cJ = 3.958933 µ = 0.29, cJ = 3.558268
Si, por el contrario, cJ es ligeramente menor que c2 , se abrirá un hueco hacia la región exterior
no acotada y m3 podrı́a escapar de los alrededores de m1 y m2 , como muestra la segunda figura
en la que c2 − cJ = 0.003822.
12
En el caso c1 < cJ el movimiento está confinado al óvalo que contiene a una de las masas
siempre que la posición inicial esté en él. Tomemos para todos los ejemplos siguientes µ = 0.2
y cJ = 4.098992. En este caso los dos óvalos tiene forma casi circular debido a que cJ y c1 no
están próximos. Por (15), la constante de Jacobi depende del módulo de la velocidad pero no
de su dirección, sin embargo las órbitas, por supuesto, pueden ser bien distintas. Partiendo del
mismo punto (x0 , y0 ) = (0.1, 0.08), para el tiempo de tres órbitas de m1 y m2 se obtiene, con
las velocidades iniciales indicadas,
Para conseguir que m3 esté confinada alrededor de m2 podemos tomar un (x0 , y0 ) cercano
a (1 − µ, 0), la singularidad de U , y después compensar con una velocidad inicial adecuada
en (15) para que cJ sea 4.098992 como antes. Por ejemplo, en la figura de la derecha se ha
tomado (x0 , y0 ) = (0.9, 0) que habrı́a dado la constante 6.264545 con velocidad inicial nula y
que con vx20 + vy20 = 2.16557 se convierte en la cJ de más arriba.
13
5. Algunas órbitas periódicas
Resulta un poco chocante que en un sistema caótico como el de los tres cuerpos se puedan
encontrar soluciones periódicas (y lo es mucho más que en 2000 se hallara una sencilla para
el problema sin restricciones [CM00]) pero desde el punto de vista numérico no lo es tanto
pensando en métodos de disparo, esto es, intentando por aproximaciones sucesivas lanzar m3
de modo que la posición y velocidades finales se aproximen a las iniciales. Habitualmente se
emplea la simetrı́a (t, x, y, ẋ, ẏ) ↔ (−t, x, −y, −ẋ, ẏ) del problema, por ello las condiciones
iniciales son a menudo de la forma y0 = vx0 = 0 [BM05].
En [Per17] se prueba una especie de ley de Kepler para las órbitas periódicas y entre los
ejemplos que se mencionan allı́ representamos los dos siguientes:
x0 = 0.732035 x0 = 1.1378
y0 = 0.713203 y0 = 0
vx0 = 0.112027 vx0 = 0
vy0 = −0.114985 vy0 = −0.174265
cJ = 2.974994 cJ = 3.022873
Los valores de µ son 9.53875 · 10−4 en la primera figura, correspondiente al sistema Sol-Júpiter,
y 7.80369 · 10−5 en la segunda, correspondiente al sistema Júpiter-Ganı́medes.
La curiosa estrella de siete puntas apareció mientras se estudiaban las órbitas confinadas.
14
Entre las órbitas menos intuitivas en la variante del problema de los tres cuerpos que nos
ocupa, están las llamadas órbitas de herradura (horseshoe orbits). Nos centramos aquı́ en el
caso periódico. Una definición informal (cf. [BM05]) es que son aquellas con forma de “C”
encerrando a L3 , L4 y L5 pero no a L1 ni a L2 . Este fenómeno aparece para valores de µ
pequeños y con cJ y c1 cercanos a 3 (recordemos que c1 ≥ 3 es el valor de 2U en L1 ).
Dos ejemplos, con µ = 9.53875 · 10−4 correspondiente al sistema Sol-Júpiter, que aparecen
en [Tay81] y están representadas en [MD99, Fig. 3.17], son:
x0 = −0.97668 x0 = −1.02745
y0 = 0 y0 = 0
vx 0 = 0 vx0 = 0
vy0 = −0.06118 vy0 = 0.04032
cJ = 2.99892672 cJ = 3.00148629
15
Los valores de la constante de Jacobi cJ y de c1 y c2 (el valor de 2U en L2 ) están recogidos en
la tabla:
c1 3.00898924 c1 3.00898924 c1 3.00898924
cJ 2.99390329 cJ 3.00201256 cJ 2.99970858
c2 3.00885590 c2 3.00885590 c2 3.00885590
Como habı́amos anticipado, son valores próximos entre sı́ y a tres.
Los tres primeros argumentos son los datos orbitales, del algoritmo numérico y de la repre-
sentación que ya han aparecido con anterioridad. Hay un argumento obligatorio más, nfr que
es el número de fotogramas. Finalmente, están los argumentos dela y f_lag, el primero es el
tiempo en milisegundos entre fotogramas y el segundo tiene la información de si se representan
los ejes y los puntos de Lagrange dependiendo respectivamente de si los bits 1 y 0 están activos
o no. Es decir, f_lag=3 pinta ambos y f_lag=2 pinta los ejes pero no los puntos de Lagrange.
Con retrieve_data_frames se llama al programa C que hace los cálculos con el método
de Runge-Kutta y del fichero de datos resultante se eligen nfr de ellos. La parte relevante del
código es:
k = 0
# retrieve only nfr values
for n f in r a n g e ( n f r ) :
ind = f l o o r ( nf ∗ nsteps / n f r )
while ( k!= i n d ) :
line = f . readline ()
k +=1
line = f . readline ()
La fórmula para ind asegura que las nfr posiciones que indican los datos recuperados estén
uniformemente distribuidos en el tiempo (aquı́ nsteps es el número de lı́neas del fichero de
datos). La salida de retrieve_data_frames es una lista de nfr pares dados por tiempos y
16
posiciones en el sistema no rotado. Esta lista la utiliza make_frames creando nfr imágenes
temporales temp_frame*.png con un punto azul en la posición de m3 tomada de Ldat y dos
puntos verdes en las posiciones de m1 y m2 . Además, make_frames crea en el fichero indicado
en Lplo una superposición de todos los fotogramas. Finalmente, se llama al script de Shell
animate que a través de la suite de código abierto ImageMagick compone el GIF animado con
el nombre tomado del último elemento de L_plo, salvo que la extensión se modifica a .gif. El
contenido del script es
# !/ bin / bash
Los modificadores -deconstruct -layers optimize son importantes para crear ficheros de
tamaño reducido.
Después m3 se dirige hacia m1 y la orbitará cierto número de veces. Mostrando tan pocos
fotogramas es difı́cil hacerse una idea del fenómeno, sobre todo teniendo en cuenta la gran
17
velocidad que adquiere m3 cuando está cerca de m2 , por ello resulta ilustrativa la última
imagen que incluye las posiciones de las tres masas a lo largo de los cien fotogramas.
0.6
0.4
0.2
-0.2
-0.4
La separación entre los puntos azules en esta última imagen, da una idea de la velocidad de m2
que hemos mencionado. Según se acerca al punto del tirón los puntos se van espaciando, tanto
que 100 fotogramas se vuelven pocos para ubicarlo bien. Después m3 sigue bajo la influencia
gravitatoria de m2 que se va alejando por la parte superior, lo que causa en cambio en la
curvatura de la trayectoria. En los momentos a medio camino entre la influencia de m1 y m2
la velocidad disminuye y después los puntos vuelven a espaciarse cuando m3 entra claramente
bajo la acción de m1 .
También hemos hecho un script para realizar vı́deos con el software libre ffmpeg a partir
de los fotogramas generados por make_animation.
# !/ bin / bash
18
Referencias
[BM05] E. Barrabés and S. Mikkola. Families of periodic horseshoe orbits in the restricted
three-body problem. Astron. Astrophys., 432:1115–1129, mar 2005.
[Cor98] N. J. Cornish. The Lagrange points. 1998. WMAP Education and Outreach
https://map.gsfc.nasa.gov/ContentMedia/lagrange.pdf.
[MD81] C. D. Murray and S. F. Dermott. The dynamics of tadpole and horseshoe orbits. I -
Theory. Icarus, 48:1–22, October 1981.
[Per17] O. Perdomo. On the period of the periodic orbits of the restricted three body problem.
Celestial Mech. Dynam. Astronom., doi 10.1007/s10569-017-9766-8, 2017.
[Sic10] B. Sicardy. Stability of the triangular Lagrange points beyond Gascheau’s value.
Celestial Mech. Dynam. Astronom., 107(1-2):145–155, 2010.
[Tay81] D. B. Taylor. Horseshoe periodic orbits in the restricted problem of three bodies for
a sun-Jupiter mass ratio. Astron. Astrophys., 103:288–294, nov 1981.
19