• Aucun résultat trouvé

2 Méthodes d’Euler

N/A
N/A
Protected

Academic year: 2021

Partager "2 Méthodes d’Euler"

Copied!
4
0
0

Texte intégral

(1)

I NTÉGRATION NUMÉRIQUE DES ÉQUATIONS DIFFÉRENTIELLES DU PREMIER ORDRE

T P 4 - SIM-NUM-3

1 Introduction

1.1 Objectif

OBJECTIF :

L’objectif de ce tp est de calculer une solution ap- prochée du problème de Cauchy suivant :







y(x) = −y

x, ∀x∈[1,10]

y(1) = 1 (1)

qui admet y(x)= 1

x comme solution exacte.

Il s’agit alors d’écrire sous Python , le programme permettant de ré- soudre numériquement ce problème à partir des méthodes suivantes :

• méthode d’Euler explicite

• méthode d’Euler implicite

• méthode de Heun (RK2)

• méthode de Runge Kutta d’ordre 4 (RK4)

• utilisation de la bibliothèque (Python ou Scilab)

1 2 3 4 5 6 7 8 9 10

0 0.5 1

y1(x)= 1 x y3(x)= 3 x y6(x)= 6 x y8(x)= 8 x y10(x)= 10 x

FIGURE1 – Fonctions yk(x)= k

x avec pour k=1, yksolution du problème de Cauchy (1).

LYCÉECARNOT(DIJON) 1/4 INFO-MPSI-1 - TP 4 - SIM-NUM-3

(2)

1.2 Rappel du cas général

Le problème de Cauchy consiste à trouver les fonctions Y de [0,T ]→RN, telles que :











 dY

dt =F(t,Y) Y(t0)=Y0

où t0∈[0,T ] et Y0∈RNsont des données.

Dans le problème posé (1) :

tx

Yy(x) F(t,Y) → −y

x t0x0=1 Y0 → 1

Les méthodes de résolution numérique des équations différentielles sont basées sur des techniques d’estimation de l’inté- grale de la fonction F.

On s’intéressera dans ce tp aux méthodes de résolution à un pas qui se mettent sous la forme générale :







Yi+1=Yi+h.Φ(t,Y,h) Y(t0)=Y0

oùΦest donné par la méthode.

1.3 Arguments

Pour construire une fonction permettant de trouver les (yi)n0, il est possible de choisir différents types d’arguments. On peut :

entrer les bornes a, b et le nombre de points n. 1 def EulerExp(f,y0,a,b,n):

entrer les bornes a, b et le pas h. 1 def EulerExp(f,y0,a,b,h):

entrer la borne de gauche a, le nombre de points n et le pas h. 1 def EulerExp(f,y0,a,n,h):

• entrer un vecteur de points en abscisses. 1 def EulerExp(f,y0,X):

Nous opterons pour le dernier cas qui permet d’intégrer le premier cas avec linspace ou le deuxième avec arange :

1 EulerExp(f,y0,numpy.linspace(a,b,n)): 1 EulerExp(f,y0,numpy.arange(a,b+h,h)):

2 Méthodes d’Euler

2.1 Méthode d’Euler explicite

LYCÉECARNOT(DIJON) 2/4 INFO-MPSI-1 - TP 4 - SIM-NUM-3

(3)

Dans la méthode d’Euler explicite, la fonction d’approximation au pas i estΦ=F(ti,Yi).

Q - 1 : Programmer la méthode d’Euler explicite dans le cas à une dimension i,e où F et Y sont des scalaires.

La relation de récurrence non simplifiée permettant de résoudre (1) est alors :

yi+1 =yi+h.yi

xi

!

=y0. 1−h 1+i.h

Quelque soit h∈R+, yitend vers 0 quand i tend l’infini.

