- mer. 20 janvier 2016
- INPROS
- #ipython jupyter
Ipython notebook : cours INPROS ¶
Auteur: Marc BUFFAT, Pr dpt de Mécanique, UCB Lyon 1
Contributeurs: Violaine Louvet, Michel Kern, Loic Gouarin, Laurence Viry </h5>
Mise à disposition selon les termes de la Licence Creative Commons
Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 2.0 France.
%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")
Rappels de mathématiques et de physique¶
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}$$
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
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.
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()
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).
run schema_balistique.py
É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.
#from JSAnimation import IPython_display
from balistique import *
anim
#display(anim)
HTML(anim.to_html5_video())
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.
run schema_satellite.py
É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.
#from JSAnimation import IPython_display
from satellite import *
anim
#display(anim)
HTML(anim.to_html5_video())
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
run schema_pendule.py
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.
#from JSAnimation import IPython_display
from pendule import *
#display(anim)
anim
HTML(anim.to_html5_video())