TP 2 -- Méthodes Numériques pour l’Ingénieur CM3 -- Mars 2015

Equations différentielles ordinaires

Le texte de cette session de travaux pratiques est également disponible ici

http://nbviewer.ipython.org/github/ecalzavarini/numerical-methods-at-polytech-lille/blob/master/MNI-TP2-2015.ipynb

Instructions pour ce TP

Pendant ce TP vous aurez à écrire plusieurs scripts (nous vous suggérons de les nommer script1.py , script2.py ,...)

Les scripts doivent être accompagnés par un document descriptif unique ( README.txt ). Dans ce fichier, vous devrez décrire le mode de fonctionnement des scripts et, si besoin, mettre vos commentaires. Merci d'y écrires aussi vos nomes et prénoms complets.

Tous les fichiers doivent etre mis dans un dossier appelé TP1-nom1-nom2 et ensuite être compressés dans un fichier TP1-nom1-nom2.tgz .

Enfin vous allez envoyer ce fichier par email à l'enseignant :

soit Enrico ([email protected]) ou Stefano ([email protected])

Vous avez une semaine de temps pour compléter le TP, c’est-à-dire que la date limite pour envoyer vos travaux est 7 jours après la date du TP courant.

Objectif

Ecrire un script Python permettant de résoudre une équation différentielle ordinaire du premier ordre $y' = f (x, y(x))$ avec la condition initiale $y(x_0 ) = y_0$ par la méthode :

$a$) d'Euler (de la tangente) : $y_{i+1} = y_i + h\ f(x_i,y_i)\ $, $\ y_0 = y_0(x_0)\ $, $\ i = 0 , 1, \ldots$

$b$) du point au milieu : $y_{i+1} = y_i + h\ f(x_i + \frac{h}{2},y_i+\frac{h}{2}\ f(x_i,y_i), )\ $, $\ y_0 = y_0(x_0)\ $, $\ i = 0 , 1, \ldots$

Faire en sorte que le pas d’intégration puisse être rentré par l’utilisateur. La fonction $f(x)$ pourra être définie à l’aide d’une $function$ dans le script.

Programmation et validation

Résoudre l’équation $y' = \cos(x)$ avec $y(0) = 0$ pour $x$ variant de $0$ à $2\pi$. Faire les calculs en faisant varier le pas: $h = \pi/5, \pi/10, \pi/20, \ldots$ et comparer la valeur de $y$ au point $x = 3\pi/2$ (valeur théorique: -1).

Les valeurs de $y(3\pi/2)$ obtenues numériquement doivent être affichées de façon claire sur l'écran par le script et dans le compte-rendu dans un tableau.

Représenter sur un graphique la courbe exacte $y_e = \sin(x)$ et les solutions obtenues à l’aide des deux méthodes (pour $x\in \left[ 0,2\pi \right]$).

Formuler une conclusion en comparant les résultats obtenus par les deux méthodes.

Application

Un projectile de masse $m$ est lancé à la vitesse initiale $\vec{v}_0$ et à l'angle $\alpha_0$ de l'horizontale (voir figure). Pendant son mouvement il est soumis à la force de pesanteur

$\vec{P} = m \vec{g}$

et à la résistance de l'air

$\vec{F}_r = −k \vec{v}$

où $\vec{v} = d\vec{x}/dt$ est le vecteur vitesse, $k$ une constante et $\vec{x}$ le vecteur position.

In [1]:
from IPython.display import Image
Image(filename='rocket.jpg')
Out[1]:

a) En appliquant le Principe Fondamental de la Dynamique, trouver analytiquement les équations différentielles vérifiées par les composantes du vecteur $\vec{x}$.

b) Par un changement de variables, transformer les équations (et les conditions initiales) obtenues en un système de quatre équations différentielles d'ordre 1 de forme générale :

$$y_1'(x) = f_1(x,y_1,y_2,y_3,y_4) $$$$y_2'(x) = f_2(x,y_1,y_2,y_3,y_4) $$$$y_3'(x) = f_3(x,y_1,y_2,y_3,y_4) $$$$y_4'(x) = f_4(x,y_1,y_2,y_3,y_4) $$

avec les conditions initiales $$y_1(x_0)=y_{1,0} $$ $$ y_2(x_0)=y_{2,0} $$ $$y_3(x_0)=y_{3,0} $$ $$ y_4(x_0)=y_{4,0} $$

où l’expression des fonctions $f_1$ , $f_2$ , $f_3$, $f_4$ doit être déterminée.

On adoptera les notations suivantes : $x$ (le temps $t$) , $y_1$ (l'abscisse $x$), $y_2$ (l'ordonnée $z$), $y_3$ (la vitesse horizontale $v_x$) et $y_4$ (la vitesse verticale $v_z$).

Question 1 :

Trouver la trajectoire de l'objet (et les vitesses horizontale et verticale). Les valeurs de $t,x,z,v_x,v_z$ obtenues numériquement doivent être affichées de façon claire sur l'écran par le script et dans le compte-rendu dans un tableau. Trouver aussi le point d’impact en utilisant les deux méthodes numériques définies précédemment.

Données :

la vitesse initiale $\ v_0 = 10$ $[m/s]$,

la masse $\ m = 5$ $[Kg]$,

l’accélération terrestre $\ g = 9.8$ $[m/s^2]$,

l'angle $\ \alpha_0 = 45$ $[degrés]$,

le coefficient de résistance $\ k = 0.5$ $[1/s]$,

On prendra un pas d’intégration $\ \Delta t = 10^{-2}$ $[s]$.

Question 2 :

Comparer les positions du point d’impact calculées par les différentes méthodes pour plusieurs valeurs du pas d’intégration $\Delta t$ (on prendra successivement les pas $\Delta t$ suivants : $10^{-1}, 10^{-2}, 10^{-3}, \ldots$ secondes). Les résultats pourront être présentés sous forme d’un tableau.

Bonus:

Appliquer la méthode de Runge-Kutta d'ordre 4 ($RK4$) afin de résoudre l’équation différentielle $ y' = −ry$ , avec $y(0) =1$ et $r = 8$, pour $x \in \left[0,2\right]$. Représenter sur un graphique la solution numérique obtenue ainsi que la solution analytique (exacte) $y_e = \exp(−rx)$. Motiver le choix du pas d’intégration $h$.

In [2]:
from IPython.core.display import HTML
def css_styling():
    styles = open('custom.css', 'r').read()
    return HTML(styles)
css_styling()
Out[2]: