Pendule.mws

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);

[Plot]

Equation du mouvement

Position de la table vibrante suivant y

> y2:=A*cos(omega*t);

y2 := A*cos(omega*t)

et position du pendule

> x1:=l*sin(theta(t)); y1:=l*cos(theta(t))+y2;

x1 := l*sin(theta(t))

y1 := l*cos(theta(t))+A*cos(omega*t)

accélération du pendule suivant x et y

> g1:=diff(x1,t$2); g2:=diff(y1,t$2);

g1 := -l*sin(theta(t))*diff(theta(t), t)^2+l*cos(theta(t))*diff(theta(t), `$`(t, 2))

g2 := -l*cos(theta(t))*diff(theta(t), t)^2-l*sin(theta(t))*diff(theta(t), `$`(t, 2))-A*cos(omega*t)*omega^2

d'où l'accélération tangentielle

> gt:=g1*cos(theta(t))-g2*sin(theta(t));gt:=simplify(%);

gt := (-l*sin(theta(t))*diff(theta(t), t)^2+l*cos(theta(t))*diff(theta(t), `$`(t, 2)))*cos(theta(t))-(-l*cos(theta(t))*diff(theta(t), t)^2-l*sin(theta(t))*diff(theta(t), `$`(t, 2))-A*cos(omega*t)*omeg...

gt := l*diff(theta(t), `$`(t, 2))+sin(theta(t))*A*cos(omega*t)*omega^2

La seule force suivant cette direction tangentielle est la projection de la force de gravité

> Ft:=m*g*sin(theta(t));

Ft := m*g*sin(theta(t))

Equation du mouvement F=m*G

> m*gt=Ft;EQ:=%:

m*(l*diff(theta(t), `$`(t, 2))+sin(theta(t))*A*cos(omega*t)*omega^2) = m*g*sin(theta(t))

Equation différentielle à résoudre

> EQ:=EQ/m;

EQ := l*diff(theta(t), `$`(t, 2))+sin(theta(t))*A*cos(omega*t)*omega^2 = g*sin(theta(t))

Conditions initiales (on lache le pendule avec un petit angle  sans vitesse initiale)

> CI:=theta(0)=Pi/20, D(theta)(0)=0;

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;

l := .1

g := 10

A := 0

omega := 0

EQ1 := .1*diff(theta(t), `$`(t, 2)) = 10*sin(theta(t))

Résolution numérique

> sol1 := dsolve({EQ1,CI}, theta(t), numeric, output=listprocedure);

sol1 := [t = proc (t) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; data := module () local Data; export Get, Set; end module; solnproc :=...

Trace de la solution theta(t)

> odeplot(sol1, [t, theta(t)], 0..10, numpoints=360);

[Plot]

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]);

nf := 100

dt := 1/10

[Plot]

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;

l := .1

g := 9.8

A := 0.1e-1

omega := 150

EQ2 := .1*diff(theta(t), `$`(t, 2))+225.00*sin(theta(t))*cos(150*t) = 9.8*sin(theta(t))

résolution numérique

> sol2 := dsolve({EQ2,CI}, theta(t), numeric, output=listprocedure);

sol2 := [t = proc (t) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; data := module () local Data; export Get, Set; end module; solnproc :=...

Trace de la solution

> odeplot(sol2, [t, theta(t)], 0..10, numpoints=360);

[Plot]

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]);

[Plot]

Cas d'un forcage basse frequence: le pendule tombe

Parametres

> l:=0.1; g:=9.8; A:=0.01; omega:=90; EQ3:=EQ;

l := .1

g := 9.8

A := 0.1e-1

omega := 90

EQ3 := .1*diff(theta(t), `$`(t, 2))+81.00*sin(theta(t))*cos(90*t) = 9.8*sin(theta(t))

Résolution numérique

> sol3 := dsolve({EQ3,CI}, theta(t), numeric, output=listprocedure);

sol3 := [t = proc (t) local res, data, solnproc; option `Copyright (c) 1993 by the University of Waterloo. All rights reserved.`; data := module () local Data; export Get, Set; end module; solnproc :=...

Trace de la solution

> odeplot(sol3, [t, theta(t)], 0..10, numpoints=120);

[Plot]

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]);

nf := 100

dt := 1/10

[Plot]

>

FIN