Densité de probabilité et variable

cs_ChianLi
Messages postés
2
Date d'inscription
lundi 23 août 2004
Statut
Membre
Dernière intervention
5 novembre 2007
- 4 nov. 2007 à 22:45
Pistol_Pete
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Derniè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.

Merci de votre aide!
ChianLi

2 réponses

cs_ChianLi
Messages postés
2
Date d'inscription
lundi 23 août 2004
Statut
Membre
Dernière intervention
5 novembre 2007

5 nov. 2007 à 13:52
hé bien mon problème n'a pas l'air d'inspirer beaucoup de monde !
0
Pistol_Pete
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
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>

A+
0