• Aucun résultat trouvé

Séance 13: Méthode d Euler et Simulation de variables aléatoires

N/A
N/A
Protected

Academic year: 2022

Partager "Séance 13: Méthode d Euler et Simulation de variables aléatoires"

Copied!
8
0
0

Texte intégral

(1)

Séance 13: Méthode d’Euler et Simulation de variables aléatoires

Cours d’informatique de BCPST Première année.

(2)

1 Méthode d’Euler 2 1.1 Principe . . . 2 1.2 Expression mathématique . . . 3 1.3 Un exemple dans un cas simple . . . 4

2 Simulation de variables aléatoires 4

2.1 Généralités . . . 4 2.2 Lancers de dés . . . 5 2.3 Lancer d’une pièce . . . 7

3 Anticipations possibles avant le TP 7

(3)

Séance 13: Méthode d’Euler et Simulation de variables aléatoires

1. Méthode d’Euler

En théorie, on sait résoudre les équations différentielles linéaire du première ordre. Néanmoins, cette résolution fait souvent appel à deux reprises (solution générale, puis variation de la constante) à un calcul de primitive et il y a des fonctions, commet7→exp(−t2), qu’on ne sait pas primitiver. En outre, si l’équation différentielle proposée n’est pas linéaire, il n’y a pas de méthode générale de résolution théorique. Tout cela nous amène à réfléchir à une méthode de résolution approchée, les deux grandes méthodes classiques sont les suivantes :

• La méthode analytique : L’approximation de la solution prend généralement la forme d’une série tronquée (la notion de série sera vue en deuxième année). Cette méthode repose sur le développement en série entière, outil qui n’est pas au programme des bcpst.

• La méthode de discrétisation : Elle consiste à approcher la solution en un nombre fini de points d’un intervalle fixé.

Nous allons voir dans ce cours la méthode d’Euler qui est une des méthodes de discrétisation les plus simples.

1.1 Principe

La méthode d’Euler est une méthode de résolution numérique de certaines équations différentielles.

Une équation différentielle linéaire du premier ordrey0(t) =g1(t)y(t) +g2(t) d’inconnueyfonction dérivable sur I, un intervalle de réels connu, avecg1etg2 deux fonctions connus et fixés peut s’écrire aussi, pour touttde I, on veut :y0(t) =f(t, y(t)) avec :

f :





I×R - R

(α,β) - g1(α)β+g2(α)

Plus généralement, si I est un intervalle deR,une équation différentielle du premier ordre est une équation de la formey0(t) =f(t, y(t)) oùf : I×R→Rest une une fonction de deux variables. Si f possède des propriétés favorables, des théorèmes assurent que, la condition initiale étant donnée, il existe une unique solutiony à cette équation différentielle (pas toujours définie sur I tout entier), mais en pratique, on est rarement capable de déterminer explicitement cette solution. L’objectif de la méthode d’Euler est d’en avoir une approximation. On verra que cette méthode fonctionne plutôt bien pour les équations différentielles linéaires et pour les équationsy0(t) =f(t, y(t)) avecf de classe C1 suffisamment régulière.

On considère donc une équation différentielle (E) :y0(t) =f(t, y(t)) du premier ordre avecaetbdeux réels tels quea < betf : [a, b]×R→Rune fonction de deux variables. Supposons qu’il existe une solutionϕ de (E).On suppose connueϕ(a) (et doncϕ0(a) carϕest une solution de (E)) et on cherche une approximation deϕsur [a, b] (car on suppose queϕn’est pas connu, on a juste à notre disposition l’équation (doncf),ϕ(a) etϕ0(a)).

On pose u0 =ϕ(a). Comme ϕ0(a) = lim

h0

ϕ(a+h)−ϕ(a) h

!

, on a, si hest un réel non nul proche de 0, l’approximation suivante :

ϕ(a+h)−ϕ(a)

h0(a).

Or on sait queϕ0(a) =f(a,ϕ(a)), on en déduit :

ϕ(a+h)'ϕ(a) +h×f(a,ϕ(a)).

Pour obtenir une valeur approchée u1 deϕ(a+h), on remplace ϕ(a) par u0 dans l’approximation précédente, on définit ainsiu1 par u1=u0+hf(a, u0).

Institut d’Alzon 2020/2021 page 2

(4)

De même, on a : ϕ(a+ 2h)−ϕ(a+h)

h0(a+h) sihest un réel non nul proche de 0, ce qui donne : ϕ(a+ 2h)'ϕ(a+h) +h×f(a+h,ϕ(a+h)).

Cette fois, on remplaceϕ(a+h) paru1 et on pose u2=u1+h×f(a+h, u1).On remarque queu2est une approximation deϕ(a+ 2h) calculée à partir d’une approximation deϕ(a+h) (à savoiru1).

Plus généralement, on définit par récurrence (uk)k∈Npar :

u0 =ϕ(a) et, pour tout entier naturelk, on pose :uk+1=uk+h×f(a+h×k, uk)

