Está en la página 1de 10

Proyecto final: oscilador armónico relativista simple

Métodos numéricos y Algoritmos Computacionales

CELEDÓN HERNÁNDEZ Nicolás


Profesor: Dr. Alipio Gustavo Calles Martínez
Ayudante: M. en C. Pablo Reséndiz Vázquez
Facultad de Ciencias
UNAM

05 de febrero de 2020

Una partícula de masa m se mueve en una dimensión sujeta a una fuerza de oscilador armónico (resorte) con
constante k. A una distancia a del centro del resorte, la partícula tiene una velocidad relativista de 0.9c, como se muestra
en la Figura 1. Calcular la velocidad y posición de la partícula en función del tiempo.

Figura 1: Resorte sin fricción con masa relativista.

Introducción
Repaso de relatividad especial
Los siguientes postulados son el sustento de la relatividad especial: el principio de relatividad de Galileo es válido
para cualquier marco de referencia inercial, la luz en todos los marcos de referencia inerciales (en el vacío) se mueve
con la misma rapidez, y el espacio es homogéneo, isotrópico y continuo [1]. Estos postulados requieren una redefinición
del momento lineal clásico de una partícula. Para mantener válido el principio de la conservación del momento en

1
colisiones en sistemas cerrados y que este nuevo momento aproxime al clásico a velocidades bajas, definimos el
momento relativista como
m
p~ = q ~v , (1)
2
1 − vc2
r
1
donde m es la masa de la partícula y v su velocidad respecto a un marco inercial. Por simplicidad definimos γ = v2
1− c2

llamado factor de Lorentz [2].


Análogamente al caso clásico, definimos la fuerza sobre una partícula relativista como

d~
p
F~ = . (2)
dt
Finalmente, definimos igualmente la energía cinética en el caso relativista como: [2]
Z v
Ek = F dx = γmc2 − mc2 . (3)
0
R
Si la partícula está sujeta a fuerzas conservativas y tiene energía potencial V (x) = − F (x) dx, [3]
Z x
γmc2 − m0 c2 = = −(V (x) − V (x0 )), m0 6= 0
x0
V (x(t)) − V (x0 )
=⇒ γ(x(t)) = 1 − (4)
m0 c2

La energía potencial de una partícula en un oscilador armónico simple es V (x) = 12 kx2 [2].

Planteamiento del problema


Asumiendo que el resorte siempre obedece la ley de Hooke a pesar de las extremas velocidades y deformaciones, la
partícula en el resorte obedece la ecuación de movimiento

d(γm0 v)
F (x) = = −kx, (5)
dt
con condiciones iniciales x(0) = x0 y v(0) = 0.9c , cuya solución es la que buscamos. Al ingenuamente intentar
resolverla analíticamente surgen complicaciones:
 
d(γm0 v) dγ dv
= −kx =⇒ m0 v+γ = −kx
dt dt dt
 

=⇒ m0 v + γa = −kx (6)
dt

donde
!− 21
dγ d v2
= 1− 2
dt dt c
!− 32 
v2

1 2va
=− 1− 2 − 2
2 c c
va
= 2 γ3 (7)
c
Esta última ecuación es difícil de resolver por ser no lineal y además por encontrarse anidada en la ecuación de
movimiento. Esto sugiere que resolver la ecuación a través de métodos numéricos es una solución más práctica.

2
El algoritmo de Verlet y relatividad especial
Dada una ecuación de movimiento x(t) (y una constante h > 0), según sus expansiones de Taylor:

h2 00
x(t + h) ≈ x(t) + hx0 (t) +x (t),
2
h2
x(t − h) ≈ x(t) − hx0 (t) + x00 (t),
2
=⇒ x(t + h) ≈ 2x(t) − x(t − h) + h2 x00 (t). (8)

A partir de estas expresiones se puede programar un algoritmo que aproxime a la función x(t) iterativamente dando pasos
de tamaño h; este es el algoritmo de Verlet. Además de ser numéricamente estable, este algoritmo no es significativamente
más computacionalmente demandante que el más simple método de Euler y devuelve una mejor aproximación [3].
Combinando las ecuaciones 6 y 7 podemos ver que:
!
v2 a
m0 + γa = F
c2
!
m0 v 2 γ 3
=⇒ a + m0 γ = F
c2
F
=⇒ a =  
m0 v 2 m0
γ3 c2 + γ2
F 2
= ( vc2 = 1 − 1
γ2 )
m0 γ 3
tal que:
F (t)
x(t + h) ≈ 2x(t) − x(t − h) + h2 (9)
mγ(t)3
Necesitamos conocer el valor x−1 para calcular x1 , que podemos calcular como:

F0
x−1 = x0 − v0 h + h2 (10)
mγ03

con F0 = −kx0 y γ0 = 1.
Ahora podemos comenzar a escribir un programa que nos dé una aproximación numérica del comportamiento del
oscilador armónico relativista.

Desarrollo
Usaremos el entorno de desarrollo integrado (IDE) de VPython en glowscript.org para calcular iterativamente
valores que aproximan a la función buscada y para graficar estos puntos.

Visualización inicial
El siguiente es el código usado para obtener la Figura 2, donde se muestra la aproximación obtenida de la posición
de la partícula respecto al tiempo:

GlowScript 3.0 VPython


grafica = graph(title = ’OARS’, xtitle = ’Tiempo [s]’,
ytitle = ’Posición [segundo-luz]’) #Prepara el marco donde se muestra la
gráfica
posicion = gcurve(color = color.red) #Prepara la curva de la gráfica y le
asigna el valor rojo

3
Figura 2: Gráfica de la posición vs. tiempo del oscilador armónico simple cuando h = 0.001, x0 = 0.3c, m0 = 1 kg y
k = 1 kg/s2

# Constantes:
h = 0.001 #Tamaño de los pasos en el algoritmo
c = 1 # Velocidad de la luz (segundos-luz/s)
a = 0.3*c # Posición inicial (segundos-luz)
k = 1 # Constante del resorte (kg/s)
m = 1 # Masa de la partícula (kg)
v1 = 0.9*c # Velocidad inicial (segundos-luz/s)

x1 = a
U1 = (k*a*a)/2 #Energía potencial inicial

def g(x): # Factor de Lorentz


return 1 - (k/(2*m*c*c))*(x*x - a*a)

def F(x): # Fuerza de Hooke


return -k*x

x0 = x1 - v1*h + (h*h/(2*m*(g(x1))**3))*F(x1) # x(-1)

for t in range(15000): #Algoritmo de Verlet


x2 = 2*x1 - x0 + (F(x1)*h*h)/(m*(g(x1))**3)
x0 = x1; x1 = x2
posicion.plot(pos=(t*h,x2))

sleep(0)

Ahora en la Figura 3 graficamos la misma simulación junto con la velocidad calculada. Esta se obtuvo con la

4
Figura 3: Gráfica de la posición (rojo) y velocidad (azul) vs. tiempo del oscilador armónico simple cuando h = 0.001,
x0 = 0.3c, m0 = 1 kg y k = 1 kg/s2

aproximación
v(t + h) − v(t − h)
v(t) ≈ (11)
h
con el siguiente código:

GlowScript 3.0 VPython


grafica = graph(title = ’OARS’, xtitle = ’Tiempo [s]’, ytitle =
’Posición [segundo-luz] / Velocidad [segundo-luz/s]’)
posicion = gcurve(color = color.red)
velocidad = gcurve(color = color.blue) #Curva de velocidad azul

# Constantes:
h = 0.001 #Tamaño de los pasos en el algoritmo
c = 1 # Velocidad de la luz (segundos-luz/s)
a = 0.1*c # Posicion inicial (segundos-luz)
k = 1 # Constante del resorte (kg/s)
m = 1 # Masa de la partícula (kg)
v1 = 0.9*c # Velocidad inicial (segundos-luz/s)

x1 = a
U1 = (k*a*a)/2 #Energía potencial inicial

def g(x): # Factor de Lorentz


return 1 - (k/(2*m*c*c))*(x*x - a*a)

def F(x): # Fuerza de Hooke


return -k*x

x0 = x1 - v1*h + (h*h/(2*m*(g(x1))**3))*F(x1) # x(-1)

5
for t in range(15000): #Algoritmo de Verlet
x2 = 2*x1 - x0 + (F(x1)*h*h)/(m*(g(x1))**3)
x0 = x1; x1 = x2
posicion.plot(pos=(t*h,x2))

v = (x2-x0)/(h) #Aproximación de velocidad


velocidad.plot(pos=(t*h,v))

sleep(0)

Comparación con resultados clásicos


