fonction random

fonction random - Algo - Programmation

Marsh Posté le 05-12-2002 à 02:11:21    

Dites, j'ai un petit problème, je dois écrire un prog qui doit déterminer la valeur de pi en utilisant l'algorithme de Monte-Carlo.
 
Le but de cet algo de monte-carlo, c'est de projeter aléatoirement des points dans un carré de côté 1, et ensuite de compter combien de ces points font partie d'un quart de cercle inscrit dans ce carré (donc le rayon est de 1).
 
Ensuite on fait : le nb de points contenus dans ce quart de cercle x 4 et on divise le tout par le nb de points total.
 
Le problème, c'est que ma focntion random a tendance à projeter 99% des points dans la zone du carré qui n'appartient pas au quart de cercle.
 
le principe de ma fonction random est de faire (en utilisant la fonction random de mon langage, scheme, qui accepte un entier comme valeur max et renvoie un entier) :
 
random nb_quelconque = numerateur
random nb_quelconque = denominateur
 
tester si la fraction est inférieur à 1, et si oui stocker le resultat dans une liste (tableau) puis de refaire l'opération jusqu'à ce que j'ai un nb assez important de ce genre de valeurs pour utiliser l'algo de monte-carlo.
 
j'espère que tout ça n'est pas trop embrouillé.
 
Merci pour vos conseils et remarques
 

Reply

Marsh Posté le 05-12-2002 à 02:11:21   

Reply

Marsh Posté le 05-12-2002 à 04:29:57    

je connais pas le scheme, mais d'après ce que j'ai compris, la fonction random renvoit un entier entre 0 et un paramètre que tu lui donnes.
 
ça serait pas plus simple (et plus aléatoire) de remplir ton tableau comme ça ? (c'est pas du scheme mais tu comprendras l'algo je pense):
 

Code :
  1. i=0;
  2. while(i<NbDeValeursSouhaité){
  3.   MonTableau[i]=(random(UnNombreAssezGrand)/UnNombreAssezGrand);
  4.   i++;
  5. }


Message édité par mareek le 05-12-2002 à 04:30:09

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 05-12-2002 à 09:08:39    

boom a écrit a écrit :

 




 
Ne confondons pas aléatoire et n'importe quoi. Aléatoire suppose une distribution uniforme des tirages parmi les possibilité, alors que n'importe quoi ne présupose pas de cette distribution.
 
Par exemple, je lit un octet n'importe où en mémoire. J'aurais n'importe quoi, mlais j'ai tout de même plus de chances d'avoir 0 qu'autre chose.
 
Et l'algo fr Monte-carlo ne marche qu'avec un tirage aléatoire.


Message édité par kadreg le 05-12-2002 à 09:08:59

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 05-12-2002 à 09:17:19    

boom a écrit a écrit :

 
random nb_quelconque = numerateur
random nb_quelconque = denominateur




attend, si ton carré est de côté un, tous tes points doivent avoir leur abscices et ordonnés < à 1.
donc, si toi tu leur donnes un numérateur et un dénominateur ce sera quasiment toujours supérieur à 1 !
 
il faut juste que tu trouve des nombres aléatoire entre 0 et 1 =>utilise la méthode de marek.
 
allez, avec mes vieux souvenirs de scheme, ca doit donner un truc dans le genre :
 
(define random2 (n)
   (/ (random (n)) n)
)
 

Reply

Marsh Posté le 05-12-2002 à 09:19:21    

benou a écrit a écrit :

 
attend, si ton carré est de côté un, tous tes points doivent avoir leur abscices et ordonnés < à 1.
donc, si toi tu leur donnes un numérateur et un dénominateur ce sera quasiment toujours supérieur à 1 !
 
il faut juste que tu trouve des nombres aléatoire entre 0 et 1 =>utilise la méthode de marek.
 
allez, avec mes vieux souvenirs de scheme, ca doit donner un truc dans le genre :
 
(define random2 (n)
   (/ (random (n)) n)
)


2 'e' à mareek  [:mareek]


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 05-12-2002 à 09:21:25    

mareek a écrit a écrit :

2 'e' à mareek  [:mareek]  




je suis désolé  :(

Reply

Marsh Posté le 05-12-2002 à 09:22:01    

benou a écrit a écrit :

 
je suis désolé  :(  



spagrave :hello:


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 05-12-2002 à 20:42:45    

Merci bien à tout le monde pour vos réponse
 

kadreg a écrit a écrit :

 
 
Ne confondons pas aléatoire et n'importe quoi. Aléatoire suppose une distribution uniforme des tirages parmi les possibilité, alors que n'importe quoi ne présupose pas de cette distribution.
 
Par exemple, je lit un octet n'importe où en mémoire. J'aurais n'importe quoi, mlais j'ai tout de même plus de chances d'avoir 0 qu'autre chose.
 
Et l'algo fr Monte-carlo ne marche qu'avec un tirage aléatoire.  




 
Et merci pour cette précision, je ne connaissais pas la différence.

Reply

Marsh Posté le 05-12-2002 à 23:09:31    

J'ai fait un prog en delphi ki simulait, si tu veux je te le passe avec les sources.
 
Déjà le programme http://www.jeanb-net.com/pi.exe pour les sources mail jeanb@jeanb-net.com ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed