12
G g L a b θ Moteur Bâti Chariot Bielle x y O A B α β L θ O a = OA b = AB B (x, h) Ox α = ωt ω β -→ OA -→ AB x = a cos α + b cos β h = a sin α + b sin β h β

Pendule en référentiel non galiléen

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Frédéric Legrand Licence Creative Commons 1

Pendule en référentiel non galiléen

1. Référentiel en translation horizontale

1.a. Système mécanique

Le pendule pesant est en liaison pivot avec un chariot, lequel glisse en translationrectiligne sur un bâti. On suppose que le bâti constitue un référentiel galiléen. Le moteurlié au bâti entraîne en rotation une roue. Le chariot est lié à cette roue par une bielle.On a ainsi un système de type manivelle-bielle qui permet de convertir le mouvement derotation du moteur en mouvement de translation du chariot.

G

g

L

a

b

θ

Moteur

Bâti

Chariot

Bielle

x

y

O

A

B

α

β

On note L la distance entre le centre de gravité du pendule et son axe de rotation, θ sonangle avec la direction verticale. Soit un point O sur l'axe de rotation du moteur. Onnote a = OA la longueur de la manivelle et b = AB la longueur de la bielle. L'extrémitéB de celle-ci (liaison pivot avec le chariot) a pour coordonnées (x, h).

L'angle que fait la manivelle avec l'axe horizontal Ox est α = ωt, où ω est la vi-tesse angulaire de rotation du moteur. L'angle que fait la bielle avec cet axe est β. En

décomposant les vecteurs−→OA et

−→AB sur la base orthonormée, on obtient :

x = a cosα + b cos β (1)

h = a sinα + b sin β (2)

Remarque : sur la �gure ci-dessus, h est négatif.En éliminant l'angle β de ces équations on obtient :

Frédéric Legrand Licence Creative Commons 2

x = a cosα +√b2 − (h− a sinα)2 (3)

Voici deux exemples de courbe x(t) :

import numpy

from matplotlib.pyplot import *

def position(a,b,h,t):

alpha = 2*numpy.pi*t

return a*numpy.cos(alpha)+numpy.sqrt(b**2-numpy.power(h-a*numpy.sin(alpha),2))

figure()

N = 500

t = numpy.arange(N)*2.0/N

a=10

b=40

plot(t,position(a,b,0,t),label="h=0")

plot(t,position(a,b,-10,t),label="h=-10")

xlabel("t")

ylabel("x")

legend(loc="lower right")

grid()

0.0 0.5 1.0 1.5 2.0t

25

30

35

40

45

50

x

h=0h=-10

Lorsque h = 0 et b2 � a2, la courbe est très proche d'une sinusoïde. On a en e�etl'expression approchée suivante :

Frédéric Legrand Licence Creative Commons 3

x = b+ a cosα = b+ a cos(ω t) (4)

On utilisera cette expression pour la modélisation du pendule.

1.b. Équation di�érentielle du mouvement

Le référentiel lié au chariot est non galiléen. L'accélération d'entraînement dans ceréférentiel est :

ae =d2x

dt2= −aω2 cos(ω t) (5)

Les forces de pesanteur s'appliquent au centre de gravité G du pendule. Il en est de mêmedes forces d'inertie d'entraînement (pour un référentiel en translation). Soit m la massedu pendule et J son moment d'inertie par rapport à son axe de rotation. Le théorème dumoment cinétique appliqué, dans le référentiel du chariot, par rapport à l'axe de rotation,conduit à l'équation di�érentielle suivante :

Jd2θ

dt2+ ν

dt+mgL sin θ = Lmaω2 cos θ cos(ωt) (6)

On a introduit un frottement proportionnel à la vitesse angulaire, avec un coe�cient ν.Il faut ajouter à cette équation deux conditions initiales : θ(0) et θ̇(0).L'équation di�érentielle est non linéaire. Il est toutefois possible d'obtenir une équa-

tion linéaire en supposant que l'angle reste petit :

Jd2θ

dt2+ ν