de sorte que, pour tout entier naturel k, uk soit une valeur approchée de ϕ(a+h×k). Les valeurs approchéesu0, u1, u2, . . .sont de plus en plus mauvaises car elles s’appuient sur les approximations déjà effectuées précédemment, d’où l’intérêt de choisirhtrès petit.

1.2 Expression mathématique

On choisit un grand entier naturel non nul N et on poseh=ba

N . Pour avoir une valeur approchée de ϕ(a+hk) pour toutkdeJ0,NK, on calcule le terme généraluk de la suite finie (uk)k

J0,NKdéfinie par : u0=ϕ(a) et, pour toutkdeJ0,N−1K, on pose :uk+1=uk+ba

N ×f a+ba

N ×k, uk

!

Pour toutkdeJ0,NK, on a :uk 'ϕ(α+hk). On a en particulieruN'ϕ(b). Cette approximation est a priori bonne si on choisit N grand.

En utilisant ces approximations, on a obtenu :

(5)

Séance 13: Méthode d’Euler et Simulation de variables aléatoires

1.3 Un exemple dans un cas simple

On va appliquer la méthode d’Euler pour trouver une approximation de la solution u du système différentielle suivant :

t∈[0,T], y0(t) =c×y(t) et y(0) =a

d’inconnueyfonction dérivable sur [0,T] avec T un réel strictement positif, etaetc deux réels fixés.

Si on posef : (α,β)7→ alors on cherche trouver une approximation de la solutionu du système différentielle suivant :

t∈[0,T], y0(t) =f (t, y(t)) et y(0) =a

Pour appliquer la méthode d’Euler, on va donc poserz0 =aet, pour tout entierkdeJ0,N−1K, on pose :

zk+1=zk+czk× T N

=zk×

1 +c× T N

.

On remarque qu’on sait résoudre le problème posé et que la solution g du système différentielle proposé est :

g:





[0; T] −→R t 7→exp (ct).

On note que l’approximation proposée par la méthode d’Euler est correcte car, pour toutkdeJ1,N−1K, on a donc :

zk =

1 +c× T N

k

. On sait que lim

N+

1 +c× T N

N

= exp (cT), on obtient donc que : lim

N+(zN) = exp (cT) (ce qui est la valeur attendue).

2. Simulation de variables aléatoires

Nous allons voir dans cette partie quelques exemples de simulation de variables aléatoires en Python.

On rappelle qu’une variable aléatoire est une fonction renvoyant une quantité numérique à partir d’une expérience aléatoire, c’est par exemple le cas du résultat X obtenu en lançant un dé à 6 faces.

2.1 Généralités

Les fonctions que nous allons utiliser le plus souvent se trouvent dans le module random de la bibliothèquenumpy:

