
|
|
Avec l'aide de
l'ordinateur et d'un petit programme en JavaScript,
nous allons calculer une aire par une méthode aléatoire (dite
de Monte-Carlo)
sans recours au calcul intégral. Notre outil sera
la loi
faible des grands nombres de
Jakob
Bernoulli.
La méthode est appliquée au :
| Théorie : |
Soit f une fonction continue et positive
sur [a,b] dont nous notons m le maximum sur cet intervalle.
L'aire cherchée est :
ici représentée comme une cible, est touchée par une fléchette si les coordonnées x et y de la pointe de celle-ci vérifient :
Tirons donc une fléchette en décidant que l'univers des éventualités est l'ensemble des points du rectangle délimité par les droites [x = a], [x = b], l'axe des abscisses x'x et la droite [y = m] où m est le plus grand des deux nombres f(a) et f(b). Notons S l'aire de ce rectangle. L'ordinateur va simuler le lancement d'une fléchette dans ce rectangle grâce à sa fonction génératrice de nombres aléatoires. Si cette fonction est efficace, on peut admettre l'équiprobabilité des éventualités.
La probabilité de "tomber" dans la cible, c'est à dire d'atteindre un point de l'aire A cherchée, est (intuitivement?) A/S. La répétition de N tirages engendre une variable aléatoire binomiale B(N;A/S) et, d'après la loi faible des grands nombres de Jakob Bernoulli, si on note F le nombre de fois où la fléchette est tombée dans la cible, on a donc, pour N suffisamment grand :
| Testons maintenant la méthode pour calculer le logarithme népérien de 2 : |
![]()
La fléchette est tombée dans l'aire hachurée
A si son ordonnée, notée yr dans le programme, est inférieure
à y = f(x), soit ici, si yr
1/x.
La
fonction Math.random génère un nombre
aléatoire. En fait le nombre u obtenu est pseudo-aléatoire car
généré entre 0 et 1 (0 < u < 1) par un
récurrence comme :
où a et b sont puisés, par exemple, à partir de l'heure à laquelle l'utilisateur met en route le programme. L'instruction FRAC retourne la partie décimale d'un nombre : FRAC(x) = x - E(x), c'est à dire x privé de sa partie entière.
En posant d = b - a, l'instruction x = a + d*random() fournit x dans l'intervalle ]a,b[ puisque 0 < random() < 1. Ici x variera donc de 1 à 2 : notons que le fait "d'intégrer" sur l'ouvert ]1,2[ ne modifie pas la valeur de l'intégrale. L'instruction
évite de préciser Math. devant chaque fonction mathématique utilisée.
| Programmation JavaScript de la méthode : |
|
<SCRIPT LANGUAGE=JavaScript> function integr() |
Le programme accepte pi et e. On peut
entrer, par exemple, 2*pi/3, sqrt(e) pour
Par défaut, le programme calcule ln 2 en intégrant 1/x sur l'intervalle [1,2]. La convergence... aléatoire, est due à l'aspect non purement aléatoire de la fonction random : il n'y a pas équiprobabilité. |
|
Testons la méthode pour calculer une valeur approchée du nombre p : |
On suppose, ci-dessus, A(6,0) et C(0,3). L'aire du
rectangle OABC est 18 unités d'aire; celle du demi-disque
D de
diamètre OA est 9p/2.
Le rectangle OABC est la cible dans laquelle on lance des fléchettes au hasard. On admet en outre qu'aucune fléchette ne tombe en dehors du rectangle (l'ordinateur nous y aidera...)
Ici, point d'intégrale, on connaît l'aire du disque. La probabilité qu'une fléchette tombe dans le demi-cercle est égale au rapport des aires, soit :
Lançons n fléchettes et appelons
F le nombre de fois où nous sommes tombés dans le
demi-cercle, événement considéré comme un
succès; nous sommes en présence d'une loi
binomiale
B(n,p/4).
D'après la loi
faible des grands nombres, la variable
B converge en probabilité vers
p/4
lorsque n tend vers l'infini . C'est dire que si n est assez grand,
on doit avoir, en appelant F le nombre de fois où la
fléchette est tombée dans le demi-cercle : F/n
p/4,
soit :
L'équation du demi-cercle est (x - 3)2 + y 2= 9 , x variant de 0 à 6 et y, de 0 à 3.
L'ordinateur doit simuler un tirage à l'intérieur du rectangle afin que l'univers des éventualités soit effectivement les tirs dans le rectangle. Si la fléchette tombe dans le demi-cercle, F augmente de 1.
| Programmation JavaScript de la méthode : |
|
<SCRIPT LANGUAGE=JavaScript> function go() |
Cette méthode pour calculer p est bien évidemment plus insolite, voire rigolote, que précise... |
Aiguille de Buffon :
Autres calculs de p
: