Résolution numérique d’équations différentielles : Différence entre versions
(→Principe de la méthode d'Euler) |
(→Programmation python) |
||
(Une révision intermédiaire par le même utilisateur non affichée) | |||
Ligne 49 : | Ligne 49 : | ||
{v}_{n+1} {{=}} {v}_{n}+h(g-\frac{\lambda}{M}{v}_{n}) }} | {v}_{n+1} {{=}} {v}_{n}+h(g-\frac{\lambda}{M}{v}_{n}) }} | ||
− | ===Programmation python=== | + | ====Programmation python==== |
− | On placera les valeurs <math>{t}_{n}</math>dans un tableau nommé t | + | On placera les valeurs <math>{t}_{n}</math>dans un tableau nommé <syntaxhighlight lang="Python" inline>t</syntaxhighlight> |
− | De même on placera les valeurs <math>{v}_{n}</math>dans un tableau nommé v_euler | + | De même on placera les valeurs <math>{v}_{n}</math>dans un tableau nommé <syntaxhighlight lang="Python" inline>v_euler</syntaxhighlight> |
La boucle de calcul des approximations successives s'écrit : | La boucle de calcul des approximations successives s'écrit : | ||
− | + | <syntaxhighlight lang="Python" line='line'> | |
− | + | for n in range (0, Nb_iterations): | |
− | + | t.append(t[n]+h) # ajout d'une valeur dans le tableau recevant les valeurs de temps | |
− | + | v.append(v_euler[n]+h*(-g-v_euler[n]*lambda/m)) # ajout d'une valeur dans le tableau recevant les vitesses | |
− | + | </syntaxhighlight> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Version du 11 août 2019 à 03:04
Sommaire
Équations différentielle scalaires d’ordre 1
On étudie ici des équations différentielles d’ordre 1 qui s’écrivent sous la forme :
où est une fonction de deux variables et où l’on cherche la fonction x de la variable définie et dérivable sur un intervalle de vérifiant :
Afin d'obtenir une solution unique, nous allons adjoindre à cette équation différentielle une condition initiale sous la forme d’un couple et chercher à résoudre le problème de Cauchy suivant :
Sous certaines conditions sur f que nous ne détaillerons pas, ce problème admet une unique solution, que nous allons chercher à déterminer numériquement.
Principe de la méthode d'Euler
La méthode d'Euler repose sur l'utilisation de l'approximation affine de la fonction. La dérivée est approximée par où est le pas de calcul (suffisamment petit).
On peut donc écrire la relation de récurrence :
L’algorithme de résolution utilisera donc les deux relations de récurrence suivantes :
Exemple : chute libre
Considérons un objet de masse en chute libre verticale avec frottement fluide de coefficient .
Sa trajectoire est repérée dans un référentiel galiléen avec l'axe vers le bas.
Sa vitesse projetée sur l'axe respecte l'équation de la dynamique suivante:
(1)
Avec la condition initiale :
(2)
L'équation (1) devient :
Remarque : La solution exacte à ce problème est trivialement connue :
Pour la solution approchée, on obtient l’algorithme suivant :
Programmation python
On placera les valeurs dans un tableau nommé t
De même on placera les valeurs dans un tableau nommé v_euler
La boucle de calcul des approximations successives s'écrit :
1 for n in range (0, Nb_iterations):
2 t.append(t[n]+h) # ajout d'une valeur dans le tableau recevant les valeurs de temps
3 v.append(v_euler[n]+h*(-g-v_euler[n]*lambda/m)) # ajout d'une valeur dans le tableau recevant les vitesses