PDA

View Full Version : [c/c++] librerie matematiche e funzioni..help..


AYAMY
01-02-2007, 17:53
ciao a tutti.. ragazzi ho questo problema...devo usare una funzione matematica che ti trova già implementata all'interno di una libreria e passargli un valore che dovrà usare appunto per avere in ritorno il risultato...
Ho scaricato le librerie in questione che si trovano a questo indirizzo http://www.gnu.org/software/gsl/ e dopo averle incluse ho fatto il seguente programma:

#include <iostream>
#include <math.h>
#include <gsl/gsl_math.h>
#include <gsl/rng/gsl_rng.h>
#include <gsl/randist/gsl_randist.h>
#include <gsl/specfunc/gsl_sf_bessel.h>


using namespace std;


int main (void){
double media = 180;
double sigma = (0.5*media)/3;
double result = gsl_ran_gaussian (sigma);
double traslazione = result + media;
cout << traslazione << endl;
cout << "Press ENTER to continue..." << endl;
cin.get();
return 0;
}


ma mi da errore!!!! che cosa ho combinato?

gli errori che mi da sono :

14 C:\Dev-Cpp\febbraio 01 07.cpp invalid conversion from `int' to `const gsl_rng*'
77 C:\Dev-Cpp\include\gsl\randist\gsl_randist.h too few arguments to function `double gsl_ran_gaussian(const gsl_rng*, double)'
14 C:\Dev-Cpp\febbraio 01 07.cpp at this point in file

mi sapreste dare una mano?

Grazie

andbin
01-02-2007, 18:11
mi sapreste dare una mano?Non conosco nei dettagli questa libreria, comunque ho appena cercato la documentazione e la funzione gsl_ran_gaussian ha questo prototipo:

double gsl_ran_gaussian (const gsl_rng * r, double sigma)

E da quanto ho visto, gsl_rng ha a che fare con le funzioni per la generazione di numeri casuali contenute in quella libreria.
Quindi deduco: prima crei un generatore di numeri casuali, poi chiami la funzione gsl_ran_gaussian. ;)

AYAMY
04-02-2007, 17:42
per generatore numeri casuali intendi generare il seme per i numeri casuali.. cioè questo in sostanza?

srand(time(0)); // inizializza il seme per il calcolo dei numeri random


oppure non c'ho capito niente?

please help me!!

andbin
04-02-2007, 20:42
per generatore numeri casuali intendi generare il seme per i numeri casuali.. cioè questo in sostanza?

srand(time(0)); // inizializza il seme per il calcolo dei numeri randomMa nooo, non c'entra nulla. Quello che hai appena detto vale per la libreria standard del "C".

Questa libreria GSL fa tutta una serie di cose (che non conosco nei dettagli) come la gestione dei numeri complessi, equazioni polinomiali, ecc.... Tra tutte queste cose c'è anche la gestione dei numeri casuali.
Vedi <qui> (http://www.gnu.org/software/gsl/manual/html_node/Random-number-generator-initialization.html#Random-number-generator-initialization) le funzioni. Deduco (da quello che ho letto), che dovrai chiamare la funzione gsl_rng_alloc(), poi impostare il seed con gsl_rng_set(), quindi usare questo gsl_rng* (lo passi alla funzione gsl_ran_gaussian) e infine, chiamare la funzione gsl_rng_free().

Comunque magari cerca nella documentazione della GSL per vedere se c'è qualche esempio.
Non saprei dirti di più ... posso solo andare "per logica" ma ovviamente non conosco tale libreria. ;)

AYAMY
05-02-2007, 18:49
mamma mia che casino non ci capisco un granchè...
vedendo l'esempio dovrei aggiungerci
gsl_rng * r = gsl_rng_alloc (gsl_randist_gauss);

si ma dove?

E' giusto o sto ritoppando alla grande?

andbin
05-02-2007, 20:49
mamma mia che casino non ci capisco un granchè...
vedendo l'esempio dovrei aggiungerci
gsl_rng * r = gsl_rng_alloc (gsl_randist_gauss);

si ma dove?

E' giusto o sto ritoppando alla grande?Quel 'gsl_randist_gauss' non so cosa sia .... non l'ho trovato nella documentazione. :stordita:

Posso dirti, andando per logica, che sicuramente dovresti avere come minimo una cosa del tipo:
....

gsl_rng *r = gsl_rng_alloc (???);

if (r != NULL)
{
....

double result = gsl_ran_gaussian (r, sigma);
....

gsl_rng_free (r);
}Quello che ho segnato con ??? è il tipo di generatore casuale, che però non ho idea di quale deve essere ... dipende da cosa devi fare.