Marc BUFFAT

Professeur au département de Mécanique, Lyon 1 e-mail

Blog scientifique et pédagogique utilisant des notebooks IPython et Linux

cours en ligne INPROS: rappel


Ipython notebook : cours INPROS LyonHPC

Auteur: Marc BUFFAT, Pr dpt de Mécanique, UCB Lyon 1

Contributeurs: Violaine Louvet, Michel Kern, Loic Gouarin, Laurence Viry </h5>

Licence Creative Commons
Mise à disposition selon les termes de la Licence Creative Commons
Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 2.0 France.
In [1]:
%matplotlib inline
%autosave 300
import numpy as np
import sympy as sp
import matplotlib.pyplot as plt
from matplotlib import animation
from IPython.display import HTML,display
css_file = 'style.css'
try:
    display(HTML(open(css_file, "r").read()))
    print("using ",css_file)
except :
    print("using default css")
Autosaving every 300 seconds
using default css

Rappels de mathématiques et de physique

LyonHPC LyonHPC
</div> cloud

Rappels de mathématique

La simulation numérique fait souvent appel à une analyse du comportement local des fonctions. Pour cela on fait appel au calcul de dérivée, d’intégrale et de développement en série de Taylor.

Dérivée

La dérivée $f(x)$ d’une fonction mesure son taux de variation $$ \frac{df}{dx}(x)=\lim_{\Delta x\rightarrow 0}\frac{f(x+\Delta x)-f(x)}{\Delta x} \leadsto \frac{df}{dx}(x)\approx \frac{\Delta f}{\Delta x} \mbox{ pour } \Delta x \mbox{ petit}$$

In [2]:
run derivee.py

Intégrale

L’intégrale (au sens de Riemann) entre a et b d’une fonction $f(x)$ est une mesure de l’aire sous la courbe: $$ I = \int_a^b f(x)\,dx = \mbox{ aire du domaine sous la courbe }$$ Cela permet de l’interpréter en terme de moyenne: $$ \int_a^b f(x)\,dx = \overline{f} \times (b-a) $$ avec $\overline{f}$ moyenne de f(x) entre a et b

In [3]:
run integrale.py

Développement en série de Taylor

Soit $f(x)$ une fonction régulière, on peut l’approcher par son développement en série de Taylor à l’ordre $n$ au voisinage de $x=0$ à partir des dérivées successives de $f(x)$ en $x=0$:

$$ f(x) \approx f(0) + x \left(\frac{df}{dx}\right)(0) + \frac{x^2}{2!} \left(\frac{d^2f}{dx^2}\right)(0) + \frac{x^3}{3!} \left(\frac{d^3f}{dx^3}\right)(0) + … + \frac{x^{n-1}}{(n-1)!} \left(\frac{d^{n-1}f}{dx^{n-1}}\right)(0) + \mathcal{O}(x^n)$$

Exemple (calcul avec sympy)

approximation de la fonction $f(x)=e^{sin x}$ au voisinage de $x=0$ par des développements en série de Taylor d’orde 2, 3 et 5.

In [4]:
import scipy as sp
from taylor import *
sp.init_printing()
print("Pour la fonction f(x)"),
display(f)
print(u"Dvt en série à l'ordre 2 au voisinage de x=0")
display(fs2)
print(u"Dvt en série à l'ordre 3 au voisinage de x=0")
display(fs3)
print(u"Dvt en série à l'ordre 5 au voisinage de x=0")
display(fs5)
traceSerie()
Pour la fonction f(x)
$$e^{\sin{\left (x \right )}}$$
Dvt en série à l'ordre 2 au voisinage de x=0
$$1 + x + \mathcal{O}\left(x^{2}\right)$$
Dvt en série à l'ordre 3 au voisinage de x=0
$$1 + x + \frac{x^{2}}{2} + \mathcal{O}\left(x^{3}\right)$$
Dvt en série à l'ordre 5 au voisinage de x=0
$$1 + x + \frac{x^{2}}{2} - \frac{x^{4}}{8} + \mathcal{O}\left(x^{5}\right)$$

Rappels de mécanique newtonienne

Mouvement d’un corps solide (Mécanique du point)

Principe fondamental de la dynamique (2ième loi de Newton)

Un corps de masse $m$ et de vitesse $\overrightarrow{v}$ dans un repère galiléen possède une quantité de mouvement $\overrightarrow{q}=m\overrightarrow{v}$, qui caractérise son inertie.

Pour faire varier sa quantité de mouvement (en intensité et/ou en direction), il faut lui appliquer des forces $\overrightarrow{F_i}$. C’est ce que traduit le principe fondamentale de la dynamique, ou seconde loi de Newton:

$$ \frac{d}{dt}(m\overrightarrow{v}) = \sum_i \overrightarrow{F_i} $$

exemple d’équation du mouvement:

pour un corps de masse $m$ constante se déplaçant dans un plan, dont la position est donnée dans un référentiel cartésien par $P(x(t),y(t))$, cette loi conduit au système de deux équations différentielles d’ordre 2:

