package poisson; import edu.csusb.danby.stat.*; import edu.csusb.danby.math.ProbMath;// for loggamma /** * SharkModel class for SharkG applet to demonstrate Poisson Random variables * @author Charles S. Stanton * @version Sun Jul 28 09:23:16 PDT 2002 */ public class SharkModel implements HistogramIF { Distribution p_random = new Distribution(); double lambda ; //Poisson distribution parameter int numberBins; int xcount[]; int nSharks; int total_n_repetitions=0; double[] theoreticalCount; //total_n_repetitions*p(x), where p(x) is theoretical value public SharkModel( double aLambda) { lambda = aLambda; numberBins = (int)Math.floor(lambda*2.0)+5; xcount = new int[numberBins]; theoreticalCount =new double[numberBins]; } /** * fish simulates the poisson distribution using random number * generators. * @param n_repetitions is the number of repetitions to do. * @param lambda is the parameter of the Poisson Distribution */ public void fish(int n_repetitions) { for (int j= 0; j < n_repetitions; j++) { nSharks=p_random.nextPoisson(lambda); if (nSharks < numberBins) { xcount[nSharks]++; } } total_n_repetitions += n_repetitions; for (int i=0; i< numberBins; i++){ theoreticalCount[i] = (double)total_n_repetitions* Math.exp(-1*lambda+i*Math.log(lambda) -ProbMath.loggamma((double)(i+1))); } } public void setLambda( double aLambda){ lambda = aLambda; } public int getNSharks(){ return nSharks;} public void reset(){ total_n_repetitions=0; numberBins = (int)Math.floor(lambda*2.0)+5; xcount = new int[numberBins]; theoreticalCount =new double[numberBins]; nSharks =0; } //HistogramIF methods public int getNumberBins(){ return numberBins;} public int[] getBinCount() { return xcount;} public int getLowValue(){return 0;} public boolean drawTheoretical(){return true;} public boolean useClassMarkLabels(){return false;} public double[] getTheoreticalCount(){return theoreticalCount;} public double[] getClassMarks(){ return null;} public String[] getClassMarkLabels(){ return null;} public void setNumberBins(int n){numberBins = n;} }