Outils pour utilisateurs

Outils du site


nsi:tds:maths:methode_euler

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nsi:tds:maths:methode_euler [2022/10/03 09:57] goupillwikinsi:tds:maths:methode_euler [2023/04/03 10:12] (Version actuelle) goupillwiki
Ligne 14: Ligne 14:
   * En physique, la variable est souvent le temps $t$.   * En physique, la variable est souvent le temps $t$.
   * En général, au lieu de $f(t)$, on écrit $y$.   * En général, au lieu de $f(t)$, on écrit $y$.
-  * Une dérivée représente un taux d'accroissement : à un instant $t$ donné, la fonction vaut $f(t)$. Si on laisse passer un instant très court $dt$ (notation de physicien) le temps devient $t + dt$ et la fonction $f(t + t)$. On notera $df = f(t + dt) - f(t)$, la variation de $f$. L'idée de la dérivation est de considérer que, quand $df$ très petit, $df$ tend à être proportionnel à $dt$. On note $f'(t) = \dfrac{df}{dt}$ ce facteur de proportionnalité, le taux d'accroissement.+  * Une dérivée représente un taux d'accroissement : à un instant $t$ donné, la fonction vaut $f(t)$. Si on laisse passer un instant très court $dt$ (notation de physicien) le temps devient $t + dt$ et la fonction $f(t + dt)$. On notera $df = f(t + dt) - f(t)$, la variation de $f$. L'idée de la dérivation est de considérer que, quand $dt$ très petit, $df$ tend à être proportionnel à $dt$. On note $f'(t) = \dfrac{df}{dt}$ ce facteur de proportionnalité, le taux d'accroissement.
   * L'équation différentielle est complétée par une condition initiale, ici $f(0) = 0$. En effet, l'équation a une infinité de solutions. Physiquement, chaque solution correspond à une trajectoire possible, une trajectoire permise par les lois de la physique. Mais dans le cadre d'une expérience particulière, une trajectoire a été choisie. La condition initiale permet de sélectionner cette trajectoire.   * L'équation différentielle est complétée par une condition initiale, ici $f(0) = 0$. En effet, l'équation a une infinité de solutions. Physiquement, chaque solution correspond à une trajectoire possible, une trajectoire permise par les lois de la physique. Mais dans le cadre d'une expérience particulière, une trajectoire a été choisie. La condition initiale permet de sélectionner cette trajectoire.
  
Ligne 79: Ligne 79:
  
 <code python> <code python>
 +# 2e exemple
 from math import sin from math import sin
 def exemple(y, t, dt): def exemple(y, t, dt):
Ligne 84: Ligne 85:
 </code> </code>
  
-le calcul serait différent mais la signature de la fonction ''exemple(y, t, dt)'' serait la même. C'est important si on veut que la suite du programme soit indépendant de l'équation différentielle envisagée.+le calcul serait différent mais la signature de la fonction ''exemple(y, t, dt)'' serait la même. C'est important si on veut que la suite du programme soit indépendant de l'équation différentielle envisagée. On veut donc une fonction $y, t, dt \mapsto dy$.
  
-<WRAP todo> +==== Corps du calcul ====
-Pas fini +
-</WRAP>+
  
 +On va écrire une fonction ''euler'' qui fait la résolution. En entrée de la fonction, on donne :
 +  * la fonction décrivant l'équation différentielle (''exemple'') qui doit être de forme $y, t, dt \mapsto dy$
 +  * la condition initiale ''y0'' représentant la valeur $y(0)$
 +  * ''T'', le temps total que l'on veut simuler (dans l'exemple, ''T = 20'')
 +  * ''N'', le nombre de pas que l'on veut calculer (dans l'exemple, ''N = 200'')
  
 +En sortie la fonction doit renvoyer :
 +  * un tableau contenant tous les instants $t$. Dans l'exemple : ''%%[0, 0.1, 0.2, ..., 20]%%''
 +  * un tableau contenant les valeurs correspondantes de $y(t)$. Dans l'exemple ''%%[0, 0.2, 0.396, ...]%%''
  
 +La fonction suit l'algorithme suivant (en pseudo-code)
 +<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, t précédent, dt
 +        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
 +</code>
  
 +===== Tracer =====
  
 +On peut utiliser ''matplotlib'' pour faire le tracer. Puisque ''euler'' nous fournit le tableau des temps et des y, c'est très rapide :
  
 +<code python>
 +import matplotlib.pyplot as plt
  
 +def exemple(y, t, dt):
 +    return 1/5*(10-y)*dt
 +    
 +    
 +def euler(equation, y0, T, N):
 +    '''
 +    equation: fonction y, t, dt -> dy
 +    y0: valeur de y(0)
 +    T: durée de simulation
 +    N: nombre d'échantillons
 +    '''
 +    # ... votre travail
 +
 +ts, ys = euler(exemple, 0, 20, 200) # y0 = 0, T = 20, N = 200
 +plt.plot(ts, ys)
 +plt.show()
 +</code>
  
 +Il est possible d'améliorer l'affichage de la courbe mais c'est un autre travail...
  
nsi/tds/maths/methode_euler.1664783824.txt.gz · Dernière modification : de goupillwiki