Practica 2
Oscilaciones con 1 grado de libertad
Catedra de Mecanica. 16 de Noviembre de 2004.
Practicas de Mecanica Computacional
1. Oscilaciones forzadas con amortiguamiento
> restart; > with(plots):
Warning, the name changecoords has been redefined > with(plottools):
Warning, the name arrow has been redefined
Se define la ecuacion diferencial y se asigna a oscilforc:
> oscilforc:=m*diff(x(t),t$2)+c*diff(x(t),t)+k*x(t)=q*sin(Omega *t); := oscilforc m + + = d d2 t2x t( ) c d d tx t( ) k ( )x t qsin(Ωt)
Con la instruccion dsolve se obtiene la solucion general de la ecuacion diferencial:
> dsolve(oscilforc); ( ) x t = + + e −(c− c − ) 2 4 k m t 2 m _C2 e −(c+ c − ) 2 4 k m t 2 m _C1 q ((k−Ω ) − ) 2 m sin(Ωt) Ωcos(Ωt c) + + Ω4 m2 (c2−2 k m)Ω2 k2
Con la instruccion assume se impone la condicion de que el amortiguamiento sea subcritico:
> assume(c**2<4*k*m);
A solgen se le asigna la solucion general de la ecuacion diferencial en la hipotesis de
amortiguamiento subcritico (observese que en este caso el programa aplica la formula de Euler y expresa la solucion en terminos del seno y del coseno)
> solgen:=dsolve(oscilforc); solgen x t( ) e − c~ t 2 m~ sin −c~ + 2 4 k~ m~ t 2 m~ _C2 = := e − c~ t 2 m~ cos −c~ + 2 4 k~ m~ t 2 m~ _C1 ((− +k~ Ω2m~)sin(Ωt)+c~Ωcos(Ωt q)) + + Ω4 m~2 (−2 k~ m~+c~2)Ω2 k~2 + −
Observese como las variables m, c y k, a las que se les ha impuesto una restriccion mediante assume en lo sucesivo se denotan seguidas de una tilde: m~, c~ y k~
En la siguiente instruccion se define la función xtran aplicando la instruccion unapply, con el argumento t para indicar que es funcion del tiempo, al lado derecho de la igualdad (operador rhs) que se ha asignado anteriormente a solgen:
> xtran:= unapply(rhs(solgen),t):
A continuacion se define la funcion correspondiente a la solucion de regimen permanente. Para ello, con op(3,xtran(t)), se selecciona el tercer sumando de xtran(t), y con unapply(*,t) se establece que la funcion depende del tiempo:
> xperm:=unapply(op(3,xtran(t)),t):
---Aplicacion al ejercicio de practicas 15: Los datos del oscilador son: m=400, c=368.4136, k=100000
Los datos de la fuerza externa: q=3158.2734, Omega=4*Pi
y los dos conjuntos de condiciones iniciales: a) x0=0.08, v0=0
b) x0=0, v0=1
---Se vuelve a resolver la ecuacion diferencial pero considerando ahora en dsolve las correspondientes condiciones iniciales. En solejA se asigna la solucion que se obtiene considerando el conjunto (a) de condiciones iniciales:
> solejA:=dsolve({oscilforc,x(0)=0.08,D(x)(0)=0},x(t)):
y se define xA como la funcion del tiempo correspondiente a la solucion solejA empleando otra vez la instrucción unapply:
> xA:= unapply(rhs(solejA),t):
Analogamente, en solejB se asigna la solucion que resulta de considerar el conjunto (b) de condiciones iniciales:
> solejB:=dsolve({oscilforc,x(0)=0.0,D(x)(0)=1.0},x(t)):
y en xB se define la funcion del tiempo correspondiente a esta solucion:
> xB:= unapply(rhs(solejB),t):
A continuacion se particularizan las funciones xA y xB para los valores numericos del enunciado. Para ello se sustituyen, mediante el operador subs, los valores de m, c, k, q y Omega en xA(t) y con el resultado obtenido se define una nueva funcion del tiempo que llamamos xanum y xbnum, respectivamente:
> xanum:=unapply(subs(m=400,c=368.4136,k=100000,q=3158.2734,Ome ga=4*Pi,xA(t)),t):
> xbnum:=unapply(subs(m=400,c=368.4136,k=100000,q=3158.2734,Ome ga=4*Pi,xB(t)),t):
Finalmente, con la instruccion plot se dibujan las ecuaciones horarias xanum(t) y xbnum(t), pudiendo comprobar que si bien los regimenes transitorios correspondientes a ambas soluciones son diferentes, el regimen permanente no depende de las condiciones iniciales.
–0.1 –0.05 0 0.05 0.1 0.15 1 2 3 4 5 6 7 8 t > a:=animatecurve(xanum(t),t=0..8,numpoints=200,frames=50,color =blue,thickness=3): > b:=animatecurve(xbnum(t),t=0..8,numpoints=200,frames=50,color =red,thickness=3): > display(a,b): > dibu:=proc(s) > r1:=rectangle([-1,-10],[0,10],color=black): > r2:=rectangle([0,-1],[s,1],color=blue): > d1:=disk([s,0],3,color=red): > display([r1,r2,d1]): > end:
Warning, ‘r1‘ is implicitly declared local to procedure ‘dibu‘ Warning, ‘r2‘ is implicitly declared local to procedure ‘dibu‘ Warning, ‘d1‘ is implicitly declared local to procedure ‘dibu‘ > vals:=seq(xanum(i*2/50),i=0..50):
> fotos:=map(u->dibu(u*500),[vals]):
–10 0 10
–60 –40 –20 20 40 60
Para dibujar las ecuaciones horarias no es necesario definir una funcion mediante unapply. Lo que si hay que hacer es definir a priori los valores numericos:
> mp:=400:cp:=368.4136:kp:=100000:fp:=3158.2734:omp:=4*Pi:x0p:= 0.08:v0p:=0:
> solpru:=dsolve({mp*diff(x(t),t$2)+cp*diff(x(t),t)+kp*x(t)=fp* sin(omp*t),x(0)=x0p,D(x)(0)=v0p},x(t)):
–0.1 –0.05 0 0.05 0.1 0.15 1 2 3 4 5 6 7 8 t
2. Frecuencia y Amplitud de Resonancia
Para hacer el calculo de la frecuencia y de la amplitud de resonancia expresamos la solución de regimen permanente como el producto de la amplitud A por una funcion coseno con un cierto desfase a. Dicha solucion la asignamos a la funcion del tiempo xperm2:
> xperm2:= t -> A*cos(Omega*t+alpha);
:=
xperm2 t→Acos(Ωt+α)
Para obtener la expresion de A y a identificamos los valores de las funciones xperm (definida mas arriba) y xperm2 en los instantes de tiempo correspondientes a t=0 yt=p/2W:
> ec1:=xperm(0)=xperm2(0); := ec1 − c~Ωq = + + Ω4 m~2 (−2 k~ m~+c~2)Ω2 k~2 Acos( )α > ec2:=xperm(Pi/(2*Omega))=xperm2(Pi/(2*Omega)); := ec2 − (− +k~ Ω ) = 2 m~ q + + Ω4 m~2 (−2 k~ m~+c~2)Ω2 k~2 −Asin( )α
Resultando (a la amplitud de regimen permanente la denominaremos Aux1 para manipularla posteriormente): > alpha:=arctan(lhs(ec2)/lhs(ec1)); := α arctan− +k~ Ω 2 m~ c~Ω > Aux1:=simplify(solve(ec1,A)); := Aux1 − q c~Ω k~ − + + 2 2 k~Ω2m~ Ω2c~2 Ω4m~2 Ω2 c~2 − + + k~2 2 k~Ω2m~ Ω2c~2 Ω4m~2
La solucion obtenida de la amplitud Aux1 la simplificamos usando la instruccion simplify con la opcion symbolic, para obtener una expresion similar a la de la ecuacion (3.22) del libro de apuntes: > Aux2:=simplify(Aux1,symbolic); := Aux2 − q − + + k~2 2 k~Ω2m~ Ω2c~2 Ω4m~2
La expresion de la amplitud de resonancia la obtendremos expresando la amplitud de regimen permanente Aux2 en funcion de la frecuencia W de la fuerza externa:
> Amp:=unapply(Aux2,Omega);
:=
Amp Ω→− q
− + +
k~2 2 k~Ω2m~ Ω2c~2 Ω4m~2
y calculando su maximo. Para ello, derivamos respecto de W empleando la instruccion diff(Amp(Omega),Omega), igualando a cero,
> wres_eq:=diff(Amp(Omega),Omega)=0:
La ecuacion anterior se resuelve con la instruccion solve:
> wres_sol:=solve(wres_eq,Omega); := wres_sol 0, 4 k~ m~−2 c~ , 2 2 m~ − − 4 k~ m~ 2 c~2 2 m~ De las tres soluciones obtenidas, la que tiene sentido fisico es la segunda:
> wres:=wres_sol[2];
:=
wres 4 k~ m~−2 c~
2
2 m~
A continuacion podemos hacer una manipulacion puramente "cosmetica" para conseguir la expresion (3.25) del libro de apuentes:
> expand(wres**2)**(1/2); − k~ m~ c~2 2 m~2
La amplitud de resonancia se obtiene sustituyendo la frecuencia de resonancia wres en la expresion de la funcion Amp:
> A_reson:=Amp(wres):
Esta expresion la simplificamos:
> A_reson:=simplify(sqrt(factor(Amp(wres)**2)),symbolic);
:=
A_reson 2 q m~ c~ −c~2+4 k~ m~
Con objeto de representar la amplitud en funcion de la frecuencia y del amortiguamiento se adimensionaliza la funcion definida anteriormente Amp(Omega) en terminos de la fraccion de amortiguamiento critico x y de la frecuencia natural w. Para ello se sustituye con la instruccion subs, el parametro c por sqrt(4*k*m*xi),
> A_aux1:=subs(c=sqrt(4*k*m*xi),Amp(Omega)); := A_aux1 − q − + + k~2 2 k~Ω2m~ 4Ω2k~ m~ξ Ω4m~2 > A_aux2:=sqrt(A_aux1**2*(k/q)**2):
se sustituye el parametro k por omega**2*m,
> A_aux3:=simplify(subs(k=omega**2*m,A_aux2)); := A_aux3 ω 4 − + + ω4 2ω2Ω2 4Ω2ω2ξ Ω4
y finalmente se sustituye b=W/w mediante la instruccion subs(Omega=beta*omega,A_aux3)
> A_aux4:=simplify(subs(Omega=beta*omega,A_aux3));
:=
A_aux4 1
− + +
1 2β2 4β2ξ β4
Para dibujar las curvas se define la funcion f(x,b) a partir de la expresion asignada a A_aux4:
> f:=unapply(A_aux4,beta);
:=
f β→ 1
− + +
1 2β2 4β2ξ β4
y se consideran los casos correspondientes a las fracciones de amortiguamiento critico x=0.0, x=0.05, x=0.20, x=0.50, x=0.70 y x=1.0 > f_00:=subs(xi=0.0,f(beta)): > f_05:=subs(xi=0.05,f(beta)): > f_20:=subs(xi=0.20,f(beta)): > f_50:=subs(xi=0.50,f(beta)): > f_70:=subs(xi=0.70,f(beta)): > f_100:=subs(xi=1.0,f(beta)):
Las seis funciones se dibujan en un mismo grafico, agrupandolas entre llaves, con la instruccion plot
> plot({f_00(beta),f_05(beta),f_20(beta),f_50(beta),f_70(beta), f_100(beta)},beta=0..3,y=0..10); 0 2 4 6 8 10 y 0.5 1 1.5 2 2.5 3 beta
3. Respuesta a cargas arbitrarias definidas "a trozos"
Tambien es muy sencillo imponer cargas arbitrarias definidas "a trozos". Consideremos la accion de tres cargas triangulares:
trian1: actua durante un periodo de tiempo que es aproximadamente la mitad del periodo propio del oscilador
trian2: actua durante un periodo de tiempo aproximadamente cinco veces el periodo propio trian3: actua durante un periodo de tiempo veinte veces superior al del oscilador
> Tprop:=evalf(2*Pi/sqrt(kp/mp)); := Tprop 0.3973835307 > triang1:=PIECEWISE([1000*t, t <= Tprop/4],[200-1000*t, t <= Tprop/2],[0, t>Tprop/2]); := triang1 1000 t t≤0.09934588268 − 200 1000 t t≤0.1986917654 0 0.1986917654<t > triang2:=PIECEWISE([100*t, t <= 10*Tprop/4],[200-100*t, t <=
> triang2:=PIECEWISE([100*t, t <= 10*Tprop/4],[200-100*t, t <= 5*Tprop],[0, t>5*Tprop]); := triang2 100 t t≤0.9934588268 − 200 100 t t≤1.986917654 0 1.986917654<t > triang3:=PIECEWISE([25*t, t <= 10*Tprop],[200-25*t, t <= 20*Tprop],[0, t>20*Tprop]); := triang3 25 t t≤3.973835307 − 200 25 t t≤7.947670614 0 7.947670614<t > plot([triang1,triang2,triang3],t=0..5,linestyle=1, thickness=3); 0 20 40 60 80 100 1 2 3 4 5 t > soltrian1:=dsolve({mp*diff(x(t),t$2)+cp*diff(x(t),t)+kp*x(t)= triang1,x(0)=0.0,D(x)(0)=0},x(t)): > soltrian2:=dsolve({mp*diff(x(t),t$2)+cp*diff(x(t),t)+kp*x(t)= triang2,x(0)=0.0,D(x)(0)=0},x(t)): > soltrian3:=dsolve({mp*diff(x(t),t$2)+cp*diff(x(t),t)+kp*x(t)= triang3,x(0)=0.0,D(x)(0)=0},x(t)): > plot([rhs(soltrian1),rhs(soltrian2),rhs(soltrian3)],t=0..10);
–0.001 –0.0005 0 0.0005 0.001 2 4 6 8 10 t > > > > >
4. Ejercicio propuesto
Para el oscilador cuyas constantes se han empleado a lo largo de la practica (m=400 kg,
c=368.4136, k=100000) obtener y representar la respuesta para tres cargas escalon de valor F=1, que comienzan a actuar en t=0, y que se aplican durante 0.2, 10 y 15 segundos respectivamente.