Pendule inversé sur une table oscillante
M. Buffat, UFR de mécanique, UCB Lyon I
Introduction
Un pendule de masse m est fixé au bout d'une tige rigide de longueur l (sans masse). L'autre extrémité de la tige est fixée sur une table vibrante verticalement, dont le mouvement est A*cos(omega*t)
On se propose d'étudier le mouvement avec Maple en fonction de la fréquence de vibration omega
Initialisation
> | restart:interface( warnlevel=0 ):with(plots):with(plottools):
# fonction de trace du systeme TracePendule:=proc(t,angle,l,A,omega) local x1,y1,y2,tige,boule,anim; y2:=A*cos(omega*t); x1:=l*sin(angle); y1:=l*cos(angle)+y2; tige:=curve([[0,y2],[x1,y1]],color=green,thickness=2); boule:=disk([x1,y1], 0.005, color=red); tab:=rectangle([-0.01,y2-0.01],[0.01,y2],color=black): anim:=display(tige,boule,tab); end proc: display(TracePendule(0,Pi/10,0.1,0.01,150),scaling=constrained,axes=none); |
Equation du mouvement
Position de la table vibrante suivant y
> | y2:=A*cos(omega*t); |
et position du pendule
> | x1:=l*sin(theta(t)); y1:=l*cos(theta(t))+y2; |
accélération du pendule suivant x et y
> | g1:=diff(x1,t$2); g2:=diff(y1,t$2); |
d'où l'accélération tangentielle
> | gt:=g1*cos(theta(t))-g2*sin(theta(t));gt:=simplify(%); |
La seule force suivant cette direction tangentielle est la projection de la force de gravité
> | Ft:=m*g*sin(theta(t)); |
Equation du mouvement F=m*G
> | m*gt=Ft;EQ:=%: |
Equation différentielle à résoudre
> | EQ:=EQ/m; |
Conditions initiales (on lache le pendule avec un petit angle sans vitesse initiale)
> | CI:=theta(0)=Pi/20, D(theta)(0)=0; |
Cas sans vibration: le pendule oscille régulierement
Parametres
> | l:=0.1; g:=10; A:=0; omega:=0; EQ1:=EQ; |
Résolution numérique
> | sol1 := dsolve({EQ1,CI}, theta(t), numeric, output=listprocedure); |
Trace de la solution theta(t)
> | odeplot(sol1, [t, theta(t)], 0..10, numpoints=360); |
Animation
> | nf:=100; dt:=1/10;
for i from 0 to nf do T:=i*dt; angle:=rhs(sol1[2](T)); anim[i]:=TracePendule(T,angle,l,A,omega); end: display([seq(anim[i],i=0..nf)],insequence=true,scaling=constrained,axes=none, view=[-1.2*l..1.2*l, -1.2*l..1.2*l]); |
Cas avec un forcage haute frequence: le pendule oscille verticalement sans tomber !!!
Parametres
> | l:=0.1; g:=9.8; A:=0.01; omega:=150; EQ2:=EQ; |
résolution numérique
> | sol2 := dsolve({EQ2,CI}, theta(t), numeric, output=listprocedure); |
Trace de la solution
> | odeplot(sol2, [t, theta(t)], 0..10, numpoints=360); |
Animation
> | nf:=100: dt:=1/10:
for i from 0 to nf do T:=i*dt; angle:=rhs(sol2[2](T)); anim[i]:=TracePendule(T,angle,l,A,omega); end: display([seq(anim[i],i=0..nf)],insequence=true,scaling=constrained,axes=none, view=[-1.2*l..1.2*l, -1.2*l..1.2*l]); |
Cas d'un forcage basse frequence: le pendule tombe
Parametres
> | l:=0.1; g:=9.8; A:=0.01; omega:=90; EQ3:=EQ; |
Résolution numérique
> | sol3 := dsolve({EQ3,CI}, theta(t), numeric, output=listprocedure); |
Trace de la solution
> | odeplot(sol3, [t, theta(t)], 0..10, numpoints=120); |
Animation
> | nf:=100; dt:=1/10;
for i from 0 to nf do T:=i*dt; angle:=rhs(sol3[2](T)); anim[i]:=TracePendule(T,angle,l,A,omega); end: display([seq(anim[i],i=0..nf)],insequence=true,scaling=constrained,axes=none, view=[-1.2*l..1.2*l, -1.2*l..1.2*l]); |
> |
FIN