nsi:tds:maths:methode_euler
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| nsi:tds:maths:methode_euler [2022/10/03 09:29] – supprimée - modification externe (Unknown date) 127.0.0.1 | nsi:tds:maths:methode_euler [2023/04/03 10:12] (Version actuelle) – goupillwiki | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Méthode d' | ||
| + | |||
| + | Il s'agit d'une méthode de résolution numérique des équations différentielles. Par *numérique*, | ||
| + | |||
| + | ===== Que cherche-t-on ? ====== | ||
| + | |||
| + | ==== Équation différentielle ==== | ||
| + | |||
| + | Une équation différentielle est une équation dans laquelle l' | ||
| + | |||
| + | Prenons un exemple : $f(t) + 5\cdot f'(t) = 10$ et $f(0)= 0$. | ||
| + | |||
| + | Quelques observations : | ||
| + | * En physique, la variable est souvent le temps $t$. | ||
| + | * En général, au lieu de $f(t)$, on écrit $y$. | ||
| + | * Une dérivée représente un taux d' | ||
| + | * L' | ||
| + | |||
| + | ==== Premier ordre, deuxième ordre ==== | ||
| + | |||
| + | Dans l' | ||
| + | |||
| + | ==== Solution exacte ==== | ||
| + | |||
| + | L' | ||
| + | |||
| + | $$f(t) = 10\cdot(1 - \exp\left(-\frac{1}{5}t\right)$$ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | ==== Solution approchée ==== | ||
| + | |||
| + | On ne connaît les solutions exactes que de certaines équations différentielles. On aimerait une méthode permettant au moins de connaître une approximation de la solution. | ||
| + | |||
| + | ===== Méthode d' | ||
| + | |||
| + | Dans notre exemple, l' | ||
| + | |||
| + | De plus, $y' = \dfrac{dy}{dt}$. On peut donc réécrire l' | ||
| + | |||
| + | $$y + 5 \frac{dy}{dt} = 10 \Rightarrow dy = \frac{1}{5}(10-y)\cdot dt$$ | ||
| + | |||
| + | Pour être mathématiquement exacte, cette équation impose $dt \to 0$. Avec la méthode d' | ||
| + | |||
| + | <WRAP tip>Plus $dt$ est petit, meilleure sera l' | ||
| + | |||
| + | Nous en arrivons au cœur du fonctionnement de la méthode d' | ||
| + | * Je connais $y(0)$ | ||
| + | * Je sais que dans le temps $dt$, $y$ augmente de la quantité $\frac{1}{5}(10-y)\cdot dt$ | ||
| + | * Pour $dt = 0,1$ et $y(0) = 0$ je calcule donc $\frac{1}{5}(10-0)\cdot 0,1 = 0,2$. Cela signifie que $y(0,1) = y(0) + 0,2 = 0,2$. | ||
| + | * Je répète l' | ||
| + | * Et on poursuit... jusqu' | ||
| + | |||
| + | ===== Implémentation ===== | ||
| + | |||
| + | ==== Équation différentielle ==== | ||
| + | |||
| + | Nous poursuivons sur notre exemple mais en gardant à l' | ||
| + | |||
| + | On va implémenter l' | ||
| + | |||
| + | <code python> | ||
| + | def exemple(y, dt): | ||
| + | return 1/ | ||
| + | </ | ||
| + | |||
| + | Cette écriture convient pour l' | ||
| + | |||
| + | $$4t\cdot y - 8 y' = \sin(2t) \Rightarrow dy = \frac{1}{8}(\sin(2t) - 4t\cdot y)\cdot dt$$ | ||
| + | |||
| + | Comme vous le voyez, on a parfois de connaître aussi $t$ pour le calcul. On écrira donc pour l' | ||
| + | |||
| + | <code python> | ||
| + | def exemple(y, t, dt): | ||
| + | return 1/ | ||
| + | </ | ||
| + | |||
| + | Ici la variable '' | ||
| + | |||
| + | <code python> | ||
| + | # 2e exemple | ||
| + | from math import sin | ||
| + | def exemple(y, t, dt): | ||
| + | return 1/ | ||
| + | </ | ||
| + | |||
| + | le calcul serait différent mais la signature de la fonction '' | ||
| + | |||
| + | ==== Corps du calcul ==== | ||
| + | |||
| + | On va écrire une fonction '' | ||
| + | * la fonction décrivant l' | ||
| + | * la condition initiale '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | En sortie la fonction doit renvoyer : | ||
| + | * un tableau contenant tous les instants $t$. Dans l' | ||
| + | * un tableau contenant les valeurs correspondantes de $y(t)$. Dans l' | ||
| + | |||
| + | La fonction suit l' | ||
| + | <code lang-none> | ||
| + | DÉBUT | ||
| + | calcul de dt connaissant T et N | ||
| + | soit ts = [0] le tableau des temps | ||
| + | soit ys = [y0] le tableau des y | ||
| + | RÉPÉTER N FOIS: | ||
| + | t précédent est dernier temps de ts | ||
| + | y précédent est dernier y de ys | ||
| + | t actuel est t précédent + dt | ||
| + | calcul de dy en utilisant y précédent, | ||
| + | y actuel est y précédent + dy | ||
| + | ajouter t actuel aux ts | ||
| + | ajouter y actuel aux ys | ||
| + | FIN RÉPÉTER | ||
| + | RENVOYER ts et ys | ||
| + | FIN | ||
| + | </ | ||
| + | |||
| + | ===== Tracer ===== | ||
| + | |||
| + | On peut utiliser '' | ||
| + | |||
| + | <code python> | ||
| + | import matplotlib.pyplot as plt | ||
| + | |||
| + | def exemple(y, t, dt): | ||
| + | return 1/ | ||
| + | | ||
| + | | ||
| + | def euler(equation, | ||
| + | ''' | ||
| + | equation: fonction y, t, dt -> dy | ||
| + | y0: valeur de y(0) | ||
| + | T: durée de simulation | ||
| + | N: nombre d' | ||
| + | ''' | ||
| + | # ... votre travail | ||
| + | |||
| + | ts, ys = euler(exemple, | ||
| + | plt.plot(ts, | ||
| + | plt.show() | ||
| + | </ | ||
| + | |||
| + | Il est possible d' | ||