\begin{eqnarray} m\frac{d^2 x}{dt^2} &=& \sum_i F_i^x \mbox{ avec }F_i^x \mbox{ composante de } \overrightarrow{F_i} \mbox{ suivant x}\ m\frac{d^2 y}{dt^2} &=& \sum_i F_i^y \mbox{ avec }F_i^y \mbox{ composante de } \overrightarrow{F_i} \mbox{ suivant y} \end{eqnarray}

exemple de force (gravitation)

La force exercée par un corps de masse $M$ distant de r s’écrit:

$$ \overrightarrow{F} = -G \frac{ m M }{r^2} \overrightarrow{e_r}$$

avec $\overrightarrow{e_r}$ est le vecteur unitaire qui va de M à m et $G\approx 6.7 10^{-11} Nm^2kg^{-2}$ est la constante universelle de gravitation.

Dans le cas d’un objet de masse m sur la terre, la force de gravitation exercée par la terre (de masse $M\approx 6.10^{24} kg$) est quasiment constante compte tenu de $M\gg m$ et que $r\approx R=6400 km$ (rayon de la terre) et s’écrit:

$$ \overrightarrow{F} = -m g \overrightarrow{e_z} $$

où $\overrightarrow{e_z}$ est la direction de la verticale dirigée vers le haut et $g=\frac{GM}{R^2}\approx 9.8 ms^{-2}$ est l’accélération de la pesanteur.

Travail, Puissance

Le travail élémentaire $\delta W$ d’une force $\overrightarrow{F}$ est égale au produit scalaire de la force par son déplacement élémentaire $\delta\overrightarrow{l}$:

$$ \delta W = \overrightarrow{F} . \delta\overrightarrow{l} \mbox{ (unité Joule)}$$

La puissance est un travail par unité de temps. $$ \delta P = \frac{\delta W}{\delta t} \mbox{ (unité Watt)}$$

Dans le cas d’une force $\overrightarrow{F_j}$ conservative (découlant d’un potentiel $U_j$): $$F_j = -\overrightarrow{grad}\ U_j = -\left[ \begin{array}{c} \frac{\partial U_j}{\partial x}\ \frac{\partial U_j}{\partial y}\ \frac{\partial U_j}{\partial z}\ \end{array} \right]$$ le travail est alors une différentielle exacte: $$\delta W_j = -dU_j = -\frac{\partial U_j}{\partial x}dx - \frac{\partial U_j}{\partial y}dy-\frac{\partial U_j}{\partial z}dz \mbox{ avec } F_j = -\overrightarrow{grad}\ U_j$$ qui ne dépends que du potentiel initial et du potentiel final.

De même, si une force $\overrightarrow{F_j}$ reste perpendiculaire au déplacement (cas d’une force de liaison parfaite sans frottement), elle ne travaille pas $$\delta W_j = 0 \mbox{ si } \overrightarrow{F_j}\perp\delta\overrightarrow{l} \Rightarrow \overrightarrow{F_j}.\delta\overrightarrow{l}=0$$

Conservation de l’énergie

En effectuant le produit scalaire de l’équation fondamentale de la dynamique par la vitesse $\overrightarrow{v}$, on obtiens l’évolution de l’énergie cinétique $E_c$ du système

$$ \frac{d Ec}{dt} = \sum_i \overrightarrow{F_i}.\overrightarrow{v} \mbox{ avec } Ec=\frac{1}{2} m v^2 \mbox{ énergie cinétique} $$

Si les forces appliquées sont conservatives ou ne travaillent pas, l’énergie totale $E_t$, somme de l’énergie cinétique $Ec$ et l’énergie potentielle $U$, du système se conserve: $$ E_t = \frac{1}{2} m v^2 + \sum_j U_j = cste $$

Mouvement balistique

Mouvement balistique d’une masse $m$ dans le champ de gravité terrestre (on néglige les frottements).

In [5]:
run schema_balistique.py
<matplotlib.figure.Figure at 0x7f827dd36518>

Équations du mouvement

\begin{eqnarray} m\frac{d^2 x}{dt^2} &= 0 &\mbox{ avec } x(0)=x_0 , \frac{dx}{dt}(0)=u_0\ m\frac{d^2 z}{dt^2} &= -m g &\mbox{ avec } z(0)=z_0 , \frac{dz}{dt}(0)=w_0 \end{eqnarray}

La solution est parabolique et s’écrit:

\begin{eqnarray} x(t) &=& x_0 + u_0 t \ z(t) &=& z_0 + w_0 t - \frac{1}{2} g t^2 \end{eqnarray}

L’énergie totale se conserve, avec au cours du mouvement transformation d’énergie potentielle en énergie cinétique:

$$ E_t = \frac{1}{2} m v^2 + m g z = cste $$

Trajectoire , vitesse et accélération

L’animation suivante montre l’évolution du vecteur vitesse (en cyan) et de l’accélération (en vert), ainsi que l’évolution de l’énergie cinétique Ec, l’énergie potentielle Up et l’énergie totale Et.

In [6]:
#from JSAnimation import IPython_display
from balistique import *
anim
#display(anim)
trajectoire balistique U0= 10.0  alpha= 1.1780972450961724
Out[6]:
<matplotlib.animation.FuncAnimation at 0x7f827de606d8>
In [7]:
HTML(anim.to_html5_video())
Out[7]:

Mouvement d’un satellite

On considère une masse $m$ en rotation uniforme autour de la terre de masse $M$ à une distance $r$ du centre.

In [8]:
run schema_satellite.py
<matplotlib.figure.Figure at 0x7f827de345f8>

Équation du mouvement

Soit $\overrightarrow{e_t}$ le vecteur tangentiel, et $\overrightarrow{e_n}$ le vecteur normal à la trajectoire et dirigé vers la terre, la vitesse s’écrit en fonction de l’angle de rotation $\theta(t)$:

$$ \overrightarrow{v} = r \frac{ d\theta}{dt} \overrightarrow{e_t}$$

et le principe fondamentale de la dynamique s’écrit: $$ \frac{d}{dt}(m r \frac{ d\theta}{dt} \overrightarrow{e_t}) = m \frac{G M}{r^2} \overrightarrow{e_n}$$

La solution est telle que la vitesse de rotation $\omega$ est uniforme: $$ \omega = \frac{d\theta}{dt} = \sqrt{\frac{G M}{r^3}} $$

Dans ce cas l’énergie cinétique et l’énergie potentielle se conservent: $$ Ec = \frac{1}{2} m v^2 = cste $$

Trajectoire, vitesse et accélération

L’animation suivante montre l’évolution du vecteur vitesse (en cyan) et accélération (en vert), ainsi que l’évolution de l’énergie cinétique.

In [9]:
#from JSAnimation import IPython_display
from satellite import *
anim
#display(anim)
trajectoire d'un satellite omega= 1.0  r= 1.0
Out[9]:
<matplotlib.animation.FuncAnimation at 0x7f827c042160>
In [10]:
HTML(anim.to_html5_video())
Out[10]:

Mouvement du pendule

On considère un pendule simple, constitué d’une masse $m$ fixée à l’extrémité d’un fil de longueur $l$ fixé en O et soumis à la gravité $g$.

La position $P$ de la masse s’écrit en fonction de l’angle $\theta$ du fil par rapport à la verticale $y$: $$ \overrightarrow{OP} = \left[\begin{array}{l}x\y\end{array}\right] = \left[\begin{array}{l}+l\sin\theta\-l\cos\theta\end{array}\right] $$

Le bilan des forces est donné sur la figure ci-dessous

In [11]:
run schema_pendule.py
<matplotlib.figure.Figure at 0x7f827de90e48>

Equation du mouvement

Soit $\overrightarrow{e_t}$ le vecteur tangentiel, et $\overrightarrow{e_n}$ le vecteur normal, la vitesse du pendule s’écrit: $$\overrightarrow{v}=l\frac{d\theta}{dt}\overrightarrow{e_t}$$ Les forces exercées sur le pendule sont la gravité $- m g \overrightarrow{e_y}$ et la tension dans le fil $T \overrightarrow{e_n}$

Le principe fondamental de la dynamique s’écrit: $$ \frac{d}{dt}(m l \frac{d\theta}{dt}\overrightarrow{e_t})= -m g \overrightarrow{e_y} + T \overrightarrow{e_n} $$ dont la projection suivant $\overrightarrow{e_t}$ donne l’équation d’évolution de l’angle $\theta$ $$ m l \frac{d^2\theta}{dt^2} = - m g \sin\theta $$ qui s’écrit dans le cas de petites oscillations $\theta$: $$ \frac{d^2\theta}{dt^2} = -\omega^2 \theta \mbox{ avec } \omega=\sqrt{\frac{g}{l}}$$ et dont la solution est périodique de la forme: $$\theta(t) = \theta_0\cos(\omega t + \phi_0)$$

Conservation de l’énergie

La tension dans le fil étant perpendiculaire à la vitesse, son travail est nul. La gravité découle d’un potentiel, et donc le système est conservatif $$ E_t = \frac{1}{2} m v^2 + m g y = cste$$

Trajectoire, vitesse et accélération

L’animation suivante montre l’évolution du vecteur vitesse (en cyan) et accélération (en vert) ainsi que l’évolution de l’énergie cinétique Ec, l’énergie potentielle Up et l’énergie totale Et.

In [12]:
#from JSAnimation import IPython_display
from pendule import *
#display(anim)
anim
Out[12]:
<matplotlib.animation.FuncAnimation at 0x7f827411b128>
In [13]:
HTML(anim.to_html5_video())
Out[13]:

FIN

LyonHPC LyonHPC
</div> cloud

In [ ]: