Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2009-05-11 16:43:02 densité de répartition des nombres aléatoires

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

densité de répartition des nombres aléatoires



Bonjour,

Je cherche des algorithmes de tirages aléatoires avec densités de répartition...

Une image valant un long discours :
En utilisant la fonction random() de processing on obtient une densité uniforme des valeurs, exemple avec un tirage aléatoire de 50 000 points :

http://codelab.fr/up/random-uniform.png

Mais il existe d'autres lois fixant la densité de répartition. En cherchant j'ai trouvé cet algorithme en ruby, qui applique une densité normale à la répartition. 2 variables supplémentaires, m et s définissent la zone de répartition : m correspond à la valeur médiane et s, l'écart par rapport à cette valeur médiane :
Par exemple avec m = 0 et s = 100, on obtient :

http://codelab.fr/up/random-normal-0-100.png

Avec m = 100 et s = 20

http://codelab.fr/up/random-normal-100-20.png

il y a différentes lois de densité (sur wikipedia : lois de densité), mais je ne sais pas lire ces formules..., quelqu'un saurait-il transformer ça en fonction?

Les images sont faites avec ce sketch :

Code (p5) :

void setup() {
  size(400,400);
  background(0); stroke(255);
  noLoop();
  
}

void draw() {
  for (int i =0; i < 50000; i++) {
    float a = random (-PI,PI);
    //float d = random_uniform(0, 180);
    float d = random_normal(0, 180, 100, 20);
    float x = 200 + (d * cos(a));
    float y = 200 + (d * sin(a));
    point(x,y);
  }
}

float random_uniform(float xmin, float xmax) {
  float x = random(xmin, xmax);
  return x;
}

float random_normal(float xmin, float xmax, float m, float s) {
  float x = (s * sqrt(-2.0 * log(random(.0001,1))) * cos(2.0 * PI * random(0,1))) + m;
  return x;
}

Hors ligne

 

#2 2009-05-13 22:12:11 Re : densité de répartition des nombres aléatoires

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: densité de répartition des nombres aléatoires



J'ai trouvé mon bonheur : colt une bibliothèque de fonctions scientifiques développée par le CERN, c'est du costaud, avec de nombreux modèles de distribution... et intégrable facilement à processing.

javadoc api : http://acs.lbl.gov/~hoschek/colt/api/index.html

Pour se faire une idée des distributions, le « Compendium of Common Probability Distributions » rend bien service, c'est remplie de formules qui me laissent froid, mais il y a aussi de bien belles courbes...

Quelques images pour tester différentes méthodes de distribution :

Distribution de Cauchy :

http://codelab.fr/up/random-cauchy.png

Exponentielle :

http://codelab.fr/up/random-exponential.png

Géométrique :

http://codelab.fr/up/random-geometric.png

Beta :

http://codelab.fr/up/random-beta.png

Beta :

http://codelab.fr/up/random-beta-2.png

Hors ligne

 

#3 2009-05-17 03:12:19 Re : densité de répartition des nombres aléatoires

juan
modérateur
Lieu: Nancy
Date d'inscription: 2008-02-23
Messages: 14
Site web

Re: densité de répartition des nombres aléatoires



La solution qu'on utilise classiquement pour régler la densité de probabilité d'une variable selon une loi quelconque c'est du pseudo-Monté-Carlo: j'ai la fleme de faire un dessin mais imaginons une variable x entre a et b, suivant une ddp (densité de proba) entre 0 et 1: pour tout x, x a une proba de P(x).

P(x) peut être n'importe quelle fonction: une vraie loi statistique ou un bricolage: peu importe, il faut juste être capable de calculer P(x).

L'algo a la forme suivante:
On tire 100000 valeurs de x au hasard entre a et b
{
     on calcule p=P(x) // par n'importe quelle méthode, on s'en fout, mais on le calcule.
    {   
     on tire une valeur y au hasard entre 0 et 1
         si y<p
         {
              alors on garde ce point
              // sinon, on l'oublie
         } // fin si
    }---- fin du "on tire une valeur de y"
}---- fin du "on tire 1000 points"

AU FINAL: il ne reste pas 100000 points, mais une fraction suffisante pour que que ceux qu'on a retenus suivent la loi P(x) qu'on a décidé de leur faire suivre.

Hors ligne

 

#4 2009-05-17 11:32:44 Re : densité de répartition des nombres aléatoires

Staross
membre
Date d'inscription: 2008-04-03
Messages: 322

Re: densité de répartition des nombres aléatoires



Ca rend assez bien en tout cas, on dirait un peu des patterns de diffraction :

http://media-2.web.britannica.com/eb-media/28/96828-004-644E46F6.jpg

http://upload.wikimedia.org/wikipedia/commons/archive/7/7d/20071104200851!X-ray_diffraction_pattern_3clpro.jpg

Hors ligne

 

#5 2012-08-30 15:27:39 Re : densité de répartition des nombres aléatoires

mfm
membre
Date d'inscription: 2012-08-30
Messages: 37

Re: densité de répartition des nombres aléatoires



emoc a écrit:

J'ai trouvé mon bonheur : colt une bibliothèque de fonctions scientifiques développée par le CERN, c'est du costaud, avec de nombreux modèles de distribution... et intégrable facilement à processing.

javadoc api : http://acs.lbl.gov/~hoschek/colt/api/index.html

Bon, je déterre (à la pioche)… Mais voilà, cette library m'a l'air sympathique mais je n'arrive absolument pas à l'installer dans processing… (en suivant les démarches habituelles pour installer des library) sad Donc si tu te rappelles comment tu as fait, et si tu pouvais l'expliquer, ce serait formidable ! Merci.

Hors ligne

 

#6 2012-08-30 16:08:25 Re : densité de répartition des nombres aléatoires

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: densité de répartition des nombres aléatoires



Salut

Si je me souviens bien, il suffit de créer un répertoire "code" dans le répertorie de ton sketch et d'y placer le .jar de la library (même fonctionnement que le répertoire "data"). C'est une fonction qui est dans processing depuis longtemps (et j'espère qu'elle y est toujours!) mais plutôt mal documentée il me semble...

Hors ligne

 

#7 2012-08-30 18:11:46 Re : densité de répartition des nombres aléatoires

mfm
membre
Date d'inscription: 2012-08-30
Messages: 37

Re: densité de répartition des nombres aléatoires



Merci, je vais essayer.

Hors ligne

 

#8 2012-10-02 17:18:09 Re : densité de répartition des nombres aléatoires

mfm
membre
Date d'inscription: 2012-08-30
Messages: 37

Re: densité de répartition des nombres aléatoires



Bon, j'ai réussi en mettant le .jar dans processing/mode/java/librairies/colt/library

(en gras : ce sont les dossiers que j'ai créés.)

Hors ligne

 

#9 2012-10-02 22:23:49 Re : densité de répartition des nombres aléatoires

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: densité de répartition des nombres aléatoires



Bon, le principal, c'est que ça marche wink
Je suppose que la structure des librairies a du changer dans la dernière version de processing, et comme elle avait déjà pas mal changé ces derniers temps...

Hors ligne

 

#10 2012-10-02 22:41:51 Re : densité de répartition des nombres aléatoires

mfm
membre
Date d'inscription: 2012-08-30
Messages: 37

Re: densité de répartition des nombres aléatoires



Par contre j'ai du mal à utiliser les classes et méthodes de distributions (poisson, beta, etc.) de cette library… Te rappelles-tu si tu avais, pour coder tes images ci-dessus, utilisé les classes (ou méthode ?) de distribution ou si tu avais tout codé à la main ?

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024