Approx statistique de pi ?

Approx statistique de pi ? - Algo - Programmation

Marsh Posté le 03-07-2004 à 00:18:30    

Si on considère un carré de côté deux et un cercle de rayon 1 inscrit dans ce carré faut pas longtemps pour voir que si la probabilité qu'un point appartienne au carré est de 1 la proba qu'il appartienne au cercle est de pi.
Alors j'ai voulu approximer pi avec la fréquence d'essais aléatoires
Pour faire simple je considère un carré de 1 sur 1 et un arc de cercle d'angle 90°
 ____
|\   |
| \  |   Hmpf pas très clair :s
|__|_|
 
Vous voyez le carré 2*2 et le cercle ? On prend le un quart quoi.
 
 
 
for (i = 0; i < 100000; i++) {
 x = rand();
 y = rand();
 if (x*x+y*y <= 1)
   frequence++;
}
 
frequence = frequence / 100000;
frequence = frequence *4;
 
Bon rand() renvoie un float compris entre 0 et 1
 
Le problème c'est que l'approx de pi ressemble à 3.99
Ca vient de mon algo ou de ma fonction rand() ?
Murci ++

Reply

Marsh Posté le 03-07-2004 à 00:18:30   

Reply

Marsh Posté le 03-07-2004 à 00:34:56    

Marrant comme approche!
 
Tu peux peut etre essayer avec des valeurs plus "random", par exemple avec http://www.random.org/nform.html
 
ou alors utiliser les decimales de PI comme random.....................

Reply

Marsh Posté le 03-07-2004 à 00:48:43    

Donc ça vient de ma fonction rand tu crois ? :p
L'est marrant ce site mais il donne pas d'algo et le programme c'est pour ma calculette donc me sens pas d'y foutre une séquence de 1mo lol
Par contre les décimales de pi c'est une sacré idée lol reste qu'à dénicher un algo rapide pour les générer pour ensuite générer mon pi statistique
Me demande combien de piles ça va me bouffer ... :p

Reply

Marsh Posté le 03-07-2004 à 12:01:32    

Reply

Marsh Posté le 03-07-2004 à 12:09:53    

si tu veux paradoxe en apparence, tu as l'archer et la cible, ou alors le tracé de l'hypothénuse : dans le premier tu conclus que la flèche n'atteindra jamais la cible, dans le deuxième que racine(2) == 2

Reply

Marsh Posté le 04-07-2004 à 09:34:36    

Champi Monochrome a écrit :

la probabilité qu'un point appartienne au carré est de 1 la proba qu'il appartienne au cercle est de pi (3.141592....).


 
Qui a déjà vu une proba supérieure à 1 ???? pas moi


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 04-07-2004 à 09:45:31    

:D
il s'est mal exprimé

Reply

Marsh Posté le 04-07-2004 à 20:35:20    

Me suis mal exprimé
L'a surface du grand carré est 2*2=4
Donc puisque la probabilité de tomber dedans est de 1 on divise par 4
Et la proba de tomber ds le cercle est de pi/4

Reply

Marsh Posté le 04-07-2004 à 20:51:41    

Là je suis OK


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 04-07-2004 à 21:02:37    

Pour moi cela vient de ta condition if.
 
Tu contrôles que c'est <= à 1 donc que cela fait partie du carré. Il faut incrémenter fréquence lorque le point tiré au hasard est dans le cercle.
Il faut donc soit mettre une valeur approchée de pi/4 soit une variable dynamique qui procède par dycotomie et ajuste en permanence la valeur de comparaison par rapport au calcul de pi/4
 
if ($frequence=0, $max=1 ; x*x+y*y <= $max) {
     $frequence++;
     $max = $frequence/$i;
}
 
Une boucle sur 1 000 000 000 cycle devrait approcher la valeur à mon sens (je n'ai pas testé)
 
EDIT : cela ne fonctionnera pas et donnera une valeur proche de la diagonale. Donc il faut mettre une valeur approchée de pi/4 mais normalement, tu trouveras cette même valeur.


Message édité par T509 le 04-07-2004 à 21:04:43

---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 04-07-2004 à 21:02:37   

Reply

Marsh Posté le 04-07-2004 à 21:32:32    

Je pige pas ton truc
 
Si la racine de la somme des carrés est inférieure ou égale à 1, le point appartient au cercle et il appartient de toute façon au carré.
Et le $i dans ton code correspond à quoi ?  
 
Je capte pas ...

Reply

Marsh Posté le 04-07-2004 à 21:34:38    

Champi Monochrome a écrit :

Si on considère un carré de côté deux et un cercle de rayon 1 inscrit dans ce carré faut pas longtemps pour voir que si la probabilité qu'un point appartienne au carré est de 1 la proba qu'il appartienne au cercle est de pi.
Alors j'ai voulu approximer pi avec la fréquence d'essais aléatoires
Pour faire simple je considère un carré de 1 sur 1 et un arc de cercle d'angle 90°
 ____
|\   |
| \  |   Hmpf pas très clair :s
|__|_|
 
Vous voyez le carré 2*2 et le cercle ? On prend le un quart quoi.
 
 
 
for (i = 0; i < 100000; i++) {
 x = rand();
 y = rand();
 if (x*x+y*y <= 1)
   frequence++;
}
 
frequence = frequence / 100000;
frequence = frequence *4;
 
Bon rand() renvoie un float compris entre 0 et 1
 
Le problème c'est que l'approx de pi ressemble à 3.99
Ca vient de mon algo ou de ma fonction rand() ?
Murci ++


 
Je vois un problème dans ton freq = freq / 100000;  
sachant que freq est un entier.
 
double res = 4. * (double)(freq / 100000);
devrait être mieux.
 
Par ailleurs, cette méthode d'intégration par Monte-Carlo est très naïve et convergera en O(N^(1/2)).
On peut sensiblement améliorer les perfs avec des techniques comme l'échantillonnage stratifié par exemple.
Enfin, la qualité du résultat est très dépendante de celle du générateur aléatoire.
Numerical Recipes a un très bon chapitre à ce sujet.

Reply

Marsh Posté le 04-07-2004 à 21:47:30    

Champi Monochrome a écrit :

Je pige pas ton truc
 
Si la racine de la somme des carrés est inférieure ou égale à 1, le point appartient au cercle et il appartient de toute façon au carré.
Et le $i dans ton code correspond à quoi ?  
 
Je capte pas ...


 
$i corrspond à celui de ta boucle for. Mais cela ne fonctionne pas puisque la limite sera 1/2
 
Par contre mon raisonnement est bidon. Désolé


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 04-07-2004 à 21:51:32    

Je tenterai ta correction demain
Par contre le dernier paragraphe là j'en ai pas compris la moitié.
Monte-Carlo ?
O(N^(1/2)) ?
échantillonnage stratifié ?

Reply

Marsh Posté le 04-07-2004 à 22:05:30    

Méthode de Monte-Carlo est le nom générique pour toutes les méthodes de calcul basées sur l'utilisation de tirages (semi) aléatoires (Monte-Carlo faisant référence au casino). Elles sont utilisées pour, entre autres applications, approximer des intégrales sur des volumes d'intégration bizarroïdes, qui ne présentent pas d'axes de symétrie.
 
O(N^(1/2)) signifie que la précision de ton intégrale va croître avec la racine carrée du nombre de tirages, donc très lentement.
 
L'échantillonnage stratifié consiste à diviser la zone d'intégration en sous-espaces, où tu pourras effectuer les tirages. Google "statified sampling" + Monte-Carlo.

Reply

Sujets relatifs:

Leave a Replay

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