TP4 : Le Brachistochrone¶

Le Brachistochrone (temps le plus court en grec ancien) est le nom donné à une expérience qui permet de montrer que le chemin le plus rapide n'est pas toujours celui que l'on croît ! Nous avons repris les images d'une expérience réalisée à l'EPFL en Suisse. L'expérience a été filmée avec une caméra rapide avec 940 images par seconde.

ImageBrachistochrone

Les boules partent au même moment avec une vitesse initiale nulle. Après avoir constaté l'ordre d'arrivée des boules, on souhaite analyser plus en détail cette expérience:

  • Tout d'abord on va étudier le déplacement d'une boule roulant sur un plan incliné (boule blanche). On va comparer cette expérience à un modèle théorique.
  • Ensuite, on étudiera chaque trajectoire et on calculera sa longueur. On estimera ainsi la vitesse moyenne de chaque boule entre le point de départ et le point d'arrivée.

Note : Pour ce TP, il sera nécessaire d'importer les bibliothèques suivantes :numpy, matplotlib.pyplot et imageio

Mouvement d'une boule sur un plan incliné. Boule blanche¶

On ne s'intéresse, dans un premier temps, qu'à la boule blanche qui est placée sur le plan incliné. En négligeant la contribution des forces de frottement mais en tenant compte de l'inertie de la boule, il est possible de montrer que la distance horizontale parcourue $x(t)$ évolue comme :

$$x= A t^2, \quad A = K g \cos (\alpha) \sin (\alpha)$$

où $g=9.81 m/s^2$ est l’accélération de la gravité, $\alpha$ est l’angle entre le plan incliné et l’horizontale, et $t$ est le temps compté depuis le lâcher de la boule.

Nous allons calculer la valeur de $K$ qui permet d'approcher au mieux les mesures de l'expérience.

1) Lisez l’image brachistochroneSolo.png avec imread et affichez-la dans une fenêtre graphique avec imshow.

2) En survolant avec votre souris l'image, relevez les coordonnées en pixel de la base de la plaque en bois qui nous sert d'étalon. La base du triangle est indiquée par la flèche rouge sur la figure de l'énoncé. Notez les valeurs relevées dans le script et déduisez-en taillepix la taille d’un pixel de l’image en mètres, sachant que la largeur de la plaque en bois vaut $L=0.80m$.

In [ ]:
# La ligne magique ""%matplotlib auto" ne sert que pour les notebook jupyter pour activer les plots interactifs.
# Elle est inutile sous Spyder.
# %matplotlib auto
# Importation des bibliothèques utiles pour le TP.
import numpy as np
import matplotlib.pyplot as plt
import imageio.v3 as imageio
## Partie I. 
# Mouvement d'une boule sur un plan incliné
# Paramètres du problème
g = 9.81
fps = 940 # Nombre d'images par seconde (frame per sec)
larg_sousim_pix = 1280 # nombre de pixels dans la direction X pour une image 
L = 0.8   # largeur de la base de la plaque en metres

# Réponse 

3) Pour construire l'image multiple 'brachistochrone9.png', nous avons retenu 9 images sur les 649 images du film. Cette image multiple de 2160x3840 pixels est constituée de 9 sous images de 720x1280 pixels. Le temps défile en parcourant les images du haut en bas puis de gauche à droite. Affichez l'image 'brachistochrone9.png' dans une nouvelle figure. A l'aide de plt.ginput, mesurez (en pixels) sur l'image les positions horizontales aux différents instants de la boule blanche. On appelle $x(t)$ la distance horizontale de la boule aux temps t successifs. La première image de la boule correspond au point $x=0$. Utiliser la taille d’un pixel calculée à la question 2, et si besoin la taille des sous-images pour en déduire les 9 valeurs successives de $x(t)$ en mètres. Les lignes de codes sont données mais il faut en comprendre la logique.

In [ ]:
# Question 3   
plt.figure(2)
brac9 = imageio.imread('brachistochrone9.png')
plt.imshow(brac9)
plt.show()

# Version sophistiquée de saisie des coordonnées avec un test sur l'existence du fichier
import os
if os.path.exists('coordonnees.dat'):
    print('Je relis les coordonnées dans le fichier coordonnees.dat')
    coord = np.loadtxt('coordonnees.dat')