No es difícil mostrar que para un oscilador armónico simple clásico:
v0
x(t) = x0 cos (ωt) + sin (ωt) (12)
ω
v(t) = −aω sin (ωt) + v0 cos (ωt) (13)
p
con ω = k/m. A continuación graficamos las curvas de estas funciones junto a sus contrapartes relativistas para
observar las diferencias.

Figura 4: Gráfica de la posición relativista (rojo) y clásica (verde) vs. tiempo cuando h = 0.001, x0 = 0.3c, m0 = 1 kg
y k = 1 kg/s2 .

El siguiente código genera la Figura 4:

GlowScript 3.0 VPython

grafica = graph(title = ’OA Relativista vs. Clásico’, xtitle = ’Tiempo [s]’,


ytitle = ’Posición [segundos-luz]’)
posicion = gcurve(color = color.red)
classic = gcurve(color = color.green)

h = 0.001
c = 1

6
a = 0.3*c
k = 1
m = 1
x1 = a
v1 = 0.9*c
U1 = (k*a*a)/2

w = sqrt(k/m) # vel. angular clásica

def u(t): #posición clásica


return a*cos(w*t) + (v1/w)*sin(w*t)

def g(x):
return 1 - (k/(2*m*c*c))*(x*x - a*a)

def F(x):
return -k*x

x0 = x1 - v1*h + (h*h/(2*m*(g(x1))**3))*F(x1)

for t in range(20000):
x2 = 2*x1 - x0 + (F(x1)*h*h)/(m*(g(x1))**3)
x0 = x1; x1 = x2
posicion.plot(pos=(t*h,x2))

classic.plot(pos=(t*h,u(t*h)))

sleep(0)

Notemos que el modelo relativista predice un alcance máximo menor al del modelo clásico, así como una frecuencia
mayor. Bajo estas condiciones el desplazamiento máximo clásico es aproximadamente 0.95 segundos-luz, mientras
que el relativista predice un desplazamiento máximo de 0.83 segundos-luz, con una diferencia porcentual de 12.6 %. El
modelo clásico predice una frecuencia aproximada de 0.16 Hz mientras el relativista predice una de 0.22 Hz, con una
diferencia porcentual de aproximadamente 37 %.
El siguiente código genera la Figura 5:

GlowScript 3.0 VPython

grafica = graph(title = ’OAR: Velocidades’, xtitle = ’Tiempo [s]’,


ytitle = ’Velocidad [segundos-luz/s]’)
posicion = gcurve(color = color.red)
velocidad = gcurve(color = color.blue)
clasica = gcurve(color = color.cyan)

h = 0.001
c = 1
a = 0.3*c
k = 1
m = 1
x1 = a
v1 = 0.9*c
U1 = (k*a*a)/2

w = sqrt(k/m)

7
Figura 5: Gráfica de la velocidad relativista (azul) y clásica (cían) vs. tiempo cuando h = 0.001, x0 = 0.3c, m0 = 1 kg
y k = 1 kg/s2 .

def u(t): # Velocidad clásica


return -a*w*sin(w*t) + v1*c*cos(w*t)

def g(x):
return 1 - (k/(2*m*c*c))*(x*x - a*a)

def F(x):
return -k*x

x0 = x1 - v1*h + (h*h/(2*m*(g(x1))**3))*F(x1)

for t in range(20000):
x2 = 2*x1 - x0 + (F(x1)*h*h)/(m*(g(x1))**3)
x0 = x1; x1 = x2
#posicion.plot(pos=(t*h,x2))

v = (x2-x0)/(h)
velocidad.plot(pos=(t*h,v))

clasica.plot(pos=(t*h,u(t*h)))

sleep(0)

Los modelos relativista y clásico predicen aproximadamente la misma rapidez máxima, pero la velocidad oscila
entre extremos más rápidamente.

Masa en el oscilador
La teoría de la Relatividad Especial predice que la masa aparente γm de una partícula aumenta con su velocidad
según un marco de referencia inercial (específicamente, se requiere más fuerza para acelerar un cuerpo cuando este va

8
Figura 6: Gráfica de la posición (rojo), velocidad (azul) relativista, y “masa relativista” (γm0 ) vs. tiempo cuando
h = 0.001, x0 = 0.3c, m0 = 1 kg y k = 1 kg/s2 .

más y más rápido) [2]; a esta aparente nueva masa a veces se le llama “masa relativista” aunque autores contemporáneos
prefieren evitar este término. Podemos observar cómo este fenómeno influye en el comportamiento del oscilador simulado.
En l Figura 6 observamos que cuando crece la rapidez de la partícula, la masa aparente aumenta significativamente
(creciendo a más del doble) que afecta cuánta aceleración imparte el resorte sobre la partícula. Generamos esta figura
con el siguiente código:

GlowScript 3.0 VPython

grafica = graph(title = ’Cambio de masa aparente’, xtitle = ’Tiempo’,


ytitle = ’Posición [seg.-luz] / Velocidad[seg.-luz/s] / Masa [kg]’)
posicion = gcurve(color = color.red)
velocidad = gcurve(color = color.blue)
mass = gcurve(color = color.black)

h = 0.001
c = 1
a = 0.03*c
k = 1
m = 1
x1 = a
v1 = 0.9*c
U1 = (k*a*a)/2

w = sqrt(k/m)

def g(x):
return 1 - (k/(2*m*c*c))*(x*x - a*a)

def F(x):
return -k*x

9
x0 = x1 - v1*h + (h*h/(2*m*(g(x1))**3))*F(x1)

for t in range(10000):
x2 = 2*x1 - x0 + (F(x1)*h*h)/(m*(g(x1))**3)
x0 = x1; x1 = x2
posicion.plot(pos=(t*h,x2))

v = (x2-x0)/(h)
velocidad.plot(pos=(t*h,v))

mr = m/sqrt(1-((v*v)/(c*c))) # Masa * factor de Lorentz


mass.plot(pos=(t*h,mr))

sleep(0)

Conclusiones
Utilizando el algoritmo de Verlet y modificándolo para adaptarlo a la mecánica de la Relatividad Especial se escribió
código en VPython capaz de simular un oscilador armónico relativista simple (sin fricción) y estimar su posición
velocidad en función del tiempo. El desplazamiento máximo es menor al que predice el modelo clásico y su frecuencia
es mayor, y las velocidades máximas de ambos son aproximadamente iguales pero se encuentran fuera de fase. Además,
calculamos la masa aparente de la partícula en base a su velocidad en función del tiempo.
El uso de este modelo permite responder preguntas difíciles de responder tratando de encontrar una solución analítica
al sistema y no requiere conocimiento de mecánica analítica para construirse. Con estas simulaciones se puede intentar
estudiar la relación entre condiciones iniciales y comportamiento del sistema (e.g. entre posición o velocidad iniciales y
el desplazamiento máximo o frecuencia).
Existen algunas áreas de oportunidad para mejorar el modelo. Sería posible comparar los resultados arrojados por
este con los de modelos más sofisticados creados por investigadores para estimar el error del nuestro (ver [6] y ). Además,
el método para calcular la velocidad en este trabajo es poco sofisticado, por lo que se podrían comparar los resultados
obtenidos usando esta forma de obtenerla con los arrojados al simular un fenómeno relativista con solución analítica
conocida. Finalmente, podría extenderse este modelo para incluir la existencia de fuerzas disipativas usando el método
descrito por Calles y Espejel (ver [3]) y obtener un modelo más completo a través del cual observar situaciones análogas
a osciladores con distintos tipos de amortiguamiento o en medios resistivos.

Referencias
[1] Ramos-Sánchez, S. (2018). Relatividad para futuros físicos. CopIt-arXives. http://scifunam.fisica.
unam.mx/mir/copit/

[2] Tipler, P. A., & Llewellyn, R. A. (2008). Modern Physics. W. H. Freeman and Company.
[3] Espejel Morales, R., & Calles Martínez, A. (2019). Métodos numéricos para la solución de ecuaciones diferenciales.
Universidad Nacional Autónoma de México. https://tienda.fciencias.unam.mx
[4] Halliday, D., Resnick, R., & Walker, J. (2011). Fundamentals of physics extended (9a ed.). John Wiley Sons.

[5] GlowScript IDE. https://www.glowscript.org/


[6] de la Fuente, D., & Torres, P. J. (2010). A new relativistic extension of the harmonic oscillator satisfying an
isochronicity principle. Departamento de Matemática Aplicada, Universidad de Granada. http://www.ugr.
es/~ecuadif/files/Reloscillator.pdf
[7] Babusci, D., Dattoli, G., Quattromini, M., & Sabia, E. (2012). Relativistic harmonic oscillator.
https://arxiv.org/pdf/1209.2876.pdf

10

También podría gustarte