#include "sopnamsp.h" #include "machdefs.h" #include "pexceptions.h" #include "perandom.h" #include "pemath.h" #include //////////////////////////////////////////////////////////////////////////// //++ // Class FunRan // Lib Outils++ // include perandom.h // // Tirage aleatoire sur un histogramme 1D. //-- //++ FunRan::FunRan(FunRan::Func f, r_8 xMin, r_8 xMax, int_4 nBin) // // Createur. f is a probability density function (PDF). // Le tirage aleatoire est fait sur un histogramme // Histo(xMin,xMax,nBin) (voir convention dans Histo). // Chaque bin de l'histogramme contient la valeur de la PDF // au centre du bin. // Les valeurs retournees sont les valeurs du centre des bins. // Si binw est la largeur du bin, les valeurs retournees // vont de xmin+binw/2 a xmax-binw/2. //-- : Histo(xMin,xMax,nBin) { if(nBin<0) throw RangeCheckError("FunRan::FunRan less than 2 bins requested"); // On cree la fonction de distribution a partir de la PDF (*this)(0) = f(BinCenter(0)); for(int_4 i=1;i=0; i--) delete ranY[i]; delete[] ranY; delete ranX; } //++ void FunRan2D::BinRandom(int_4& x, int_4& y) // // Tirage avec retour du numeros de bin. //-- { x = ranX->BinRandom(); y = ranY[x]->BinRandom(); } //++ void FunRan2D::Random(r_8& x, r_8& y) // // Tirage avec retour abscisse et ordonnee // du bin interpole. //-- { x = ranX->Random(); int_4 i = int_4(ceil(x)); y = ranY[i]->Random(); }