• rand(), qui renvoie un flottant aléatoire dans ]0,1[ ;

• la fonction randint(a,b), qui renvoie un entier aléatoire dans compris entrea inclus et b exclu.

On peut tester en tapant les instructions suivantes dans la console : import numpy . random as nr

nr . rand () nr . rand ()

Institut d’Alzon 2020/2021 page 4

(6)

nr . randint (1 ,100) nr . randint (1 ,100)

Pour en savoir plus sur une variable aléatoire discrète à l’aide d’un ordinateur, on suivra souvent ces différentes étapes :

• Première étape : Simulation

On commence par simuler une fois cette variable. Cette étape nécessite fréquemment l’utili- sation du modulerandom. Simuler, cela signifie que l’on ne fait pas l’expérience mais que le programme nous renvoie un résultat qui est cohérent avec l’expérience. Par exemple, si on veut simuler une variable aléatoire qui renvoie 1 quand on obtient pile avec le lancer d’une pièce équilibrée, 0 sinon alors on va implémenter un programme renvoyant 1 avec une probabilité de 1

2, 0 sinon.

• Seconde étape : Répétition

On crée ensuite un programme simulant un grand nombre de fois cette opération et on renvoie une liste des résultats.

• Troisième étape : Visualisation

On va visualiser la loi de cette variable aléatoire à l’aide d’un histogramme. La fonction histdu modulematplotlibpermet de tracer l’histogramme d’une liste. Sixest un vecteur contenant des nombres compris dans un intervalle I (l’univers image de la variable aléatoire), alors l’instruction hist(x,n) divise l’intervalle I en n tranches égales et indique, sur un histogramme, combien d’éléments du vecteurxtombent dans chaque tranche.Si le vecteur est la liste des valeurs prises par une variable aléatoire lors d’une même expérience répétée un très grand nombre de fois (mettonsN), l’histogramme sera essentiellement celui de la loi de la variable aléatoire, où toutes les valeurs ont été multipliées parN(les valeurs ne sont pas ici des probabilités mais des nombres d’occurrences).

• Dernière étape : Moyenne

Pour avoir une idée de la moyenne de notre variable aléatoire, on sait (d’après la loi des grands nombres qui sera vue à la fin de la deuxième année) que, si le nombre de lancers est assez grand, la moyenne des résultats obtenus sur la suite de lancers (la moyenne empirique) fournit une bonne approximation de l’espérance de la variable aléatoire.

On va appliquer ce principe dans deux cas simples : le lancer de dé et le jet d’une pièce.

2.2 Lancers de dés

La variable qui nous intéresse dans cette partie donne le résultat d’un dé équilibré à 6 faces (qu’on pourrait facilement généralisé en le jet d’un d’un dé équilibré à nfaces, nentier naturel non nul, cas particlier d’une loi uniforme). On va suivre les différentes étapes données dans le paragraphe

"Généralités" :

• Première étape : Simulation

On effectue l’expérience aléatoire une fois, notre fonction nous renvoie donc le résultat du dé, on propose le programme suivant :

import numpy as np def de ():

return np . random . randint (1 ,7)

• Seconde étape : Répétition

On répète un grand nombre de fois l’expérience (on a mis 1000 par défaut) et on renvoie une liste des résultats :

def Simul (n =1000):

(7)

Séance 13: Méthode d’Euler et Simulation de variables aléatoires

return [ de ( ) for i in range(n )]

On a obtenu :

>>> Simul (20)

[2 , 6, 2, 5, 5, 3, 1, 3, 4, 1, 2, 3, 3, 1, 3, 4, 3, 2, 6, 6]

• Troisième étape : Visualisation

On trace ensuite un histogramme à l’aide des programmes précédents, on peut taper ainsi les instructions suivantes dans l’éditeur de commandes :

import matplotlib . pyplot as plt x = Simul ()

plt . hist (x ,6) pour obtenir :

• Dernière étape : Moyenne

On calcule maintenant la moyenne empirique (sur un grand nombre de réalisations) pour avoir une idée de l’espérance de notre variable aléatoire :

def Moyenne (n =1000):

a= Simul (n) s =0

for k in a:

s += k return (s/n)

On obtient une moyenne de 3,5.

Institut d’Alzon 2020/2021 page 6

(8)

2.3 Lancer d’une pièce

On souhaite dans cette partie simuler le lancer d’une pièce, équilibrée ou non (Loi de Bernoulli). Cette pièce donne pile avec une probabilitép(pétant un réel de ]0,1[ connu), notre variable aléatoire prend la valeur 1quand la pièce a donné pile, 0 sinon. On suit de nouveau les différentes étapes données du paragraphe "Généralités" :

• Première étape : Simulation def Piece (p ):

t = nr . rand () if t < p:

return 1 else:

return 0

que l’on peut réécrire plus simplement en : def Piece (p ):

return( nr . rand () < p)

• Seconde étape : Répétition

On répète un grand nombre de fois l’expérience (on a mis 1000 par défaut) et on renvoie une liste des résultats :

def Simul (n =1000 , p ):

return [ Piece (p) for i in range(n )]

• Troisième étape : Visualisation

On trace ensuite un histogramme à l’aide des programmes précédents, on peut taper ainsi les instructions suivantes dans l’éditeur de commandes :

import matplotlib . pyplot as plt x = Simul ()

plt . hist (x ,2)

• Dernière étape : Moyenne

On calcule maintenant la moyenne empirique : def Moyenne (n =1000):

a= Simul (n) s =0

for k in a:

s += k return (s/n)

On obtient une moyenne de 0,5.

3. Anticipations possibles avant le TP

Avant le prochain TP, je peux faire les choses suivantes :

• Bien comprendre la méthode d’Euler et reprendre les exemples traités.

• Bien comprendre la notion de simulation de variable aléatoire, en particulier les deux exemples vus.

• S’assurer d’avoir les bibliothèques Numpy et Matplotlib.

Références

Documents relatifs

équiprobable un nombre à au plus dix décimales, entre 0 et 1 inclus. On s'intéresse maintenant à la variable aléatoire qui donne au hasard et de façon équiprobable un

Paternité-Partage des Conditions Initiales à l'Identique 2.0 France disponible en ligne http://creativecommons.org/licenses/by-sa/2.0/fr/1. 3 Rémy Nicolai

— La fonction 1:NbrAléat donne une nombre décimal «au hasard» dans l’intervalle [0 ; 1[.. — La fonction 5:nbrAléatEnt (a,b) donne une nombre entier «au hasard»

[r]

On lance trois fois de suite une pièce équilibrée, calculer la probabilité des événements suivants:. A : avoir exactement deux piles B : avoir au moins deux piles C : avoir au plus

Lorsqu’on répète une expérience un très grand nombre de fois , la fréquence de n’importe quel événement de cette expérience finit par se stabiliser autour d’un nombre qui

(, P) est un espace probabilisé. Une variable aléatoire réelle est une fonction X définie sur l’univers  qui à chaque résultat possible associe un réel.. constituent

L’espérance mathématique d’une variable aléatoire peut être interprétée comme la moyenne des valeurs prises par lors d’un grand nombre de répétitions de la même