Está en la página 1de 8

Simulación de Procesos Físicos

Actividad 2.2. Sistemas masa–resorte acoplados.


Alumno: Inserte aquí su nombre.

Dos objetos de masa m1 y m2 están acoplados mediante dos resortes con constantes k1 y k2 respecti-
vamente; la punta izquierda del resorte de la izquierda está fijo a una pared, como se muestra en la figura.
Para agregar amortiguamiento al modelo añadimos los términos b1 x˙1 y b2 x˙2 . El sistema de ecuaciones

k1 k2
m1 m2

b1 x1 b2 x2

Figura 1: Esquema de los sistemas masa–resorte acoplados.

diferenciales acoplado de segundo orden para este sistema está dado por:

m1 x¨1 + b1 x˙1 + k1 x1 − k2 (x2 − x1 ) = 0


m2 x¨2 + b2 x˙2 + k2 (x2 − x1 ) = 0

Del sistema anterior se pueden dar 4 ecuaciones en términos de los parámetros para x˙1 , x˙2 , x¨1 y x¨2 :

x˙1 = v1
−b1 x˙1 − k1 x1 + k2 (x2 − x1 )
x¨1 =
m1
x˙2 = v2
−b2 x˙2 − k2 (x2 − x1 )
x¨2 =
m2
Considerando este sistema de ecuaciones diferenciales y condiciones iniciales arbitrarias dependiendo
del caso de estudio, se puede modelar el sistema de resortes acoplados.

Instrucciones
Ejercicio 1.
Basándose en Fay y Graham (2003), añada los términos no lineales a las ecuaciones y al código.

Obtenga la solución numérica del ejemplo 3.1 del artículo.

Grafique la solución y realice la gráfica de fase para la solución de ambos sistemas (ver ejemplo de
las gráficas en el artículo).

Discuta lo obtenido.
Asumiendo a las fuerzas de restitución como fuerzas no lineales, es decir, en vez de −kx tomar −kx +
µx3 ,el modelo se convierte en el siguiente sistema de ecuaciones.

m1 x¨1 + δ1 x˙1 + k1 x1 − µ1 x31 + k2 (x1 − x2 ) − µ2 (x1 − x2 )3 = 0


m2 x¨2 + δ2 x˙2 + k2 (x2 − x1 ) − µ2 (x2 − x1 )2 = 0
Que resolviendo es:

x˙1 = v1
−δ1 x˙1 − k1 x1 + µ1 x31 − k2 (x1 − x2 ) + µ2 (x1 − x2 )3
x¨1 =
m1
x˙2 = v2
−δ2 x˙2 − k2 (x2 − x1 )
x¨2 =
m2
En el que las masas y las constantes de los resortes serán m1 = m2 = 1, k1 = 0.4 y k2 = 1.808,
los coeficientes de amortiguamiento serán δ1 = δ2 = 0, los coeficientes no lineales serán µ1 = −1/6 y
µ2 = −1/10, y las condiciones iniciales serán (x1 (0), x˙1 (0), x2 (0), x˙2 (0)) = (1, 0, −1/2, 0)

Ejercicio 2.
Basándose en Fay y Graham (2003), añada los términos de los forzamientos a las ecuaciones y al
código.
Obtenga la solución numérica del ejemplo 4.1 del artículo.
Grafique la solución y realice la gráfica de fase para la solución de ambos sistemas (ver ejemplo de
las gráficas en el artículo).
Discuta lo obtenido.

Para añadir fuerzas externas al modelo, se suponen fuerzas senoidales de la forma F cosωt, y el modelo
se convierte en el siguiente sistema.

m1 x¨1 + δ1 x˙1 + k1 x1 − µ1 x31 + k2 (x1 − x2 ) − µ2 (x1 − x2 )3 − F1 cosω1 t = 0


m2 x¨2 + δ2 x˙2 + k2 (x2 − x1 ) − µ2 (x2 − x1 )2 − F2 cosω2 t = 0
El cual se convierte en el sistema a resolver:

x˙1 = v1
−δ1 x˙1 − k1 x1 + µ1 x31 − k2 (x1 − x2 ) + µ2 (x1 − x2 )3 + F1 cosω1 t
x¨1 =
m1
x˙2 = v2
−δ2 x˙2 − k2 (x2 − x1 ) + F2 cosω2 t
x¨2 =
m2
En el que las masas serán m1 = m2 = 1, las constantes de los resortes k1 = 2/5 y k2 = 1, los coeficientes
de amortiguamiento δ1 = 1/10 y δ2 = 1/5, los coeficientes no lineales serán µ1 = 1/6 y µ2 = 1/10, las
amplitdes de las fuerzas serán F1 = 1/3 y F2 = 1/5 y las frecuencias de dichas fuerzas ω1 = 1 y ω2 = 3/5
con condiciones iniciales (x1 (0), x˙1 (0), x2 (0), x˙2 (0)) = (0.7, 0, 0.1, 0)
Código.

import numpy as np
import matplotlib . pyplot as plt
from scipy . integrate import odeint
import matplotlib . animation as animation

def NonLinearCoupledSprings (y, t, p):


[x1 , v1 , x2 , v2] = y
m1 , m2 , delta1 ,delta2 , k1 , k2 , mu1 , mu2 = p

dydtnl = [v1 ,
( - delta1 *v1 - k1*x1 + mu1 *( x1 **3) - k2 *(x1 -x2) +
mu2 *((x1 -x2 )**3) ) / m1 ,
v2 ,
( - delta2 *v2 - k2 *(x2 -x1) + mu2 *((x2 -x1 )**3) ) / m2]
return dydtnl

# Parametros para no lineal


m1 = 1
m2 = 1
delta1 = 0
delta2 = 0
k1 = 0.4
k2 = 1.808
mu1 = -1/6
mu2 = -1/10

def ForcingCoupledSprings (yf , tf , pf):


[x12 , v12 , x22 , v22] = yf
m1f , m2f , delta1f , delta2f , k1f , k2f , mu1f , mu2f , omega1 , omega2 ,
F1 , F2 = pf

dydtf = [v12 ,
( - delta1f *v12 - k1f*x12 + mu1f *( x12 **3) - k2f *(x12 -x22) +
mu2f *(( x12 -x22 )**3) + F1*np.cos( omega1 *tf) ) / m1f ,
v22 ,
( - delta2f *v22 - k2f *(x22 -x12) + mu2f *(( x22 -x12 )**3) +
F2*np.cos( omega2 *tf) ) / m2f]
return dydtf

# Parametros para resortes forzados


m1f = 1
m2f = 1
delta1f = 1/10
delta2f = 1/5
k1f = 2/5
k2f = 1
mu1f =1/6
mu2f =1/10
omega1 =1
omega2 =3/5
F1 =1/3
F2 =1/5
Código.

pf=[m1f , m2f , delta1f , delta2f , k1f , k2f , mu1f , mu2f , omega1 , omega2 , F1 , F2]

p=[m1 , m2 , delta1 , delta2 , k1 , k2 , mu1 , mu2]

t_tot =50
t = np. linspace (0, t_tot , t_tot *20)
tmuestra =np. linspace (0 ,150 ,1000)
tf = np. linspace (110 , 170 , 1000)

y0nl = [1, 0, -1/2, 0]


y0f = [0.7 , 0, 0.1 , 0]

solnl = odeint ( NonLinearCoupledSprings , y0nl , t, args =(p ,))

solf= odeint ( ForcingCoupledSprings , y0f , tmuestra , args =(pf ,))

x1nl = solnl [: ,0]


v1nl = solnl [: ,1]
x2nl = solnl [: ,2]
v2nl = solnl [: ,3]

x12 = solf [: ,0]


v12 = solf [: ,1]
x22 = solf [: ,2]
v22 = solf [: ,3]

fig1 = plt. figure (1, figsize =(10 ,10) , )


plt. subplots_adjust (left=None , bottom =0.1 , right =None , top =0.9 , wspace =None ,
hspace =.7)

ax = fig1. add_subplot (321)


ax.plot(x1nl ,v1nl , color ='gold ')
ax. set_title ('Diagrama Fásico $x_1$ para el arreglo no lineal ')
ax. set_xlabel ('Posición [ $x_1$ ]')
ax. set_ylabel ('Velocidad [$v_1$ ]')
ax.grid(True)
ax. set_ylim ([ -2 ,2])
ax. set_xlim ([ -2 ,2])

bx = fig1. add_subplot (322)


bx.plot(x2nl ,v2nl , color ='y')
bx. set_title ('Diagrama Fásico $x_2$ para el arreglo no lineal ')
bx. set_xlabel ('Posición [ $x_2$ ]')
bx. set_ylabel ('Velocidad [$v_2$ ]')
bx.grid(True)
bx. set_ylim ([ -2 ,2])
bx. set_xlim ([ -2 ,2])

cx = fig1. add_subplot (323)


cx.plot(t,x1nl , color ='orange ')
cx. set_title ('Movimiento de $m_1$ ')
cx. set_xlabel ('Tiempo [$t$]')
cx. set_ylabel ('Posición [ $x_1$ ]')
cx.grid(True)
cx. set_ylim ([ -2 ,2])
cx. set_xlim ([0 ,50])
Código.

dx = fig1. add_subplot (324)


dx.plot(t,x2nl , color ='olivedrab ')
dx. set_title ('Movimiento de $m_2$ ')
dx. set_xlabel ('Tiempo [$t$]')
dx. set_ylabel ('Posición [ $x_2$ ]')
dx.grid(True)
dx. set_ylim ([ -2 ,2])
dx. set_xlim ([0 ,50])

ex = fig1. add_subplot (325)


ex.plot(t,x1nl , color ='darkorange ')
ex.plot(t,x2nl , color ='forestgreen ')
ex. set_title ('Movimiento de las dos masas con fuerza no lineal ')
ex. legend (["$x_1$ ", " $x_2$ "],loc=" lower right ")
ex. set_xlabel ('Tiempo [$t$]')
ex. set_ylabel ('Posición ')
ex.grid(True)
ex. set_ylim ([ -2 ,2])
ex. set_xlim ([0 ,50])

fx = fig1. add_subplot (326)


fx.plot(x1nl ,x2nl , color ='dimgray ')
fx. set_title ('$x_1$ vs $x_2$ ')
fx. set_xlabel ('Movimiento de $x_1$ ')
fx. set_ylabel ('Movimiento de $x_2$ ')
fx.grid(True)
fx. set_ylim ([ -1.5 ,1.5])
fx. set_xlim ([ -1.5 ,1.5])

# #######################################################################

fig2 = plt. figure (2, figsize =(10 ,10) , )


plt. subplots_adjust (left=None , bottom =0.1 , right =None , top =0.9 , wspace =None ,
hspace =.7)

ax2 = fig2. add_subplot (321)


ax2.plot(x12 ,v12 , color ='gold ')
ax2. set_title ('Diagrama Fásico $x_1$ para oscilaciones forzadas ')
ax2. set_xlabel ('Posición [$x_1$ ]')
ax2. set_ylabel ('Velocidad [ $v_1$ ]')
ax2.grid(True)
ax2. set_ylim ([ -1 ,1])
ax2. set_xlim ([ -1 ,1])

cx2 = fig2. add_subplot (322)


cx2.plot(x22 ,v22 , color ='y')
cx2. set_title ('Diagrama Fásico $x_2$ para oscilaciones forzadas ')
cx2. set_xlabel ('Posición [$x_2$ ]')
cx2. set_ylabel ('Velocidad [ $v_2$ ]')
cx2.grid(True)
cx2. set_ylim ([ -1.5 ,1.5])
cx2. set_xlim ([ -1.5 ,1.5])

ex2 = fig2. add_subplot (323)


ex2.plot(tmuestra ,x12 , color ='darkorange ')
ex2. set_title ('Movimiento de la masa 1 con oscilaciones forzadas ')
Código.

ex2. set_xlabel ('Tiempo [$t$]')


ex2. set_ylabel ('Posición ')
ex2.grid(True)
ex2. set_ylim ([ -2 ,2])
ex2. set_xlim ([0 ,150])

fx2 = fig2. add_subplot (324)


fx2.plot(tmuestra ,x22 , color ='forestgreen ')
fx2. set_title ('Movimiento de la masa 2 con oscilaciones forzadas ')
fx2. set_xlabel ('Tiempo [$t$]')
fx2. set_ylabel ('Posición ')
fx2.grid(True)
fx2. set_ylim ([ -2 ,2])
fx2. set_xlim ([0 ,150])

gx2 = fig2. add_subplot (325)


gx2.plot(tf ,x12 , color ='darkorange ')
gx2.plot(tf ,x22 , color ='forestgreen ')
gx2. set_title ('Movimiento de las dos masas con oscilaciones forzadas ')
gx2. legend ([" $x_1$ ", " $x_2$ "],loc=" lower right ")
gx2. set_xlabel ('Tiempo [$t$]')
gx2. set_ylabel ('Posición ')
gx2.grid(True)
gx2. set_ylim ([ -2 ,2])
gx2. set_xlim ([110 ,170])

hx2 = fig2. add_subplot (326)


hx2.plot(x12 ,x22 , color ='dimgray ')
hx2. set_title ('$x_1$ vs $x_2$ ')
hx2. set_xlabel ('Movimiento de $x_1$ ')
hx2. set_ylabel ('Movimiento de $x_2$ ')
hx2.grid(True)
Gráficas.

Fuerza de restitución no lineal

Oscilaciones forzadas
Discusión.

Se han presentado dos casos importantes dentro de la naturaleza del movimiento ondulatorio, dos
suposiciones mejor aproximadas a la realidad que el movimiento armónico simple, estas son, la
no linealidad de las fuerzas de restitución y la presencia de fuerzas externas que se traduce en
oscilaciones forzadas.
Para el primer caso se tienen los diagramas fásicos de x1 y x2, en donde el sistema no presenta
amortiguamiento, es decir, la energía siempre es constante y esto se puede observar claramente en
las dos primeras imágenes.
Asímismo se observa la naturaleza periódica de los dos movimientos , tanto de la masa uno como
de la masa dos y se observa también que la comparación de estos dos movimientos, son gobernados
por rectas en distintos puntos de un plano (x1 , x2 ).
El comportamiento del diagráma fásico en el que existen distintos elipses puede deberse a la no
linealidad del sistema.
En el segundo caso, se observan figuras un poco más caóticas que el caso anterior, las oscilaciones
forzadas hacen que el sistema mantenga su energía en constantes subidas y bajadas, es decir, que
los elipses de los diagramas fásicos pueden llegar a cero y pueden abandonar ese estado por un
aumento en la energía causado por la fuerza externa, tal como se observa en el diagrama fásico de
x2 .
En el caso de los movimientos puede verse una periodicidad en ambos movimientos e incluso
observarse que en los primeros instantes, no se mantiene ese movimiento periódico, dado que la
naturaleza de un sistema con oscilaciones forzadas, será periódico solo cuando el tiempo sea mucho
mayor que un factor dado por β1 , donde β es el factor de amortiguamiento.
Este sistema perdería energía por los amortiguamientos que se presentan, sin embargo la fuerza le
proporciona energía constantemente con cada oscilación.
En la gráfica de x1 vs x2 puede observarse que estos dos movimientos son algo desordenados, y que
en un tiempo finito cercano al inicial se comportarán distinto a un tiempo que tiende a infinito.

También podría gustarte