La fonction Euler
prend en paramètres une fonction f
, des flottants a
, Fa
et b
et un entier n
. Elle renvoie en sortie deux listes permettant de construire la courbe de la primitive de la fonction $f$ prenant en $a$ la valeur $F_a$, que l'on peut interpréter comme la solution de l'équation différentielle $y'(x)=f(x)$ vérifiant $y(a)=F_a$.
def Euler(f,a,Fa,b,n):
dt = (b-a)/n
listeEulerAbscisse = [a]
listeEulerOrdonnee = [Fa]
x = a
y = Fa
for i in range(n):
x = x + dt
y = y + f(x)*dt
listeEulerAbscisse.append(x)
listeEulerOrdonnee.append(y)
return listeEulerAbscisse,listeEulerOrdonnee
Suggestions pédagogiques
Euler
?Fa
à la ligne 4 ?dt
?Le programme précédent étant fourni en remplaçant les lignes 4, 6, 8 et 9 par listeEulerOrdonnee = [...]
, y = ...
, x = ...
, y = ...
, demander aux élèves de compléter les lignes 4, 6, 8 et 9.
Écrire la fonction Euler
.
On applique la méthode d'Euler pour tracer les courbes approchées des primitives $F$ et $G$ des fonctions $f:t\mapsto \frac{1}{t}$ et $g:x\mapsto \frac{1}{1+t^2}$ vérifiant les conditions initiales $F(1)=0$ et $G(0)=0$.
def f(t):
return 1/t
def g(t):
return 1/(1+t**2)
Suggestions pédagogiques
Écrire les fonctions informatiques f
et g
représentant les fonctions mathématiques $f$ et $g$.
On souhaite maintenant représenter une approximation de la fonction $F$ sur $[1,10]$ pour $1000$ itérations.
Importation de la bibliothèque graphique :
from matplotlib.pyplot import plot,show
n = 1000
X,Y = Euler(f,1,0,10,n)
plot(X,Y,'b')
show()
Suggestions pédagogiques
Le programme précédent étant fourni en remplaçant la ligne 3 par X,Y = Euler(...)
, demander aux élèves de compléter la ligne 3.
Dans cette partie, on souhaite approcher la courbe de la primitive $G$ de la fonction $g:t\mapsto \frac{1} {1+t^2}$ sur $[0,10]$ vérifiant $G(0)=0$. Il faut donc distinguer deux cas. Cette courbe va être construite en partant de $0$ vers la droite puis vers la gauche. L'un avec un $dt$ positif qui construira la courbe «vers la droite» et l'autre avec un $dt$ négatif qui construire la fonction «vers la gauche».
n = 1000
# dt positif de x=0 à x=2
X,Y = Euler(g,0,0,10,n)
plot(X,Y,'b')
# dt négatif de x=0 à x=-2
X,Y = Euler(g,0,0,-10,n)
plot(X,Y,'b')
show()
Suggestions pédagogiques
Cette animation permet de visualiser la construction approchée par la méthode d'Euler des primitives des fonctions $f:t\mapsto \frac{1}{t}$ et $g:x\mapsto \frac{1}{1+t^2}$ vérifiant les conditions initiales $F(1)=0$ et $G(0)=0$.
%matplotlib inline
import matplotlib.animation
from IPython.display import HTML
from matplotlib.pyplot import close,subplots
#ctes:
n =50
#Création des figures
fig, (ax1,ax2) = subplots(1, 2,figsize=(12, 6))
courbeEulerG, = ax2.plot([],[],'.-',color="#1e7fcb")
courbeEulerD, = ax2.plot([],[],'.-',color="#1e7fcb")
courbeEuler, = ax1.plot([],[],'.-',color="#C4151C")
#Réglage des axes
ax1.set_xlim(( 0.1, 40))
ax1.set_ylim(( 0, 6))
ax2.set_xlim(( -10, 10))
ax2.set_ylim(( -2, 2))
def init():
global courbeEuler
courbeEulerG.set_data([], [])
courbeEulerD.set_data([], [])
courbeEuler.set_data([], [])
return (courbeEuler,)
def animate(i):
global courbeEuler,courbeEulerG,courbeEulerD
n = i+1
listeX1,listeY1 = Euler(f,1,0,40,n)
listeX2dte,listeY2dte = Euler(g,0,0,10,n)
listeX2gch,listeY2gch = Euler(g,0,0,-10,n)
courbeEulerG.set_data(listeX2gch,listeY2gch)
courbeEulerD.set_data(listeX2dte,listeY2dte)
courbeEuler.set_data(listeX1,listeY1)
ax1.set_title('Primitive de $t \mapsto \dfrac{1}{t}$',y=1.02,color="#C4151C")
ax2.set_title('Primitive de $t \mapsto \dfrac{1}{1+t^2}$',y=1.02,color="#1e7fcb")
return (courbeEuler,)
close ()
ani = matplotlib.animation.FuncAnimation(fig, animate, frames=n,init_func=init,blit=False,interval=200)
# l'un ou l'autre
HTML(ani.to_jshtml())
#HTML(ani.to_html5_video())