Bonjour, je m'intéresse aux rudiments de la méthode de Monte Carlo.
Pour mémoire on utilise cette méthode :
on tire aléatoirement un grand nombre de couples x,y, (compris entre 0 et 1).
On compte ensuite tous les couples tels que x^2+y^2<1 c'est à dire tous les points étant dans un cercle de rayon 1.
Au final, la probabilité qu'un nombre soit dans le cercle est q/N ou q est le nombre des points effectivements comptés et N le nombre de couples qu'on a tiré.
D'un autre coté, analytiquement on voit que la probabilité pour qu'un point tiré alatoirement soit dans le cercle est pi/4 (rapport de l'aire du cercle sur celle du carré de coté 1), je peux donc calculer pi : pi= 4*q/N
Je met donc en oeuvre cette méthode grace au logiciel scilab (code ci joint) et je m'étonne du fait que avec 900000 points, la précision obtenue sur pi n'est que de 10^-4, alors qu'avec d'autres algo, avec un tel nombre d'itérations j'aurai déja dépassé la précision du pi enregistré dans mon logiciel !
Je me demande ce qui cloche donc dans ce programme, est ce que celà pourrait venir de la façon dont les nombres aléatoires sont tirés ?
Si quelqu'un veut en discuter il sera le bienvenu .
//------ ci joint le code source : utilisable directement avec scilab .
tic();
n=900000; //nb de tirages
q=0;
x=rand(n,2);
bool=(x(:,1)^2+x(:,2)^2)<1;
[poubelle,q]=size(find(bool));
est_pi=4*q/n;
t=toc();
printf("Simulation effectuee en %f secondes\n",t);
printf("Estimation de pi : %f\n",est_pi);
diff=est_pi-%pi;
printf("différence est_pi-PI= %f\n",diff);