[C] Parametro con valore atteso uguale a zero

bad.alex
Ciao ragazzi.
Come da titolo, desideravo chiedervi come calcolare un parametro (casuale) il cui valore atteso sia uguale a zero.
Probabilmente sarà una domanda banale, ma al momento non mi viene nulla in mente, se non utilizzare rand() in un intervallo ben definito.
Ho provato a svolgere in questo modo:
        

sum=0.;

while(i<t){

       gamma=rand()/(RAND_MAX);
        sum+=gamma;
}

mean=sum/(double)t;



Qualora volessi considerare l'intervallo [-1,+1], lo calcolerei invece con
 gamma=2.*((double)(rand()/(double)RAND_MAX))-1.0;
. Tuttavia, il valore atteso non risulta essere 0. :(

Spero possiate aiutarmi.

Grazie :wink:

Risposte
kobeilprofeta
Ciao.
La seguente funzione genera un numero double tra a e b.
double double_casuale (double a, double b) {
  double x;
  x=(double) rand(); /*x sta tra 0 e RAND_MAX*/
  x=x/RAND_MAX; /*x sta tra 0 e 1*/
  x*=(b-a); /*x sta tra 0 e b-a*/
  x+=a; /*x sta tra a e b*/
}

Ora puoi usarla per generare numeri tra -1 e 1 oppure tra -k e k.
Ognuno di questi numeri sarà casuale con valore atteso nullo. Se ne generi n, anche la loro somma sarà casuale con valore atteso nullo.

bad.alex
Ti ringrazio tantissimo, kobeilprofeta! Proverò subito ad utilizzarla ;)

EDIT: Mi restituisce: mean: 0.023213 var: 0.202919. Sbaglio qualcosa? :? Ho inserito come a=-1 e come b=+1, ritornando x dalla funzione..

apatriarca
Il risultato non sarà mai esattamente zero.. Dopotutto stai stimando la media a partire da un numero limitato di valori. Con l'aumentare dei valori la media dovrebbe avvicinarsi sempre di più a zero.

Il generatore di numeri casuali nel C non ha comunque caratteristiche particolarmente buone dal punto di vista statistico..

kobeilprofeta
Posta tutto il codice.

bad.alex
Vi ringrazio per le risposte e per l'aiuto. Postare tutto il codice risulterebbe complicato in quanto è molto lungo.
La parte di codice che sto utilizzando è:

        gamma=double casuale(0, 0.5);


Con l'intervallo [-1,1] ho avuto qualche problema per via di alcuni valori negativi privi di significato :lol:
Il valore di gamma, però, risulta essere indipendente dal resto, in quanto lo sto considerando come un termine di errore la cui media sia nulla. I valori che ottengo nelle varia simulazioni mi restituiscono i seguenti valori:

Simulation n. 0
mean: 0.089120 var: 0.173448

Simulation n. 1
mean: 0.095981 var: 0.180343

Simulation n. 2
mean: 0.099322 var: 0.183633

Simulation n. 3
mean: 0.101221 var: 0.185073

Simulation n. 4
mean: 0.107695 var: 0.190167

Simulation n. 5
mean: 0.119018 var: 0.199608

Simulation n. 6
mean: 0.111448 var: 0.193786

Simulation n. 7
mean: 0.112169 var: 0.194510

Simulation n. 8
mean: 0.105887 var: 0.188843

Simulation n. 9
mean: 0.114680 var: 0.196293


Potrebbero essere 'accettabili'?
L'equazione per cui sto calcolando gamma è:

$a(t)=a(t-1)+gamma$

apatriarca
Ma la media che desideri quale è? Se hai solo numeri positivi non avrai mai una media nulla a meno di avere solo zeri. Che cosa fa la funzione casuale?

bad.alex
In realtà io mi aspetto di trovare "an error term with expected value of zero" (dall'articolo che sto prendendo in riferimento). Da qui la media nulla. La funzione casuale proposta da kobeilprofeta mi serve ad attribuire un valore casuale al termine di errore gamma. La variabile a(t), in questo modo, può assumere dei valori che includono una piccola percentuale di errore. E, in teoria, potrebbero(anzi, dovrebbero) generare anche dei valori di a(t) negativi. Probabilmente speravo di ottenere medie nulle, con valori casuali generati da double_casuale senza che gamma avesse sempre valore nullo ... Ma solo ora mi sono reso conto che non è realizzabile.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.