Cependant, cette représentation va nous servir pour calculer ces intégrales. Nous allons calculer l'aire de chacun des rectangles, puis les additionner. Comme vous le voyez sur la figure ci-dessus, nous commettrons bien sûr une erreur car si
f décroît entre
x et
x+dx, nous allons compter de la surface "en trop" ; à l'inverse, si elle croît, nous allons en oublier. Cette erreur peut facilement être réduite en prenant
dx plus petit (il y aura donc plus de rectangles, donc le calcul prendra plus longtemps).
Seule petite contrainte "pratique", il faut qu'un nombre entier de rectangles recouvre l'intervalle. Donc au lieu de choisir arbitrairement
dx et avoir toutes les chances que "ça ne tombe pas juste", nous allons choisir le nombre de rectangles et en déduire
dx.
Tentons donc de calculer l'aire de la surface rose saumon dont je vous bassine depuis le début. La longueur de l'intervalle est de 3 (= 4-1). Donc si je le découpe en
n parties, on aura
dx=3/n.
À la main
Pour rendre le calcul simple, prenons
n=4. Comme cela, on pourra écrire tous les détails du calcul. Nous avons donc :
dx=3/4=0.75. On calcule l'aire du premier rectangle en
x=1 : sa hauteur est
f(1)=16, sa largeur 0.75, son aire est donc de
16*0.75=12. Et de même pour les trois autres rectangles.
Au final, on a donc :
Remarquez bien qu'on n'évalue pas f(4), chaque multiplication correspond aux aires des rectangles situés respectivement : entre 1 et 1.75, 1.75 et 2.5, 2.5 et 3.25, 3.25 et 4. Tout l'intervalle est donc bien couvert, pas besoin d'aller plus loin !
Vous allez le voir un peu plus bas, notre calcul comporte une assez grosse imprécision, que nous voulons évidemment réduire. L'un des moyens est d'augmenter considérablement le nombre de rectangles ; mais vous vous doutez bien qu'on ne va pas s'amuser à calculer ces intégrales à la main lorsqu'on a 2000 rectangles (même votre prof de maths ne serait pas assez fou pour ça).
Grâce à notre ordinateur
Je vous laisse chercher comment coder ça. Pour faire simple, contentez-vous de demander à l'utilisateur le nombre de rectangles à utiliser pour le calcul. Ne tentez pas de faire saisir une fonction à l'utilisateur, cela vous demanderait trop de travail en C (par contre si vous utilisez un langage de script, avec la fonction
eval, c'est un jeu d'enfant).
Secret (cliquez pour afficher)
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | #include <stdio.h>
#include <stdlib.h>
// La fonction a intégrer : f(x)=x^3 - 5x^2 +20
double f(double x){return x*x*x - 5*x*x + 20; }
int main(int argc, char *argv[])
{
double surface = 0;
double dx=0;
double x=0;
int n=0;
printf("En combien de parties voulez-vous decouper l'intervalle [1,4]? ");
scanf("%d",&n);
// Détermination du dx
dx = 3./n;
// On intègre de 1 a 4 avec un pas de dx
for( x=1 ; x<4 ; x+=dx )
{
// Calcul de l'aire de chaque petit rectangle que l'on ajoute à la surface totale
surface += f(x)*dx;
}
printf("L'integrale de f entre 1 et 4 est approximee par %lf \n",surface);
return 0;
}
|
Les lecteurs attentifs auront remarqué que j'ai utilisé le verbe "estimer" pour la méthode de Monte Carlo et "approximer" pour cette méthode. Même si ces deux mots semblent proches, il y a une différence fondamentale entre les deux : lorsqu'on "estime", on a en général aucune idée sur l'erreur que l'on commet ; lorsqu'on "approxime", oui. Ce calcul d'erreur est un aspect fondamental des méthodes que je vous présentent, mais demande une analyse mathématique trop poussée pour être développée ici.
Le résultat pour 100 rectangles est de 19.05, et pour 1000 rectangles, il est de 18.77. Cette fonction étant relativement simple, il existe des moyens de calculer exactement son intégrale (cf. cours de Terminale) ; ce calcul nous donne 18.75. On voit donc que notre approximation n'est pas trop mauvaise, mais avoir une telle erreur avec 1000 rectangles est une bien piètre performance, faites moi confiance. Il existe d'autres méthodes que celle-ci (qui est appelée tout simplement "méthode des rectangles"), comme la méthode des trapèzes, de Simpson (rien à voir avec Bart ou Homer

) ou de Newton-Cotes. Ces méthodes sont (beaucoup) plus efficaces mais reposent sur le même principe de base : découper l'intervalle en plusieurs parties sur lesquelles on approche
f par quelque chose de plus simple.
Vous allez me dire : "C'est bien beau tout ça, mais c'est quoi le rapport avec Monte Carlo ?". Pour l'instant, aucun. Mais nous allons voir dans le chapitre qui vient comment Monte Carlo peut nous aider à calculer cette intégrale d'une manière complètement différente que celle que nous avons vue.