domingo, 24 de noviembre de 2013

Estadisticas en java

El siguente codigo corresponde a un programa en java que realiza diversas operaciones de estadistica. emplea el uso de diferentes constructores

Clase main: es la clase principal y la que se ejecutara para hacer correr el programa

public class Main {
       public static void main(String[] argc) {
      Estad p = new Estad();
      System.out.printf("Factorial de 5 = %.0f\n", p.Factorial(5));
      System.out.printf("Permutacion 5, 3 = %.0f\n", p.Permutacion(5, 3));
      System.out.printf("Combinacion 5, 3 = %.0f\n", p.Combinacion(5, 3));
      System.out.printf("Binomial 20, 3, 0.5 puntual= %f\n", p.Binomial(20, 3, 0.5, false));
      System.out.printf("Binomial 20, 14, 0.5 acumulado= %f\n", p.Binomial(20, 14, 0.5, true));
      System.out.printf("Normal 1.75 1.85, 1.80, 0.05 = %f\n", p.Normal(1.75, 1.85, 1.80, 0.05));      
      System.out.printf("Poison 20, 3, 5  Poisson= %f\n", p.Poisson(20, 3, 5));  
      System.out.printf("Hipergeometrica 10, 15, 20, 7, 5,  Hipergeometrica = %f\n", p.Hipergeometrica( 20, 10, 15, 7, 5));  
       }

}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Clase estad: en esta clase se encuentran todas las operaciones que el programa ha de realizar.

public class Estad {
public double Factorial( int n ) {
if( n == 0 ) return 1;
return n * Factorial( n - 1 );
}
    public double Permutacion( int n, int r ) {
    return( this.Factorial( n ) / this.Factorial( n - r ));
    }
    
    public double Combinacion( int n, int r ) {
    return( this.Factorial( n ) / ( this.Factorial( n - r ) * this.Factorial( r )));
    }
    
    public double Binomial( int n, int r, double p, boolean acum ) {
    double acumulado;
    if( acum ) {
    acumulado = 0.0;
    for( int i = 0; i <= r; i++ ) {
    acumulado += this.Combinacion( n,  i ) * Math.pow(p, i) * Math.pow( (1.0 - p), (n - i));    
    }
    return acumulado;
    } else {
    return( this.Combinacion( n,  r ) * Math.pow(p, r) * Math.pow( (1.0 - p), (n - r)));
    }
    }
    
    public double Normal( double linf, double lsup, double media, double sigmma) {
    double parte1, parte2, dx, area1 = 0.0, area2 = 1.0;
    int celdas = 50;
    parte1 = 1.0 / ( sigmma * Math.sqrt(2.0 * Math.PI));
    while(Math.abs(area1 - area2) > 0.0000001) {
    area2 = area1;
    area1 = 0.0;
    celdas *= 2;
    dx = (double)Math.abs(linf - lsup) / celdas;
    for( double i = linf; i < lsup; i += dx ) {
    parte2 = (i - media) / sigmma;
    area1 += ( parte1 * Math.pow(Math.E, ( -1.0/2.0 * Math.pow(parte2, 2) ))) * dx; 
    }
    }
    return area1;
    }
    
    public double Poisson (int n, int p, int k){
    return  Math.pow(2.71828, n*p) * ((Math.pow(n*p, k)/this.Factorial(k)));
    
    }

        
    public double Hipergeometrica (int N, int N1, int N2, int n, int k) {
    return  ((this.Factorial(N1) / (this.Factorial(k)*this.Factorial(N1-k)))) * ( this.Factorial(N2) / (this.Factorial(n-k) * this.Factorial(N2- (n-k))))  / ( this.Factorial(N) / ( this.Factorial(n) * (this.Factorial(N-n)))); 
   
    }

}


No hay comentarios:

Publicar un comentario