4.11 Les m´ethodes de Monte-Carlo
4.11.5 Int´egration multidimensionnelle sur des domaines compliqu´es
4.11.5.1 Principes
Au chapitre 4.3.2, on a vu des m´ethodes d’int´egrations
`
a une dimension comme la m´ethode des trap`ezes. Celle-ci
se g´en´eralise sans difficult´e `a des int´egrales multidimen-sionnelles du type :
Z b1
a1
Z b2
a2
. . . Z bn
an
f(x1, x2, . . . , xn)dxn. . . dx2dx1
Ce type d’int´egrale correspond en fait `a des domaines d’int´egration de g´eom´etrie simple (rectangle `a deux dimen-sions, parall´el´epip`ede `a trois dimensions, etc.) ; on peut dans une certaine mesure, par des changements de vari-ables appropri´es (coordonn´ees cylindriques ou sph´eriques) adapter l’int´egration `a d’autres g´eom´etries. Il y a toutefois des limites.
Figure 4.41 – Un domaine d’int´egration un peu com-pliqu´e. . .
Imaginons, par exemple, que l’on veuille calculer la fig-ure d’interf´erences donn´ee par deux fentes d’Young, mais la source lumineuse, au lieu d’ˆetre ponctuelle, est un fila-ment d’ampoule ´electrique ´epais, torsad´e et courb´e (figure 4.41), ou, pire, une galaxie vue `a travers un t´elescope : comme la source est incoh´erente, il faut donc int´egrer les intensit´es lumineuses issues de chaque point de la source.
Le domaine d’int´egration est donc la source : il n’y a gu`ere d’habile changement de variable qui saute aux yeux !
Il existe une premi`ere solution qui consiste `a int´egrer sur un volume de g´eom´etrie simple qui englobe la source, en fixant la valeur de l’intensit´e lumineuse `a z´ero en dehors de la source.
L’autre solution consiste `a tirer au sort des points dans ce volume (figure 4.42), d’ignorer les points qui sont en dehors de la source et de ne compter que ceux qui sont sur la source. Cette deuxi`eme solution, si elle peut paraˆıtre un peu absurde, a au moins deux m´erites : 1oelle est simple `a mettre en œuvre, et 2oelle permet de tracer le graphe du r´esultat en fonction du nombre de tirages au sort, de sorte que lorsque le r´esultat ne fluctue que d’une valeur inf´erieure `a un certain seuil, on peut consid´erer que l’int´egrale est calcul´ee avec cette pr´ecision (c’est un peu comme sur la figure 4.37 o`u l’on peut consid´erer que π est calcul´e `a partir du moment o`u les fluctuations sont inf´erieures `a la pr´ecision souhait´ee).
90 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan
d
d
Figure 4.42 – Si l’on veut calculer l’int´egrale d’une fonc-tion dans un espace compliqu´e, on peut englober cet es-pace dans un (hyper)cube, ici un carr´ed×d, tirer au sort des points dans ce carr´e, c’est-`a-dire, pour chaque point, tirer deux nombres compris entre 0 et d et n’ajouter la valeur de la fonction en ce point que s’il se trouve dans l’espace d’int´egration. Sinon, on l’ignore et on fait un nou-veau tirage.
4.11.5.2 Tentative ≪ na¨ıve ≫.
Prenons un autre exemple : on veut calculer, ID=
Z
D
sin(xy)dx dy o`uDest le domaine d’int´egration. Si
D={(x, y), tels quex2+y2< π} c’est facile :ID= 0 ; mais si (figure 4.43)
D={(x, y), tels que 4 tanh(x−y) e−(x2+y2)>0.4} (4.31) c’est nettement plus compliqu´e ! Il suffit toutefois de tirer
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2 −2
−1.5
−1
−0.5 0 0.5 1 1.5 2 1
0.8 0.6 0.4 0.2 −0.2 −0.4 −0.6 −0.8 −1 0.0
Figure 4.43 – Le domaine d’int´egration D d´efini par l’´equation (4.31) est d´elimit´e par la courbe continue rouge. . .
au sort des nombresxetydans l’intervalle [−2,2], et, si la condition de l’´equation (4.31) est v´erifi´ee, additionner la
quantit´e sin(xy) `a toutes celles d´ej`a obtenues. Il faut alors normaliser le r´esultat en multipliant cette somme S par VD
nc
o`u VD est le volume (ici, avec deux variables seule-ment, c’est en fait une surface) deD et nc est le nombre de≪coups au but≫c’est-`a-dire le nombre de fois o`u l’on est tomb´e dansD. Que vaut alorsVD? Il suffit de repren-dre le raisonnement utilis´e pour calculerπ par le rapport de la surface du cercle `a celle du carr´e : c’est le volume totalVt dans lequel on a fait des tirages multipli´e par la proportion de coups au but :
VD =Vt
nc
nt
o`u nt est le nombre total de tirages. Ainsi, en fin de compte,
ID =SVt
nt
Le programme qui fait cela est extrˆemement simple : program integr
implicit none real :: x, y, s
integer :: i, imax = 100000000, n s = 0. ; n = 0
open(10,file=’integr_sin.out’) do i = 1, imax
x = 4*(rand()-0.5) ; y = 4*(rand()-0.5) ! [-2,2]
if ( 4*tanh(x-y)*exp(-(x**2 + y**2)) > 0.4 ) &
s = s + sin(x*y) if ( mod(i,5000) == 0 ) write(10,*) i, 16*s/i enddo
write(*,*) 16*s/imax end
C¸ a donne -8.9420289E-02 pour 108 tirages et quelques secondes de calcul. Le r´esultat en fonction du nombre de tirages est represent´e sur la figure 4.44. Les huit chiffres
-0.092 -0.09175 -0.0915 -0.09125 -0.091 -0.09075 -0.0905 -0.09025 -0.09 -0.08975 -0.0895 -0.08925 -0.089 -0.08875 -0.0885
100000 1e+06 1e+07 1e+08
n_t
Figure4.44 – Valeurs obtenues pourID avec le domaine (4.31) en fonction du nombre de tirages (l’axe desxa une
´echelle logarithmique).
≪significatifs≫du r´esultat ci-dessus ne sont ´evidemment pas tous significatifs ! On constate ais´ement sur la figure qu’avec tous ces tirages, on en a au plus 3, soit ID ≃
−0.0894. . . Peut-on ˆetre plus efficace ?
4.11.5.3 Marche au hasard dans D
Dans le calcul pr´ec´edent, on a tir´e au sort des nombres dans un domaine plus grand que le domaine d’int´egration
Det on a simplement ´elimin´e tous les tirages qui tombaient en-dehors deD. On est en droit de se dire que c’est ineffi-cace et qu’il vaudrait mieux tenter de ne tirer des nombres que dans le bon domaine : c’est en toute rigueur impossi-ble, mais, si, partant d’un point choisi dansD(par exem-ple (0.5,−0.5) dans la figure 4.43), au lieu de tirer d’autres nombres de fa¸con ind´ependante, on se borne `a se d´eplacer au hasard dans le domaine, soit tirer au sort, non pas un point, mais un petit d´eplacement (dx, dy), quitte `a rejet-ter les d´eplacements qui font sortir du domaine, on devrait passer l’essentiel du temps (ou plutˆot des tirages au sort) dans le bon domaine.
Ainsi, on peut commencer par fixer un point de d´epart dansD:
x0 = 0.5 ; y0 = -0.5 dans l’exemple ci-dessus, puis calculer des d´eplacements −δx< dx < δx et −δy < dy <
δy :
dx = 2*delta_x*(rand()-0.5) dy = 2*delta_y*(rand()-0.5)
et ajouter cela aux anciennes valeurs de xet y. Si le nou-veau point obtenu est dansDle d´eplacement est conserv´e, sinon, il est rejett´e (c’est-`a-dire que l’on revient `a la po-sition pr´ec´edente). Dans tous les cas (voir une discussion d´etaill´ee de ce point dans la r´ef. [21]), on ajoute la valeur de la fonction `a la somme que l’on aura d´ej`a initi´ee.
En divisant cette somme par le nombre de tirages, on ob-tient la valeur moyenne de la fonction dans le domaine : il
≪suffit≫de multiplier par le volume du domaineVDpour obtenir le r´esultat. Si on connait ce volume, c’est en effet assez facile, sinon, par exemple dans le cas de l’´equation (4.31), il faut le calculer. . . par une m´ethode Monte-Carlo ! C’est ce qui est fait fig. 4.45 et l’on obtient des r´esultats assez similaires `a ce qu’on avait pr´ec´edemment.
-0.09 -0.0898 -0.0896 -0.0894 -0.0892 -0.089 -0.0888 -0.0886 -0.0884 -0.0882 -0.088
1e+07 2e+07 4e+07 8e+07
n
Figure 4.45 – Valeurs obtenues pourID avec le domaine (4.31) en fonction du nombre de tirages (l’axe desxa une
´echelle logarithmique) comme dans la figure 4.44, mais cette fois-ci par une marche au hasard dans le domaine d’int´egration D.
Qu’a-t-on gagn´e en faisant tout cela ? Pas grand-chose, il faut le reconnaˆıtre, en termes de performances de calcul ; toutefois, on est rassur´e que cela≪marche ≫, ce qui sera pr´ecieux quand on n’aura plus le choix. . .
4.11.5.4 Echantillonnage par l’importance (im-´ portance sampling)
Pourrait-on, pour ainsi dire, ≪ guider ≫ le hasard ? Il faudrait pouvoir≪dire≫au hasard quand ¸ca vaut le coup de faire le calcul, car calculer l’int´egrale d’une fonction en sommant au hasard partout, y compris l`a o`u elle est nulle ou presque n’a pas grand int´erˆet. Autrement dit, il serait peut-ˆetre habile d’utiliser des tirages au sort, non pas avec des distributions uniformes comme jusqu’`a pr´esent, mais avec des distributions qui favorisent les endroits o`u la fonc-tion a des contribufonc-tions non n´egligeables. Formellement, cela donne, avec l’exemple du calcul≪na¨ıf≫ ci-dessus (§
4.11.5.2) :
ID= Z
D
sin(xy)dx dy= Z
D
sin(xy)
p(x, y) p(x, y)dx dy o`u p(x, y) est une densit´e de probabilit´e choisie de fa¸con
`
a avoir des valeurs plus importantes l`a o`u la fonction a elle-mˆeme des valeurs plus importantes.On sommera alors les valeurs prises par sin(xy)
p(x, y), o`u maintenantxet y sont choisis avec la densit´e de probabilit´ep(x, y). On pourrait
´evidemment choisir comme distribution la fonction elle-mˆeme, toutefois produire des nombres al´eatoires avec une distribution de probabilit´e sin(xy) comme ici n’est peut-ˆetre pas si facile que cela. Une approximation de la fonc-tion peut suffire : ici, il suffit de poser,
p(x, y)∝ |xy|
puisqu’une approximation de sin(xy) quand x et y ne sont pas trop grands est xy (on prend la valeur absolue, puisqu’une densit´e de probabilit´e est toujours positive).
En utilisant la m´ethode du§ 4.11.4, supposons que l’on tire au sort des nombres X et Y avec des distributions uniformes, on a alors
p(x, y)dx dy=dX dY soit, en s´eparant
x dx=dX et y dy =dY et
x=√
2X y=√
2Y
o`u l’on a oubli´e les probl`emes de signe. . . On peut s’ar-ranger pour queX et Y soient dans l’intervalle [−1,1] et remultiplier par le coefficient qui va bien pour que x et ysoient dans l’intervalle [−2,2] comme auparavant. C’est plus simple que ¸ca en a l’air :
program importance implicit none
double precision :: x, y, xx, yy, s, z integer :: i, imax = 10000000
s = 0. ; n = 0
open(10,file=’import_sampling.out’) do i = 1, imax
xx = 2.*rand()-1. ; yy = 2.*rand()-1.
x = 2.*sign(sqrt(abs(xx)),xx) y = 2.*sign(sqrt(abs(yy)),yy)
if ( 4*tanh(x-y)*exp(-(x**2+y**2)) > 0.4 ) then z = x*y
92 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan
if ( abs(z) > 1.e-10 ) then ! no zero divide s = s + sin(z)/abs(z)
else
s = s + 1.
endif endif
if ( mod(i,10000) == 0 ) write(10,*) i, 4.*s/i enddo
close(10)
write(*,*) 4.*s/imax end
On obtient la courbe de la figure 4.46. Pour des r´esultats
-0.092 -0.0915 -0.091 -0.0905 -0.09 -0.0895 -0.089 -0.0885 -0.088 -0.0875 -0.087 -0.0865 -0.086 -0.0855 -0.085
100000 1e+06 1e+07
n
Figure 4.46 – Valeurs obtenues pourID avec le domaine (4.31) en fonction du nombre de tirages (l’axe desxa une
´echelle logarithmique) par une m´ethode d’´echantillonnage par l’importance. L’´echelle de l’axe desy est la mˆeme que pour la figure 4.44.
tr`es comparables, voire meilleurs que ceux de la figure 4.44, on a fait dix fois moins de tirages au sort (107 au lieu de 108) : on a gagn´e un ordre de grandeur en temps de calcul ! C¸ a m´eritait un petit effort. . .