Q - 2 : Que se passe-t-il si h=1, h>1 et h∈[0,1[ ?

Q - 3 : Appliquer le programme précédent à la fonction f (x,y)= −y

x dans les trois cas précédents. Comparer avec les valeurs obtenues en calculant directement les (yi)n0par la formule de récurrence donnée précédemment.

Q - 4 : Tracer l’évolution de l’erreur de consistance en fonction des (xi)n0pour différents pas h.

2.2 Méthode d’Euler implicite

Dans la méthode d’Euler explicite, la fonction d’approximation au pas i estΦ=F(ti+1,Yi+1).

La relation de récurrence dans le cas à une dimension est : yi+1=yi+h.f (xi+1,yi+1) Il s’agit alors de résoudre à chaque itération l’équation :

gi(Y)=0 avec gi(Y)=yi+h.f (xi+1,Y)Y et gi(Y)=h.f (xi+1,Y)

∂Y −1

La résolution sera faites à l’aide de la fonction scipy.optimize.newton .

Q - 5 : Programmer la méthode d’Euler implicite avec prise en compte de la dérivée dans les arguments.

1 def EulerImp(f,fp,y0,X): avec f p la fonction dérivée de f , y0 la valeur initiale et X le vecteur constitués des points (xi)n0.

Pour la récurrence, on pourra utiliser la ligne suivante :

1 newton(lambda Y:y[i-1]+h.f(X[i],Y)-Y,y[i-1],lambda Y:h.fp(X[i],Y)-1)

3 Méthode de Runge Kutta

La méthode générale de Runge Kutta consiste à déterminerΦà partir d’approximations successives. On choisit

Φ(t,Y,h)= Xq

m=1

ωm.km(t,Y,h) avec k1(t,Y,h)=F(t,Y)

pour m≥2, km(t,Y,h)=F(tm.h,Y+

m1

X

j=1

βm j.kj(t,Y,h))

LYCÉECARNOT(DIJON) 3/4 INFO-MPSI-1 - TP 4 - SIM-NUM-3

(4)

3.1 Méthode de Heun (RK2)

Pour cette méthode, q=2 Le relation de récurrence est Yi+1=Yi+ h

2.F(ti,Yi)+h

2.F(ti+h,Yi+h.F(ti,Yi)).

On a donc prisΦ(τ,Y,h)= k1+k2

2 avec : k1=F(ti,Yi) et k2 =F(ti+h,Yi+h.k1).

Dans le cas scalaire :

yi+1=yi+ h 2.











 f (xi,yi)

| {z } k1

+f (xi+h,yi+h.

k1

z }| { f (xi,yi))

| {z } k2













Q - 6 : Construire la fonction Heun( f,y0,X) relative à la méthode de Heun détaillée précédemment.

Q - 7 : Déterminer expérimentalement l’ordre de la méthode.

3.2 Méthode de Runge Kutta 4 (RK4)

La fonctionΦestΦ(t,Y,h)= 1

6.(k1+2.k2+2.k3+k4) avec quatre évaluations successives de F : k1(t,Y,h) = F(t,Y)

k2(t,Y,h) = F(t+h 2,Y+ h

2.k1(t,Y,h)) k3(t,Y,h) = F(t+h

2,Y+ h

2.k2(t,Y,h)) k4(t,Y,h) = F(t+h,Y+h.k3(t,Y,h))

k1(x,Y,h) = f (xi,yi) k2(x,Y,h) = f xi+ h

2,yi+ h

2.k1(t,Y,h)

!

k3(x,Y,h) = f xi+ h 2,yi+ h

2.k2(t,Y,h)

!

k4(x,Y,h) = f (xi+h,yi+h.k3(t,Y,h))

d’où yi+1 =yi+h

6.(k1+2.k2+2.k3+k4)

Q - 8 : Construire la fonction RK4( f,y0,X) relative à la méthode de Runge Kutta 4 détaillée précédemment.

4 Synthèse

La résolution du problème (1) est implémenté dans le module scipy. Il suffit d’appeler la fonction scipy.integrate.odeint pour l’utiliser. Cette fonction est optimisée par rapport à celle que nous venons de créer.

Q - 9 : Comparer graphiquement les solutions approchées calculées par chacune des méthodes.

Q - 10 : Comparer les erreurs de consistance et les vitesses de convergences des différentes méthodes ainsi que les temps de calculs.

LYCÉECARNOT(DIJON) 4/4 INFO-MPSI-1 - TP 4 - SIM-NUM-3

Références

Documents relatifs

[r]

Fonctions Spéciales (scipy.special (http://docs.scipy.org/doc/scipy/reference/special.html)) Intégration (scipy.integrate

Despr´ es and Lagouti` ere’s idea was to combine advantages from both upwind and downwind strategies by choosing the numerical fluxes as close as possible to the downwind flux

D’après le cours, il suffit de dire que la fonction f est dérivable au point

Dans ce diagramme, on voit bien le ralentissement de la vitesse lorsque le pendule remonte (angles compris entre 2 kπ et p 2 k ` 1 qπ parcourus dans l’ordre croissante),

scipy is the core package for scientific routines in Python; it is meant to operate efficiently on numpy arrays, so that numpy and scipy work hand in hand. Before implementing

L’auteur croit également qu’avec quelques changements judicieux, L A TEX peut être utilisé avec succès pour la composition en accès aléatoire d’un document unique..

Il, elle, on a appelé Nous avons appelé Vous avez appelé Ils, elles ont appelé Le verbe