• Aucun résultat trouvé

Int´egration multidimensionnelle sur des domaines compliqu´es

Dans le document Licence de physique L3 PHYTEM (Page 89-92)

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 decoups au butc’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).

significatifsdu 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

suffitde 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 celamarche , 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 pouvoirdireau 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 calculna¨ı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. . .

4.11.6 Simulation de

Dans le document Licence de physique L3 PHYTEM (Page 89-92)