PDA

Visualizza la versione completa : [C++] Generazione numeri casuali con libreria GSL


Follyer
05-02-2009, 21:01
Ciao a tutti,

vorrei creare una serie di numeri casuali utilizzando già la libreria a disposizione...

Nel ciclo for ho inserito una cosa del genere che non avrà ne capo ne coda...qualcuno però mi sa dare delle dritte??

NumeriCasuali[i]=gsl_rand_chisq(rg, v);

Suggerimenti?

Follyer
05-02-2009, 21:29
Ok...sono arrivato a creare dei numeri casuali così:

for (i=0;i<=n;i=i+1){
NumeriCasuali = gsl_ran_chisq ( rg, nu);
fprintf(fu,"%d\n",NumeriCasuali);
}


però vi presento anche l'output:

-1505515112
-1621903220
-232300434
521175725
1931693538
-1399639393
1514800862
-132442230
-221083312
-1292875680
1247586621
-209675417
789818363
-1807154580
-384000458
-1512623883
-802868934
-1276870287
-1000848969
1419982591
...ecc...ecc

Mi aspettavo numeri più piccoli...mi sbaglio????

xela86
06-02-2009, 12:05
usa il modulo e li ottieni piccoli quanto vuoi chiaramente sopra l'unità

Follyer
06-02-2009, 19:17
Sono quasi arrivato alla soluzione...

utilizzando la funzione:

unsigned int k = gsl_ran_chisq (r, mu);

come faccio a creare numeri che vadano da un certo numero ad un altro???

Ho creato un programma che mi crea numeri da 1 ma il maggiore è 42...come faccio a dargli un range?

MItaly
06-02-2009, 21:41
Non vorrei dire una sciocchezza, ma se la gsl_ran_chisq che usi è questa (http://www.gnu.org/savannah-checkouts/gnu/gsl/manual/html_node/The-Chi_002dsquared-Distribution.html), restituisce un dobule, non un unsigned int; verifica se questo è corretto, così ti posso dare un suggerimento adeguato per la faccenda del range.

Follyer
07-02-2009, 02:20
Se vai avanti nel manuale trovi gli esempi...al posto della poisson ho messo la chisq...mi da numeri dal 6 al 42...però vorrei dei numeri dal 1 al 1000 visto che devo generare 1000 numeri casuali...

MItaly
07-02-2009, 15:30
Sì, ma ribadisco, nel manuale la funzione restituisce un double, per cui trovo molto strano che tu assegni il risultato di quella funzione ad un unsigned int... sei sicuro di quello che stai facendo?

Follyer
07-02-2009, 17:23
Assolutamente no!Non sono sicuro ma è l'unico esempio che ho trovato...in più è pure nel manuale di Gnu...la variabile k sia double che int mi visualizza una serie di numeri...

Facciamo che sia double k = ...

Come faccio a dire che devo essere tra 1 e 1000????

MItaly
07-02-2009, 18:32
tuoNumero = (numeroCasuale - minNumeroCasuale)*(maxTuoNumero-minTuoNumero)/(maxNumeroCasuale-minNumeroCasuale)+minTuoNumero;

Follyer
07-02-2009, 19:21
Ci proverò...grazie!!!

Speravo ci fosse qualche funzione particolare...invece...sigh...e pensare che è solo l'inizio dell'esercizio questo...

Penso che mi sparerò prima di finirlo...

Loading