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

  FORUM HardWare.fr
  Programmation
  C

  Gnu Scientific Library : besoin d'aide avec la génération de nombre al

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Gnu Scientific Library : besoin d'aide avec la génération de nombre al

n°1560515
Profil sup​primé
Posté le 15-05-2007 à 10:49:27  answer
 

[:augie] a tous !
 
 
Boin voilà j'ai écris un programme en C générant des nombres aléatoires via une distribution exponentielle
 
mais j'ai un problème
 
j'ai mis la fonction gsl_ran_exponantial dans une fonction a part et je l'appelle a partir du main
 
exemple :
 
double generation(double beta, int nbi,int N,int nbs)
{
       const gsl_rng_type * T1;
       gsl_rng * r1;
       double mu,tps_infection,Nd,inter;
       
 
         Nd = (double) N;
        // c'est la moyenne de la loi exponentielle
       mu = (double) beta*nbi/Nd;
 
       /* create a generator chosen by the  
          environment variable GSL_RNG_TYPE */
 
       gsl_rng_env_setup();
 
       T1 = gsl_rng_default;
       r1 = gsl_rng_alloc (T1);
 
         inter = gsl_ran_exponential(r1,mu);
 
// on libère la mémoire allouée pour r1  
       gsl_rng_free (r1);
 
  return inter;
}
 
le probleme c'est qu'avec les memes paramètres beta,Nd et nbi le meme nombre est toujours généré meme apres plusieurs appels de la fonction
 
comment y remédier ?
 
je vous remercie d'avance
 
:)

mood
Publicité
Posté le 15-05-2007 à 10:49:27  profilanswer
 

n°1560518
_darkalt3_
Proctopathe
Posté le 15-05-2007 à 10:51:42  profilanswer
 

Il doit y avoir une fonction d'initialisation du générateur de nombre aléatoire, à utiliser avec l'heure par exemple.


---------------
Töp of the plöp
n°1560520
Profil sup​primé
Posté le 15-05-2007 à 10:52:49  answer
 

mais encore [:petrus75] ?

 

parce que j'ai copié sur l'exemple donné en ligne là [:spamafote]

 

je pense que le probleme vient du fzait qu'a chaque nouvel appel de la fonction, le générateur est réinitialisé


Message édité par Profil supprimé le 15-05-2007 à 10:54:29
n°1560524
Profil sup​primé
Posté le 15-05-2007 à 11:00:28  answer
 

personne ? [:zytrasnif]

n°1560525
_darkalt3_
Proctopathe
Posté le 15-05-2007 à 11:01:16  profilanswer
 
n°1560529
Profil sup​primé
Posté le 15-05-2007 à 11:03:30  answer
 

merci et je mets quoi comme valeur de s pour qu'a chaque appel, il y ait une valeur de s différente ? :p

n°1560532
_darkalt3_
Proctopathe
Posté le 15-05-2007 à 11:07:56  profilanswer
 

ben genre un time_t [:pingouino]


Message édité par _darkalt3_ le 15-05-2007 à 11:08:11

---------------
Töp of the plöp
n°1560533
Profil sup​primé
Posté le 15-05-2007 à 11:08:18  answer
 

qu'est-ce ? [:jagstang]

n°1560535
_darkalt3_
Proctopathe
Posté le 15-05-2007 à 11:09:15  profilanswer
 

Google !


---------------
Töp of the plöp
n°1560539
matafan
Posté le 15-05-2007 à 11:13:56  profilanswer
 

Je ne connais pas la gsl mais ça m'étonnerait qu'il faille appeler gsl_rng_env_setup() à chaque génération de nombre. C'est ça qui doit réinitialiser le générateur à chaque appel (à 0, si la var d'environnement GSL_RNG_SEED n'est pas définie).

mood
Publicité
Posté le 15-05-2007 à 11:13:56  profilanswer
 

n°1560544
Profil sup​primé
Posté le 15-05-2007 à 11:14:51  answer
 

bon j'ai mis ça il me sort un segmentation fault

 

double determ_tps_inf(double beta, int nbi,int N,int nbs)
{
       const gsl_rng_type * T1;
       gsl_rng * r1;
       double mu,tps_infection,Nd,inter;
       int i;
       time_t * s;
         Nd = (double) N;
        // c'est la moyenne de la loi exponentielle
       mu = (double) beta*nbi/Nd;

 

      /* create a generator chosen by the
          environment variable GSL_RNG_TYPE */

 

      gsl_rng_env_setup();

 

  s = malloc(sizeof(time_t));

 

      T1 = gsl_rng_default;
       r1 = gsl_rng_alloc (T1);
     
       time(s);
     
        gsl_rng_set (r1,(*s));  // segmentation fault sur cette ligne :/
     

 

// on tire un nombre dans la loi gamma, et on le place dans le vecteur tps_period
         
              inter = gsl_ran_exponential(r1,mu);

  


// on libère la mémoire allouée pour r1
       gsl_rng_free (r1);

 

 return inter;

 

}

 

je pige pas [:zytrasnif]


Message édité par Profil supprimé le 15-05-2007 à 11:15:11
n°1560545
Profil sup​primé
Posté le 15-05-2007 à 11:15:36  answer
 

matafan a écrit :

Je ne connais pas la gsl mais ça m'étonnerait qu'il faille appeler gsl_rng_env_setup() à chaque génération de nombre. C'est ça qui doit réinitialiser le générateur à chaque appel (à 0, si la var d'environnement GSL_RNG_SEED n'est pas définie).


 
 
 
ahhhhhhhhhhhhhhhh merci !!!

n°1560550
_darkalt3_
Proctopathe
Posté le 15-05-2007 à 11:17:54  profilanswer
 

Allez relis la doc et calme toi.
ca ca devrait aller

Code :
  1. time_t maintenant;
  2. time(&maintenant);
  3. gsl_rng_set (r1,maintenant);
 


mes balises spoiler elles marchent pas [:zytrasnif]


Message édité par _darkalt3_ le 15-05-2007 à 11:24:37

---------------
Töp of the plöp
n°1560552
Profil sup​primé
Posté le 15-05-2007 à 11:19:55  answer
 

non connerie :)


Message édité par Profil supprimé le 15-05-2007 à 15:02:00
n°1560680
Profil sup​primé
Posté le 15-05-2007 à 15:03:14  answer
 

Désolé je n'y arrive pas
 
j'ai modifié le code avec les time_t
 
mais ca me sort les memes nombres car les tirages sont faits de façon extremement rapproché
 
par contre ca change d'une execution a une autre
 
mais il faudrait que ca puisse changer alors que les tirages sont faits les uns a la suite des autres :/

n°1560707
matafan
Posté le 15-05-2007 à 15:31:29  profilanswer
 

Il ne faut PAS toucher au seed du générateur dans ta fonction. Le générateur doit être initialisé en dehors de ta fonction.

n°1560712
Profil sup​primé
Posté le 15-05-2007 à 15:33:49  answer
 

merci :)


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

  Gnu Scientific Library : besoin d'aide avec la génération de nombre al

 

Sujets relatifs
programmer sur nokia serie 40 a l'aide SVPAide requete oracle, sum sur 2 tables différentes
Aide sur VBA ExcelBesoin d'aide pour un petit programme de rien... :)
Tester le nombre de lettre d'une chaine de caractéresNombre de résultat d'un select
Gros pb visual C++ Runtime Librairy. A l'aide !!!!![PHP] Aide au sujet d'une fonction et gestion d'erreur
Shell-script (Besoin d'aide) 
Plus de sujets relatifs à : Gnu Scientific Library : besoin d'aide avec la génération de nombre al


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