Formula Poisson per generare probabilità eventi

di il
3 risposte

Formula Poisson per generare probabilità eventi

Ciao a tutti!
Sto cercando di implementare in c++ la legge di Poisson f(lambda,k)=((lambda^k)/k!)*e^-Lambda.
Per chi non è pratico cerco di spiegarlo in modo terra terra per evitare di complicare la questione:se ad esempio ipotizzo lambda=2 e k=4.5(ad esempio un media) la mia f mi dice la probabilità che data la media di 4.5 si verifichi l'evento 2.Se avessi lambda=4 il risultato porterebbe ad una probabilità chiaramente maggiore che si verifichi l'evento 4 rispetto all'evento 2. Ci sarebbe molto da dire a riguardo ma spero di aver reso l'idea. Dunque:tutto ciò in c++ l'ho posto così:
#include <iostream> 
#include<cmath>
using namespace std;

int kfattoriale(double k){
	int fattoriale=1;
	for (int i=0; i<=k; i++)
	return fattoriale *= i;
}
double poisson(double k, double lambda) {
    return exp(- lambda)*((lambda *exp(k))/(kfattoriale(k)));
  }

nel main richiamo le funzioni scrivendo:

poisson(i,mediatotalecasa);
dove i rappresenta l'evento di cui voglio la probabilità che si verifichi avendo una media pari a mediatotalecasa.
Il programma viene compilato ma il risultato è sempre sempre sempre 1! qualcuno può dirmi qualcosa a riguardo? Grazie mille a chi vorrà spendere un pochino del suo tempo!

3 Risposte

  • Re: Formula Poisson per generare probabilità eventi

    for (int i=0; i<=k; i++)
       return fattoriale *= i;
    Il for non viene mai eseguito. Il risultato sarà sempre 0. Infatti sempra stranno che non hai una divisione per zero come errore.
  • Re: Formula Poisson per generare probabilità eventi

    Grazie per la risposta! Ho risolto utilizzando
    
    int k=4;
    double lambda=mediatotalecasa;
    v =exp(k * log(lambda) - lgamma(k + 1.0) - lambda);
    
    ora però stavo cercando di creare un vettore con i risultati della mia v in questo modo:
    
    int k=4;
    double lambda=mediatotalecasa;
    double v[5];	
    cout<<"[ ";
        for (int i=0;i<=k;i++){	
    	v[i] =exp(k * log(lambda) - lgamma(k + 1.0) - lambda);
    	cout<<v[i]<<" ";
    }	
        cout<<"]"<<'\n'<<endl;
    
    facendo quindi variare la mia k da 0 a 4!
    Mi dovrebbe uscire qualcosa del genere
    [0.34 0.36 0.19 0.07 0.019] in quanto ho mediatotalecasa=1.07
    ma invece mi esce:
    [0.019 0.019 0.019 0.019 0.019] che è solo l'ultimo valore! dove sbaglio???
  • Re: Formula Poisson per generare probabilità eventi

    v[i] =exp(k * log(lambda) - lgamma(k + 1.0) - lambda);
    il risultato è corretto. La formula non cambia mai.
    Non so se è corretto ma una formula del genere genera valori diversi as ogni iterazione
    v[i] =exp(i * log(lambda) - lgamma(i + 1.0) - lambda);
Devi accedere o registrarti per scrivere nel forum
3 risposte