else :
    print('Saisir les coordonnées sur la figure')
    coord = np.array(plt.ginput(9,40.0)) #permet de recuperer les coordonnees de la balle blanche.
    np.savetxt('coordonnees.dat',coord)

xpixel = coord[:,0] # On extrait dans xpixel la première colonne de coord

# On soustrait la largeur de la sous-image pour les sous images des col 2 et 3
xpixel[3:6] = xpixel[3:6] - larg_sousim_pix
xpixel[6:9] = xpixel[6:9] - 2*larg_sousim_pix

xbr = (xpixel - xpixel[0])*taillepix # On soustrait la premiere valeur pour translater le repere. 
                                     # On convertit les pixels en metres.

4) Les images sont retenues toutes les 81 images. Le film est pris à 940 images par seconde. Construisez le tableau tvec qui contient les valeurs successives des temps de chacune des images sur l'image multiple. Ce tableau a 9 éléments: le nombre de prises de vue selectionnées. Pour la première image on fixe $t=0$.

In [ ]:
# Réponse 

5) Tracez sur une nouvelle figure, la courbe de $x$ (en mètres) en fonction de $t$ (en secondes). Annotez votre graphique : label de la courbe et axes, mettre les unités.

In [ ]:
# Réponse 

Nous allons maintenant comparer ce graphique expérimental avec le modèle théorique

6) A l'aide de l'image brachistochroneSolo.png, en mesurant la hauteur $H$, trouvez l'angle $\alpha$ en radians que fait le plan incliné avec l'horizontale.

In [ ]:
# Réponse 

7) On choisit une première valeur test de $K=K_{test}=0.45$. Superposez la courbe expérimentale avec la formule théorique (avec $K_{test}$). Ajoutez une légende. Etes-vous satisfait de ce résultat?

In [ ]:
# Réponse 

8) Pour quantifier l'erreur entre les courbes expérimentale et théorique pour $K_{test}$, on la calcule au sens des moindres carrés :

$$ E= \sqrt{ \sum_{i=1}^{9} (x^{exp}_i - x^{test}_i)^2 }$$

Que vaut $E$ pour $K_{test}$?

In [ ]:
# Réponse 

Amélioration du modèle : On veut maintenant voir quelle valeur de $K$ permet d'approcher au mieux la courbe expérimentale au sens des moindres carrés.

9) Faire varier $K$ entre $0.25$ et $0.50$, avec un pas de $0.005$. Tracer l'erreur $E$ en fonction de $K$, et identifier la valeur optimale $K_{opt}$ qui permet de minimiser l'erreur au sens des moindres carrés.

In [ ]:
# Réponse 

10) Superposer la courbe expérimentale avec la formule théorique obtenue avec $K_{opt}$. Ajouter une légende. La théorie donne $K_{theo}=5/14$. Quel est l'écart entre $K_{opt}$ et $K_{theo}$?

Pensez-vous que cet écart entre dans les incertitudes de mesure?

In [ ]:
# Réponse 

Étude des trajectoires et des vitesses moyennes des boules blanche, rouge et jaune.¶

Relevé des trajectoires¶

11) Sur l'image brachistochroneSolo.png à l'aide de la fonction ginput récupérez les coordonnées des tracés blanc, rouge et jaune. Superposez-les sur l'image

In [ ]:
# Réponse 

12) En plaçant le centre $O$ d'un système cartésien $(0,\vec{x},\vec{y})$ au point de départ des trajectoires, effectuez le changement de repère nécessaire et tracez dans une nouvelle figure les courbes $y(x)$ représentant chaque trajectoire avec $x$ et $y$ en mètres.

In [ ]:
# Réponse 

Calcul de la longueur de chaque tracé et estimation de la vitesse moyenne de chaque boule¶

13) A partir des relevés des coordonnées des tracés, calculez une valeur approchée de la longueur en mètre de chaque tracé.

In [ ]:
# Réponse 

14) Le première image est à $t=0s$. Les boules blanche, rouge et jaune arrivent respectivement à la 649e, 521e, 577e image. Calculez la vitesse moyenne de chaque boule. Concluez.

In [ ]:
# Réponse