2.1. El problema de los tres cuerpos. El movimiento de una nave espacial.
- Teoría: Mecánica clásica, ecuaciones de Hamilton, campos centrales.
- Ténica numérica: Resolución de ecuaciones diferenciales por el
método de Runge-Kutta con paso de integración variable.
- Programación: Fortran, C, introducción a X-windows, gnuplot.
Modelo:
Nuestro sistema se compone de tres cuerpos: Tierra, Luna y nave espacial que consideramos que no tienen
estructura interna y que están caracterizados de forma única por sus masas: MT, ML y m
respectivamente. La única interacción presente es la gravitatoria. Vamos a suponer por simplicidad
que todos cuerpos se mueven en el mismo plano y además la Luna gira a velocidad angular constante w
alrededor de la Tierra en un orbita circular de radio fijo dTL.
La nave parte desde la superficie terrestre con velocidad v0 y ángulo q0 con respecto a
unos ejes arbitrarios centrados en la Tierra que podemos suponer como fija. Finalmente la nave puede
gastar una cantidad de energía E en cambiar su velocidad mediante la acción de su motor. Supondremos que
el motor de la nave funciona como un pulso instantáneo.
Problema:
- Obligatorio: Diseñar y escribir el programa que resuelve las ecuaciones del movimiento de una
nave moviéndose bajo la acción del campo gravitatorio terrestre y lunar.
- Voluntario:
El problema que se nos plantea es el de diseñar la misión del Apolo XI. Para ello suponemos que la nave tiene
unos motores muy potentes que le permiten instantáneamente cambiar el módulo de la velocidad (no asi su
dirección). Se pregunta:
- (1) Dar un plan de vuelo preciso para que una nave despegue de la superficie terrestre, orbite la luna durante
dos dias y luego regrese a la Tierra. La velocidad máxima de reentrada (cuando la nave contacta con la Tierra)
debe de estar en la ventana de 500-1000 km/h. Esto es, se piden, los valores q0, v0 y
los instantes en los que se deben de encender los motores. Notar que los motores siempre dan el mismo pulso
instantáneo, de igual magnitud, la cual también ha de ser dada como parte del disenño de la misión.
También se pide dar la duración de la misión y el gasto energético total en la misma.
- (2) Comparar la anterior misión con lo que ocurriría si en lugar de una misión directa Tierra-Luna-Tierra
hiciésemos: (i) orbitar la Tierra dos veces, (ii) Ir a la Luna, (iii) orbitar la Luna dos dias, (iv) volver a la Tierra
(v) orbitar la Tierra dos veces y (vi) caer sobre la Tierra. Diseñar esta misión un comparar las tiempos de
duración de la misma y su gasto energético total con los de la anterior misión directa.
Teoría:
Tomamos como origen del sistema de referencia a la Tierra. La Luna, puesto que se mueve a velocidad angular w
constante alrededor de la Tierra, tendrá como coordenadas en el tiempo t: xL(t) = dTLcos(wt) e
yL(t) = dTLsin(wt). Nos falta encontrar las ecuaciones del movimiento de la nave espacial.
Sean xo(t) e yo(t) las coordenadas de la nave en el instante t. Puesto que la interacción tiene simetría
polar es conveniente trabajar con coordenadas polares: xo(t) = r(t)cos(f(t)), yo(t) = r(t)sin(f(t)), donde
r(t) = [xo(t)2+yo(t)2]1/2 no es más que la distancia de la nave a la Tierra. En estas coordenadas, la distancia
de la nave a la Luna es rL(t) = [r(t)2+dTL2-2r(t)cos(f-wt)]1/2. La energía cinética de la nave es:
T = |
1 2
|
m |
é ê
ë
|
|
æ ç
è
|
|
d xo dt
|
ö ÷
ø
|
2
|
+ ( |
d yo dt
|
)2 |
ù ú
û
|
= |
1 2
|
m[(¶t r)2+r2(¶t f)2 ] |
| (1) |
y la energía potencial:
De esta forma el Lagrangiano no es más que L = T-V. Para construir el Hamiltoniano hemos de obtener los
momentos conjugados:
pr = |
¶L ¶r
|
= m¶t r pf = |
¶L ¶(¶t f)
|
= mr2¶tf |
| (3) |
Asi, el Hamiltoniano queda:
H = pr ¶t r +pf¶t f-L = |
pr2 2m
|
+ |
pf2 2mr2
|
-G |
mMT r
|
-G |
m ML rL
|
|
| (4) |
Finalmente, las ecuaciones del movimiento de la nave son:
¶t pr = - |
¶H ¶r
|
= |
pf2 mr3
|
-G |
mMT r2
|
-G |
mML rL3
|
[r-dTLcos(f-wt) ] |
| (7) |
¶t pf = - |
¶H ¶f
|
= -G |
mML rL3
|
rdTLsin(f-wt) |
| (8) |
Método numérico:
Hemos de resolver numéricamente el conjunto de cuatro ecuaciones diferenciales no lineales. Para ello
utilizamos el algoritmo de Runge-Kutta de cuarto orden que en resumen funciona como sigue: Sea la ecuación
diferencial a resolver:
donde y(t) puede ser un vector n-dimensional. Sea y(t0) = y0 dado. Entonces y(t0+h) se puede
aproximar por
y(t0+h) = y(t0)+ |
1 6
|
[ k(1)+2k(2)+2k(3)+k(4) ]+O(h5) |
| (10) |
donde
k(2) = hf(y0+ |
k(1) 2
|
,t0+ |
h 2
|
) |
| (12) |
k(3) = hf(y0+ |
k(2) 2
|
,t0+ |
h 2
|
) |
| (13) |
En general, el algoritmo de iteración para un sistema de ecuaciones diferenciales:
¶t yn(t) = fn(y1,y2,....,yn;t) n = 1,¼, N |
| (15) |
es
- (0) Dar yn = yn(0) para t = 0
- (1) Evaluar kn(1) = hfn(y1,y2,...,yn;t) para n = 1,...,N.
- (2) Evaluar kn(2) = hfn(y1+k1(1)/2, y2+k2(1)/2,...,yn+kn(1)/2;t+h/2) para n = 1,...,N.
- (3) Evaluar kn(3) = hfn(y1+k1(2)/2, y2+k2(2)/2,...,yn+kn(2)/2;t+h/2) para n = 1,...,N.
- (4) Evaluar kn(4) = hfn(y1+k1(3), y2+k2(3),...,yn+kn(3);t+h) para n = 1,...,N.
- (5) yn(t+h) = yn(t)+[1/6][kn(1)+2kn(2)+2kn(3)+kn(4) ]
- (6) t = t+h. Ir a (1)
El error cometido con este algoritmo es de orden h5, asi pues, cuanto más pequeño se tome h más
preciso será el cálculo aunque más tardaremos en alcanzar tiempos largos. Antes de elegir un valor de h
comentemos las escalas de tiempo típicas en nuestro problema. Una nave espacial en una órbita terrestre
tiene un periodo de unos 90 minutos, asi para describir con precisión una órbita terrestre tendríamos que
elegir h < 1min. Por otra parte, si la nave se encuentra a mitad de camino entre la Tierra y la Luna, los cambios
de velocidad aparecen en el rango de las horas. De esta forma vemos que si queremos describir conjuntamente
las órbitas y los desplazamientos entre la Luna y la Tierra de la nave debieramos utilizar la h más
pequeña que en nuestro caso son h @ 1min. Esta elección supone, en una misión típica de
una semana, el realizar unas 104 iteraciones del anterior algoritmo lo que hace que el cálculo sea lento. Una
forma de evitar esto es el intentar adaptar el valor de h a cada momento de la evolución. Un algoritmo que
realiza esta función es el siguiente:
- (0) Dar una h inicial, t = 0, el error máximo que toleramos emax @ h5, t0 y y(t0).
- (1) Evaluar e = 16|y(t0+h;h/2)-y(t0+h;h)|/15 (si y tiene varias componentes, calculamos la
r de cada una de ellas y tomamos la de máximo valor).
- (2) Evaluar hmax = h/s, donde s = max((e/emax)0.2,10-8).
- (3) Si s > 2 entonces h = hmax Ir a (1), Si s < 2 entonces t = t+h, y = y(t0+h;h/2).
- (4) Si h < hmax entonces h = 2h. Ir a (1).
Comentemos el anterior algoritmo. La idea principal es estudiar la variación relativa del error que obtenemos
si relizamos una iteración de tamaño h o si realizamos dos iteraciones de tamaño h/2. Sea
y(t+h1;h2) el resultado iterar varias veces con h = h2 hasta evolucionar el sistema un tiempo t+h1.
En particular, sabemos que el error del algoritmo de Runge-Kutta es de orden eh = C h5, cuando realizamos
una iteración de tamaño h. Si realizamos dos iteraciones de tamaño h/2, el error acumulado será
del orden eh/2 = C (h/2)5 2 = eh/16. Esto es, eh-eh/2 = eh(1-1/16), asi
eh @ 16 |eh-eh/2|/15. Puesto que y(t+h;h) = yexacta(t+h)+eh
y y(t+h;h/2) = yexacta(t+h)+eh/2, tenemos que
eh @ 16|y(t0+h;h/2)-y(t0+h;h) |/15. Conociendo eh y
el emax que toleramos, podemos obtener el hmax correspondiente a nuestro error tolerado. Asi
sabiendo que
eh/emax = h5/hmax5 obtenemos
hmax = h(emax/e)1/5. Si hmax < h/2 quiere decir que hemos evaluado las trayectorias
utilizando h/2 que dan errores más grandes que nuestra tolerancia y por lo tanto hemos de recalcular todo
con una h menor, en particular h = hmax. Si la h inicial es menor que la hmax quiere decir que estamos
realizando el cálculo con excesiva precisión (respecto a la tolerancia que nos hemos impuesto) y por lo
tanto podemos incrementar h, en particular h = 2h.
Un último comentario se refiere a la influencia de los valores de las variables en el cálculo. Como bien sabemos,
el ordenador introduce una fuente de error intrinseca debido al redondeo que ejecuta en cada operación
aritmética. Estos errores se magnifican cuando trabajamos con variables que tienen valores muy dispares
entre si. Para minimizar este efecto debemos de garantizar que nuestras variables r, f, pr y pf
son del mismo orden de magnitud. Una forma de garantizar esto es reescalar las variables, lo cual se puede hacer de
varias formas. En particular podemos usar: [r\tilde] = r/dTL, f, [p\tilde]r = pr/mdTL y
[p\tilde]f = pf/mdTL2. En este caso las ecuaciones del movimiento quedan reducidas a
¶t |
~ p
|
r
|
= |
|
-D |
é ê ê
ê ë
|
|
1
|
+ |
m
|
|
æ è
|
~ r
|
- cos(f-wt) |
ö ø
|
ù ú ú
ú û
|
|
| (18) |
donde D = GMT/dTL3, m = ML/MT y [r\tilde]¢ = [1+[r\tilde]2-2[r\tilde]cos(f-wt)]1/2.
Los valores numéricos reales que se deben de utilizar son: G = 6.67×10-11, MT = 5.9736 ×1024,
ML = 0.07349 ×1024, dTL = 3.844 ×108 y w = 2.3606208 ×10-6. Además, como la nave debe de
despegar de la superficie terrestre y no tocar la superficie de la Luna, es necesario utilizar los radios terrestre:
6.378160×106 y lunar: 1.737400×106 (todos los datos se dan en unidades del sistema internacional).
Ayudas:
- Comparar trayectorias y tiempos de cálculo obtenidos cuando se utiliza h fija o h-adaptada.
- Demostrar que H¢ = H+wpf es una constante del movimiento, i.e. dH¢/dt = 0. Utilizar este hecho
para conocer el error acumulado por la utilización del algoritmo de Runge-Kutta adaptativo.
- Información y curiosidades sobre las misiones Apolo puede encontrarse en el web:
http://www.nasa.gov/kids.html.