#****************************************************** # programme d'intégration par la méthode de Monte-Carlo # Dominique Lefebvre avril 2013 # www.tangenteX.com #****************************************************** # chargement des packages with(plots): with(RandomTools): # définition de la fonction f(x) f := x -> x*(1 - x)*(sin^2)(200*x*(1-x)): # définition des bornes xmin := 0: xmax := 1: ymin := 0: ymax := 0.25: dx := xmax-xmin: dy := ymax-ymin: # tracé de la surface dont on veut calculer la valeur aire := plot(f(x),x = xmin..xmax, numpoints=2000,view=[xmin..xmax,ymin..ymax],color=blue,filled=true): display([aire]); # initialisation des variables compteur := 0: i := 0: N := 2000: # nombre de tirages aléatoires # aire du carré renfermant la courbe dans le domaine Ac := dx*dy: # calcul de l'intégrale sous la courbe dans le domaine [0..1] while i < N do # tirage des coordonnées aléatoires du point i dans le domaine [0..1] xpt[i] := evalf(xmin + dx*(rand()/10^12)): ypt[i] := evalf(ymin + dy*(rand()/10^12)): # le point est-il sous la courbe if ypt[i] < evalf(f(xpt[i])) then compteur := compteur+1: i := i+1: else i := i+1: end if: end do: Ae := Ac*compteur/N: printf("Aire calculée: %f\n",Ae); # calcul formel de l'intégrale printf("Calcul analytique Maple: "); Int(f(x),x=xmin..xmax) = int(f(x),x=xmin..xmax); printf("Valeur analytique de l'aire: %f\n",evalf(rhs(%)));