SEANCE 3 – Force centrale : mouvement dans le champ gravitationnel de la Terre

packages = ["matplotlib", "numpy", "scipy"]
dimanche 05 mai 2024
Commencé à 13:46
Terminé à .........

On souhaite obtenir la trajectoire d'un projectile lancé depuis la Terre, dans le champ gravitationnel de cette dernière. Nous allons considérer un projectile de masse \(m\) situé à une distance initiale \(r_0=R_T+h\) du centre de la Terre, et envoyé avec une vitesse initiale de norme \(v_0\) dans une direction horizontale (orthogonale à la verticale du lieu), comme sur le schéma ci-contre.

Pour cela, nous allons résoudre numériquement les équations différentielles données par le P.F.D., qui sont couplées et non linéaires.

On se place dans le référentiel géocentrique, supposé galiléen, et associé à deux axes orthonormés \((Ox)\) et \((Oy)\) d'origine \(O\) au centre de la Terre.

I - Obtention des équations différentielles du mouvement

Comme on sait d'après le cours que le mouvement est plan (conservation du moment cinétique), plaçons-nous d'abord en coordonnées polaires, puisque la force gravitationnelle s'écrira naturellement dans cette base.

1 Ecrire (à un instant quelconque au cours du mouvement) l'expression de la force gravitationnelle \(\overrightarrow{F_g}\) que ressent le projectile de masse \(m\) de la part de la Terre de masse \(M_T\), en fonction de la constante de gravitation universelle \(G\), de la distance \(r\) au centre de la Terre (coordonnée polaire) et du vecteur unitaire \(\overrightarrow{u_r}\) des coordonnées polaires.[Note]

\overrightarrow{F_g}=\left(\right)\overrightarrow{u_r}


Nous allons maintenant passer aux coordonnées cartésiennes, puisque cela nous permettra de tracer directement la trajectoire avec matplotlib.

2Réécrire la force en coordonnées cartésiennes, c'est-à-dire en fonction des coordonnées \(x\) et \(y\) et des vecteurs de base \(\overrightarrow{u_x}\) et \(\overrightarrow{u_y}\).
Aide : on exprimera d'une part la distance \(r\) en fonction de \(x\) et \(y\), et on utilisera le fait que \(\overrightarrow{u_r}=\frac{\overrightarrow{OM}}{OM}=\frac{\overrightarrow{OM}}{r}\).[Note]

\overrightarrow{F_g}=\left(\right)\overrightarrow{u_x}+\left(\right)\overrightarrow{u_y}


3Appliquer le P.F.D., et en déduire le système de deux équations différentielles couplées dont sont solutions les fonctions \(x(t)\) et \(y(t)\) : x''=y''=


Nous allons donc résoudre ce système d'équations différentielles couplées et non linéaires, avec solve_ivp() déjà utilisée précédemment.

II - Résolution numérique des équations différentielles du mouvement

Comme d'habitude, on commence par importer les bibliothèques dont on aura besoin. Puis on définit les valeurs des paramètres physiques du problème (à compléter) :

## Modules nécessaires from math import * import scipy.integrate as sci import numpy as np import matplotlib.pyplot as plt ## Constantes du problème G= # constante universelle de la gravitation en USI A COMPLETER (valeur numérique) MT= # masse de la Terre en kg A COMPLETER (valeur numérique) RT= # rayon de la Terre en m A COMPLETER (valeur numérique) # Position initiale de l'objet : h=10**6 # altitude initiale en m (par rapport au sol) A MODIFIER SI VOUS VOULEZ VOUS AMUSER UN PEU r0=RT+h # distance initiale au centre de la Terre
Effacer le retour


4 Utiliser les équations du P.F.D. obtenues à la question 3 pour définir les équations différentielles à résoudre, c'est-à-dire \(\ddot{x}\) et \(\ddot{y}\) en fonction de \(x\) et \(y\) :

def equadiffs(t,inconnues): # inconnues est une liste à 4 éléments (qui sont eux-mêmes des listes) : # inconnues = [ x(t), xpoint(t), y(t), ypoint(t) ] x = inconnues[0] xpoint = inconnues[1] y = inconnues[2] ypoint = inconnues[3] xpointpoint = # A COMPLETER en fonction de x et y, et des constantes physiques du problème ypointpoint = # A COMPLETER en fonction de x et y, et des constantes physiques du problème return [xpoint,xpointpoint,ypoint,ypointpoint]
Effacer le retour


Pour travailler avec des ordres de grandeurs pertinents pour la durée du mouvement et pour la vitesse initiale, nous allons nous appuyer sur des valeurs obtenues par résolution mathématique exacte dans le cas du mouvement circulaire uniforme.

5 Retrouver rapidement l'expression de la vitesse (qui est constante) sur une orbite circulaire de rayon \(r_0\) :

v_{circ}=

En déduire l'expression de la période de révolution \(T\) sur cette orbite, en fonction du rayon \(r_0\) et de la vitesse constante \(v_{circ}\) sur cette orbite :

T=


6 Définir cette vitesse de référence vcirc et cette durée de référence T dans le programme (ces valeurs nous serviront ensuite à choisir facilement la vitesse initiale v0 et la durée de résolution tf en rapport à ces valeurs de référence) :

# Vitesse de référence : vitesse théorique sur la trajectoire circulaire de rayon r0 vcirc= # A COMPLETER (en fonction de G, MT et r0) # Durée de référence : Période de révolution sur la trajectoire circulaire de rayon r0 T= # A COMPLETER (en fonction de r0 et vcirc) # Intervalle de temps de résolution t0=0 # instant initial tf=6*T # dernier instant de calcul, à modifier éventuellement plus tard liste_t=np.linspace(t0,tf,10000) # liste des instants de calcul discrétisés : nb de points à modifier éventuellement plus tard # Vitesse initiale de l'objet v0=0.5*vcirc # A MODIFIER PLUS TARD (valeur AU CHOIX)
Effacer le retour


Utilisons maintenant solve_ivp() pour résoudre le système d'équations différentielles equadiffs. Rappelons le mode d'emploi de cette fonction :

solution = sci.solve_ivp(systeme, [t0,tf], [C1,C2,C3,C4], t_eval=liste_t)

    En entrée :
  • systeme est le système différentiel à résoudre, dans notre cas présent c'est equadiffs qui contient dans cet ordre : \(x\), \(\dot{x}\), \(y\), \(\dot{y}\)
  • [t0,tf] est l'intervalle de résolution
  • [C1,C2,C3,C4] est le jeu des conditions initiales, donc dans notre cas ce sont les valeurs (dans cet ordre) de \(x(0)\), \(\dot{x}(0)\), \(y(0)\), \(\dot{y}(0)\)
  • liste_t est la liste des instants où on fait le calcul.

    En sortie :
  • solution.t retournera la liste des instants de calcul (donc identique à liste_t)
  • solution.y[0] retournera les valeurs calculées de la première fonction inconnue, donc dans notre cas les valeurs de \(x(t)\)
  • solution.y[1] retournera les valeurs calculées de la deuxième fonction inconnue, donc dans notre cas les valeurs de \(\dot{x}(t)\)
  • solution.y[2] retournera les valeurs calculées de la troisième fonction inconnue, donc dans notre cas les valeurs de \(y(t)\)
  • solution.y[3] retournera les valeurs calculées de la quatrième fonction inconnue, donc dans notre cas les valeurs de \(\dot{y}(t)\)


7 Compléter cette instruction avec les quatre valeurs de conditions initiales que nous avons déjà définies précédemment :

solution=sci.solve_ivp(equadiffs, [t0,tf], [__,__,__,__], t_eval=liste_t, method="DOP853") # On enregistre les deux listes de valeurs ainsi calculées pour les deux coordonnées avec des noms plus "parlants" (rien à modifier ici) : x = solution.y[0] y = solution.y[2]
Effacer le retour


Il ne nous reste plus qu'à afficher la trajectoire ! On dessine aussi la Terre, et on repère le point de départ avec une petite marque rouge :

figure, ax = plt.subplots() plt.plot(__,__) # A COMPLETER plt.xlabel('$x$ (m)') plt.ylabel('$y$ (m)') plt.axis('equal') # même échelle en abscisses et en ordonnées plt.title('Trajectoire pour $v_0$='+str(v0)[:5]+' m/s = '+str(round(v0/vcirc,3))+'$\cdot v_{circ}$') # dessin de la Terre : rond gris de centre O et de rayon RT DessinTerre = plt.Circle((0,0), RT, color='grey') plt.text(0, 0, "Terre", fontsize=12, horizontalalignment='center') plt.gca().add_patch(DessinTerre) # point de départ en rouge plt.plot(x[0],y[0],marker="X",color='red') plt.text(x[0],y[0], "Point de départ", fontsize=8, color='red', verticalalignment='top') figure # affiche la figure ainsi créée
Effacer le retour


8Tracer plusieurs trajectoires différentes en modifiant la valeur de la vitesse initiale v0.
Vous pourrez (par exemple) tracer les trajectoires pour : $$v_0=0,5\times v_{circ}$$ $$v_0=0,8\times v_{circ}$$ $$v_0=v_{circ}$$ $$v_0=1,2\times v_{circ}$$ $$v_0=1,3\times v_{circ}$$ $$v_0=\sqrt{2}\times v_{circ}$$ $$v_0=2\times v_{circ}$$
Il faudra peut-être parfois aussi adapter la durée tf sur laquelle on calcule la trajectoire.
Quelles sont les deux formes de trajectoires (courbes géométriques) que l'on obtient ?

Que se passe-t-il en réalité quand \(v_0\lessdot v_{circ}\) ?

Que constate-t-on quand \(v_{circ}\lessdot v_0<\sqrt{2}\times v_{circ}\) ? Est-ce conforme au cours ?

Que constate-t-on quand \(v_0>\sqrt{2}\times v_{circ}\) ? Est-ce conforme au cours ?

FIN DE LA SEANCE
Cliquer sur le bouton bleu Terminé en haut de la page pour générer un compte-rendu. Vous pouvez :

  • soit l’imprimer, et le mettre dans votre copie de DM à me rendre,
  • soit l’enregistrer comme PDF, et le déposer ensuite ci-dessous :