cs_ChianLi
Messages postés2Date d'inscriptionlundi 23 août 2004StatutMembreDernière intervention 5 novembre 2007
-
4 nov. 2007 à 22:45
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 2013
-
5 nov. 2007 à 14:32
bonjour à tous,
je voudrais écrire un programme qui me permette à partir d'une fonction définissant une densité de probabilité de générer des nombres en fonction de ces probabilités et ce sans répétition.
un petit dessin pour aider à expliquer ce que je veux :
ici, j'ai dessiné une fonction de densité de probabilité et j'ai généré 10 nombres (représentés par les barres verticales sur la ligne du dessous) et on constate que la densité est plus forte là où la courbe est la plus haute. c'est ce genre de répartition que j'aimerai créer mais avec une courbe plus complexe aux maximum locaux plus nombreux.
je suis débutant en programmation C, c'est pourquoi je me tourne vers vous pour savoir de quel était l'algorithme le plus approprié pour ce genre de fonction ainsi que la manière la plus efficace de le programmer en C.
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 5 nov. 2007 à 14:32
Salut,
J'ai fait la meme chose avec une répartition gaussienne.
Je génère des nombre compris entre 0 et 500 centré sur 250
mais à toi de changer les bornes et la fonction P...
<li>
</li><li>do</li>{
<li> x=((rand()%3000)/300.0)-5; //on choisi un x entre -5 et 5 avec un pas faible</li><li> P=(exp((-0.5*x*x)/(sigma*sigma)))/(sqrt(2*3.14)*sigma); //on calcule sa fonction de répartition</li><li>
</li><li>//on tire au hazard un nombre entre [0 et 1]. Si ce nombre est inférieur a P </li><li>//on accepte ce point sinon, on le refuse</li><li>
</li><li>//le centre de la fenetre est le point de coord 0,0</li><li>
</li><li>
</li><li>if( ((rand()%1000)/1000.0) <= P)
</li><li> {
</li><li> Fin=true;
</li><li>if(x>0)
</li><li> x=x*50+250; //x[250.500]</li><li>else</li><li> x=250-((-x)*50); //x[250,0]</li><li> }</li><li>}
</li><li>while(Fin==0);</li>