dt+mgLθ = Lmaω2 cos(ωt) (7)

La solution analytique exacte de cette équation est connue. En revanche, l'équationcomplète non linéaire ne peut être résolue que par des calculs numériques, par exempleavec la méthode d'Euler.

Pour simpli�er l'étude on divise l'équation par J et on pose :

ω0 =

√mgL

J(8)

Il s'agit de la pulsation propre du pendule linéaire (petits angles), c'est-à-dire sa pulsationd'oscillation lorsque le chariot est immobile (ω = 0). Soit T la période correspondante.Il est intéressant de faire le changement de variable suivant pour le temps :

t′ =t

T=ω0

2πt (9)

Le temps t′ est sans dimensions. Pour faire le changement de variable, on utilise lesidentités suivantes :

1

dt=ω0

1

dt′(10)

1

dt2=(ω0

)2 1

dt′2(11)

On obtient ainsi l'équation di�érentielle

Frédéric Legrand Licence Creative Commons 4

d2θ

dt′2+

2πν

Jω0

dt′+ (2π)2 sin θ =

Lma

J

(2πω

ω0

)2

cos θ cos

ω0

2π t′)

(12)

Cette équation est adimensionnée, car les variables θ et t′ sont sans dimensions. Lorsqu'onrésout numériquement une équation du mouvement, on a toujours intérêt à la mettresous forme adimensionnée. La période des petites oscillations libres est T ′ = 1. On voitapparaître trois paramètres sans dimensions :

γ =2πν

Jω0

(13)

A =Lma

J(14)

f =ω

ω0

(15)

Voici �nalement l'équation di�érentielle à étudier :

d2θ

dt′2+ γ

dt′+ (2π)2 sin θ = A(2π)2f 2 cos θ cos (2π f t′) (16)

1.c. Intégration numérique

Pour résoudre numériquement cette équation avec les deux conditions initiales, ilfaut la mettre sous la forme d'un système di�érentiel du premier ordre, en introduisantla vitesse angule du pendule, que l'on notera va :

dt′= va (17)

dvadt′

= −γva − (2π)2 sin θ − A(2π)2f 2 cos θ cos(2π f t) (18)

Le système est dé�ni par une fonction (on étudie tout d'abord un système sans frotte-ment) :

import math

import scipy.integrate

gamma = 0.0

A = 0.3

f = 1.0

w02 = (2*math.pi)**2

def systeme(Y,t):

return [Y[1],-w02*math.sin(Y[0])-gamma*Y[1]-A*w02*f**2*math.cos(Y[0])*math.cos(2*math.pi*f*t)]

On �xe une condition initiale :

Yi = [math.pi*0.5,0.0]

Frédéric Legrand Licence Creative Commons 5

On calcule les instants pour lesquels on veut les valeurs approchées :

T = 100.0

t = numpy.arange(start=0,stop=T,step=0.01)

On �xe la tolérance absolue et la tolérance relative :

atol=1e-8

rtol=1e-8

On fait l'intégration numérique :

tab_y = scipy.integrate.odeint(systeme,Yi,t,rtol=rtol,atol=atol)

yt = tab_y.transpose()

theta = yt[0]

va = yt[1]

figure()

plot(t,theta)

xlabel("t")

ylabel("theta")

axis([0,20,-2,2])

grid()

Pour analyser le mouvement, on peut faire une analyse spectrale :

Frédéric Legrand Licence Creative Commons 6

import numpy.fft

tfd = numpy.fft.fft(theta)

N = theta.size

spectre = numpy.absolute(tfd)/N

freq = numpy.arange(N)*1.0/T

figure()

plot(freq,spectre)

xlabel("freq")

ylabel("theta")

axis([0,5,0,spectre.max()])

On peut aussi représenter la trajectoire dans l'espace des phases. La dimension de l'espacedes phases est égale au nombre de degrés de libertés du système (au sens de système dupremier ordre). Ici, il y a trois degrés de liberté (θ, va, α).

On peut écrire le système en faisant apparaître explicitement le degré de libertécorrespondant à la rotation de la manivelle :

dt′= va (19)

dt′= 2πf (20)

dvadt′

= −γva − (2π)2 sin θ − A(2π)2f 2 cos θ cos(α) (21)

Frédéric Legrand Licence Creative Commons 7

La représentation graphique (à deux dimensions) de la trajectoire dans l'espace desphases à 3 dimensions n'est pas faisable. Une première solution est de représenter laprojection sur le plan (θ, va) :

figure()

plot(theta,va)

xlabel("theta")

ylabel("va")

grid()

Une représentation simpli�ée est possible en remarquant que la variable α est de période2π. En trace alors dans le plan de projection seulement les points pour lesquels α estmultiple de 2π. Cette représentation est appelée section de Poincaré.

t = numpy.arange(start=0,stop=T,step=1.0/f)

tab_y = scipy.integrate.odeint(systeme,Yi,t,rtol=rtol,atol=atol)

yt = tab_y.transpose()

theta = yt[0]

va = yt[1]

figure()

plot(theta,va,".")

xlabel('theta')

ylabel('va')

grid()

Frédéric Legrand Licence Creative Commons 8

Les points se répartissent sur une courbe fermée, et remplissent cette courbe lorsque ttend vers l'in�ni. Il s'agit d'un mouvement quasipériodique.

Voyons ce qu'il se passe si l'on augmente l'amplitude A. Pour cela, il faut augmenterla longueur de la manivelle.

A = 2.0

T = 100.0

t = numpy.arange(start=0,stop=T,step=0.01)

Yi = [math.pi*0.5,0.0]

tab_y = scipy.integrate.odeint(systeme,Yi,t,rtol=rtol,atol=atol)

yt = tab_y.transpose()

theta = yt[0]

va = yt[1]

figure()

plot(t,theta)

xlabel("t")

ylabel("theta")

grid()

Frédéric Legrand Licence Creative Commons 9

On obtient un mouvement chaotique, au cours duquel le pendule fait des tours complets,dans un sens puis dans l'autre. Une caractéristique importante d'un mouvement chao-tique est la très grande sensibilité aux conditions initiales. Refaisons le calcul avec unangle initial légèrement di�érent :

A = 2.0

T = 100.0

t = numpy.arange(start=0,stop=T,step=0.01)

Yi = [math.pi*0.5+1e-3,0.0]

tab_y = scipy.integrate.odeint(systeme,Yi,t,rtol=rtol,atol=atol)

yt = tab_y.transpose()

theta = yt[0]

va = yt[1]

plot(t,theta)

xlabel("t")

ylabel("theta")

grid()

Frédéric Legrand Licence Creative Commons 10

Au début, les deux mouvements sont très proches, mais l'écart grandit très vite. On obient�nalement deux trajectoires complètement di�érentes. En ce sens, l'évolution d'un sys-tème chaotique n'est pas prévisible bien que son équation di�érentielle soit déterministe.Il faudrait une précision in�nie sur la condition initiale pour prévoir l'état du système àun instant t quelconque, ce qui est impossible en pratique.

Voyons l'analyse spectrale de ce mouvement chaotique :

tfd = numpy.fft.fft(theta)

N = theta.size

spectre = numpy.absolute(tfd)/N

freq = numpy.arange(N)*1.0/T

figure()

plot(freq,spectre)

xlabel("freq")

ylabel("theta")

axis([0,1,0,spectre.max()])

Frédéric Legrand Licence Creative Commons 11

Un mouvement chaotique a un spectre continu. Voyons la section de Poincaré :

t = numpy.arange(start=0,stop=T,step=1.0/f)

tab_y = scipy.integrate.odeint(systeme,Yi,t,rtol=rtol,atol=atol)

yt = tab_y.transpose()

theta = yt[0]%(2*math.pi)-math.pi

va = yt[1]

figure()

plot(theta,va,".")

xlabel('theta')

ylabel('va')

grid()

Frédéric Legrand Licence Creative Commons 12

Pour un mouvement chaotique, les points de la section de Poincaré se répartissent surune surface, et non pas sur une courbe.