Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1486 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Approx statistique de pi ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Approx statistique de pi ?

n°785444
Champi Mon​ochrome
Posté le 03-07-2004 à 00:18:30  profilanswer
 

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 ++

mood
Publicité
Posté le 03-07-2004 à 00:18:30  profilanswer
 

n°785469
pospos
Posté le 03-07-2004 à 00:34:56  profilanswer
 

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.....................

n°785500
Champi Mon​ochrome
Posté le 03-07-2004 à 00:48:43  profilanswer
 

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

n°785613
Ace17
Posté le 03-07-2004 à 12:01:32  profilanswer
 
n°785618
Taz
bisounours-codeur
Posté le 03-07-2004 à 12:09:53  profilanswer
 

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

n°785981
T509
$job-&gt;GetJob(now)
Posté le 04-07-2004 à 09:34:36  profilanswer
 

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 !
n°785982
Taz
bisounours-codeur
Posté le 04-07-2004 à 09:45:31  profilanswer
 

:D
il s'est mal exprimé

n°786387
Champi Mon​ochrome
Posté le 04-07-2004 à 20:35:20  profilanswer
 

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

n°786395
T509
$job-&gt;GetJob(now)
Posté le 04-07-2004 à 20:51:41  profilanswer
 

Là je suis OK


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
n°786397
T509
$job-&gt;GetJob(now)
Posté le 04-07-2004 à 21:02:37  profilanswer
 

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 !
mood
Publicité
Posté le 04-07-2004 à 21:02:37  profilanswer
 

n°786411
Champi Mon​ochrome
Posté le 04-07-2004 à 21:32:32  profilanswer
 

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 ...

n°786412
el muchach​o
Comfortably Numb
Posté le 04-07-2004 à 21:34:38  profilanswer
 

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.

n°786415
T509
$job-&gt;GetJob(now)
Posté le 04-07-2004 à 21:47:30  profilanswer
 

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 !
n°786417
Champi Mon​ochrome
Posté le 04-07-2004 à 21:51:32  profilanswer
 

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é ?

n°786422
el muchach​o
Comfortably Numb
Posté le 04-07-2004 à 22:05:30  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Approx statistique de pi ?

 

Sujets relatifs
page statistiquestatistique viste de site : PHP - MySQL - Apache
[PHP] Sortie statistique ?? 
Plus de sujets relatifs à : Approx statistique de pi ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR