P0
P1
P2
P3
h
ε
h : pas
ε : erreur
Frédéric Georges D1
Sylvain Delvallée
Groupe 229
Résolution numérique des équations différentielles.
Objectif.
Nous désirons trouver une approximation numérique de la solution d’une
équation différentielle, par différentes méthodes : Euler, Euler Vectoriel, Runge Kutta
Vectoriel ordre 2.
Algorithme de Euler
Pour ce faire nous utilisons l’algorithme de Euler.
Celui-ci utilise un point initial de la courbe et sa tangente passant par ce point.
Le but est de placer un deuxième point sur cette tangente distant du premier d’un
pas h.
Ensuite, nous déterminons une deuxième tangente à la courbe passant par le
deuxième point calculé ce qui nous permet de déterminer un troisième point distant
du deuxième du même pas h.
On construit la courbe d’approximation en rejoignant tout les points calculés (la
courbe obtenu est une succession de droites)
Il est évident que plus le pas h sera faible plus l’erreur ε sera petite.
La subtilité est donc de choisir un compromis optimal entre qualité de la courbe ainsi
obtenue (erreur faible) et temps de calcul des points (fonction de la finesse du pas de
calcul).
Programmation
On crée une table de dimension nx2 (2 coordonnées pour chaque points et
n : nombre de point calculés).
Nous rentrerons dans cette table le point initial (repéP0 sur schéma précèdent) et
nous créons une procédure de calcul des points suivants suivant l’algorithme
suivant : x i + h x i+1
y i + y’i *h y i+1
Détail de l’exemple traité.
Nous traiterons l’exemple suivant :
y’(x) = 3y -3x x [0 , 10]
y(0) = 1/3
La solution réelle est de la forme : A*(e3x) + x +1/3
avec A fonction des conditions initiales.
Lorsque le point initial à pour ordonné y0=1/3, on a A = 0. La courbe modélisée et
la solution réelle sont des droites, il y a une corrélation entre les deux courbes et
aucune erreur d’approximation (cf page 1 des copies mathematica).
Par contre pour une petite perturbation sur y0 (cf page 1, 2 et 3 des copies
mathematica : erreur ε de 10-5 puis 10-3) on constate que le coefficient A devient 0
il apparaît une erreur d’approximation du à l’exponentielle d’autant plus importante
que l’erreur l’est également mais et des proportions exponentiel.
On notera que la thode sera dite stable à la condition que A soit inférieur à
1/e3x autrement appelé critère de stabilité.
Algorithme de Euler Vectoriel
Cet algorithme est proche de celui d’Euler dans la façon d’appréhender la méthode.
Il permet cependant d’approximer numériquement les solutions d’équations
différentielles de degré supérieur à 2. La principale différence de traitement consiste
dans le fait que l’on calcule des vecteurs de dimension égale au degré de l’équation
différentielle initiale (on recherche y et y’). Dans la méthode d’Euler l ‘équation est de
degré 1 on calcule alors un vecteur à 1 dimension (on recherche y).
Programmation
On crée une table de dimension nx3 (2 coordonnées pour chaque points + la
dérivé en ce point et n : nombre de point calculés).
Nous rentrerons dans cette table le point initial et nous créons une procédure de
calcul des points suivants suivant l’algorithme suivant :
xi-1 + h xi
"
'
*
'1
1
1
1
i
i
i
iy
y
h
y
y
Détail de l’exemple traité.
Soit le système de part :
y’’(x) = 1+ y²(x) x [0 , 1]
y’(0) = 1
y(0) = 0
On renvoie suite à notre programmation la liste de {x , y } et la liste de { x , y’ } (sur
les copie mathematica est renvoyer la liste L : {x, y, y’}).
On simule un perturbation sur y0 puis sur y’0. On constate que les solutions sont très
peu perturbées puisque les valeurs numériques des points ne varient de quelque %
(cf page 4 et 5 des copies matematica) la méthode semble plus robuste.
Ensuite, on désire raffiner la solution en calculant plus de point. On obtient des
courbes plus ‘raffinées’ mais on constate que la Liste L renvoyer par mathematica (cf
page 5 et 6 des copies mathematica) est composée de fraction de nombres entiers
‘grands’ (temps de calcul rallonger). On comprend l’intérêt de ne pas chercher à
calculer ces fractions mais peut être en donner une approximation décimale et donc
des approximations supplémentaires sur la solution réelle.
'
i
i
y
y
(xo,yo)
h
h*y’(x0) = h*k1
xo
x1
=
xo+h
h*k2
y1
x2
=
xo+2*h
Algorithme de Runge Kutta d’ordre 2 Vectoriel
Cet algorithme permet de pondérer la valeur calculée du taux d’accroissement
de la courbe par rapport à la méthode d’Euler. En effet, l’erreur entre la courbe réelle
et le point numériquement calculé est meilleure.
Ce qui ce montre à l’aide du schéma suivant
Programmation
x i + h x i+1
"
'
*
2
"
'
*
2
'1i
i
i
i
i
iy
y
h
y
y
h
y
y
Détail de l’exemple traité.
Soit le système de départ :
y’’(x) = 1+ y²(x) x [0 , 1]
y’(0) = 1
y(0) = 0
De même que pour l’algorithme de Euler vectoriel, on renvoie suite à notre
programmation la liste de {x , y } et la liste de { x , y’ } (sur les copie mathematica est
renvoyer la liste L : {x, y, y’}).
On simule un perturbation sur y0 puis sur y’0. On constate que les solutions sont très
peu perturbées puisque les valeurs numériques des points ne varient de quelques %
(cf page7 et 8 des copies matematica) la méthode semble tout aussi robuste.
'
i
i
y
y
En ne calculant que quelques points (3 sur [0 ; 1]) on constate de même que la
solution est de qualité est pas trop éloigné de la solution avec une subdivision en 5
de l’intervalle (cf page 9 des copies matematica).
Par contre quand on essai de subdivisé cette intervalle en 7 on constate que de
même que pour la thode précédente, les nombres entiers des fractions calculées
sont encore plus important que la méthode d’Euler vectoriel alors que nous avons
moins subdivisé l’intervalle (7 au lieu de 10) (cf page 9 des copies matematica).
En effet on a effectué un essai pour une subdivision de 10 et mathematica a alors
calculé une estimation décimal des fractions.
En conclusion, cette méthode de Runge Kutta vectoriel d’ordre 2 semble plus précise
et plus robuste que celle d’Euler mais nécessite une approximation cimale des
résultats pour devenir plus rapide.
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !