Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web

Función Binomial

Calcula la probabilidad de tener x éxitos en n ensayos, con probabilidad de éxito p.

Dist. Binomial

La variable aleatoria puede tomar los valores x = 0,1,2 .. n.

Ejemplo : Un jugador de pool profesional tiene un rendimiento del 65% por partida.

a ) ¿ Cual es la probabilidad de que en un torneo de 3 partidas gane exactamente 0,1,2,3 partidas ?

class binomial
{
    public static void main(String arg[])
    {
        System.out.println("B(0,3,0.65) : " + binomial(0,3,0.65));
        System.out.println("B(1,3,0.65) : " + binomial(1,3,0.65));
        System.out.println("B(2,3,0.65) : " + binomial(2,3,0.65));
        System.out.println("B(3,3,0.65) : " + binomial(3,3,0.65));
    }

    public static double binomial(int x, int n, double p)
    {
        long comb = combinatoria(n,x);
        return (double) comb * Math.pow(p,x) * Math.pow(1-p,n-x);    
    }

    public static long combinatoria(int n, int x )
    {
        int dif, term;
        double comb = 1; 
   
        dif =  Math.max(x , n - x);
        term = Math.min(x , n - x);
      
        for (int i = 1;  i <= term ; i++)  
        {
            int aux = i + dif;
            comb *= (double) ( i + dif ) / i;
        }
      
        return (long) comb;
    }

}

Bajar archivo

Salida del programa

binomial(0,3,0.65) : 0.04287499999999
binomial(1,3,0.65) : 0.238875
binomial(2,3,0.65) : 0.443625
binomial(3,3,0.65) : 0.274625

b ) Calcular la probabilidad de ganar al menos una partida

1 ) P(x >= 1) : P(x > 0)
2 ) P(x > 0 ) : P(x = 1) + P(x = 2) + P(x = 3)
3 ) P(x > 0) : 1 - P(x <= 0)
4 ) P(x > 0) : 1 - P(x = 0)

Tomando en cuenta la solución 2) podemos plantear un método que realice la sumatoria de la función binomial desde x = xi hasta x = xf

public static double binomialAcum(int xi, int xf, int n, double p)
{
    double sum = 0.0;
    for(int x = xi; x <= xf; x++)
    {
        sum += binomial(x,n,p);
    }
    return sum;
}

Ejercicio : Realizar un programa en java que use los métodos binomial y binomialAcum y que lea las variables por teclado.

*nota : para leer una variable de tipo double ,se puede aplicar algo similar a la lectura de enteros.

double p;
p = Double.parseDouble(in.readLine( ));


Función Poisson

Calcula la probabilidad de tener x éxitos en n ensayos , cuando n tiende a infinito.
Criterio : (n > 15). Igual que la distribución binomial cada éxito tiene probabilidad p.

poisson.gif l = np

En el siguiente programa implementamos dos métodos que nos permiten aplicar el cálculo de probabilidades, mediante valores ingresados por teclado.

import java.io.*;
class poisson
{
    public static void main(String arg[ ]) throws IOException
    {

        BufferedReader in = new BufferedReader(new
            InputStreamReader(System.in));    
    
        System.out.println("Opciones : ");
        System.out.println( );
        System.out.println("1 : Evaluar Poisson");
        System.out.println("2 : Sumatoria de variables Poisson");

        System.out.println( );
        System.out.print("Ingrese opcion : ");

        int opcion = Integer.parseInt(in.readLine( ));

        System.out.println();

        double lamda;
        switch(opcion)
        {
            case 1 : 
                
                int x;
                System.out.print("Ingrese lamda : ");     
                lamda = Double.parseDouble(in.readLine( ));
                
                System.out.print("Ingrese x : ");
                x = Integer.parseInt(in.readLine( ));
                
                System.out.println();
                System.out.print("Resultado : ");
                System.out.println(fpoisson(lamda,x));
                break;

            case 2 :
                
                int xi,xf;
                System.out.print("Ingrese lamda : ");     
                lamda = Double.parseDouble(in.readLine( ));
                
                System.out.print("Ingrese x inicial : ");
                xi = Integer.parseInt(in.readLine( )); 
                System.out.print("Ingrese x final : "); 
                xf = Integer.parseInt(in.readLine( )); 
                System.out.println(); 
                System.out.print("Resultado : "); 
                System.out.println(fpoissonAcum(lamda,xi,xf));  
                break;
        } 
    }
        
    public static double fpoisson(double lamda , int x ) 
    { 
        double p = Math.pow(lamda,x) / factorial(x);
        return p * Math.exp(-lamda);
    }
                
    public static double fpoissonAcum(double lamda, int xi, int xf) 
    { 
        double s = 0.0; 
        for(int x = xi; x <= xf; x++)
        {
            s += fpoisson(lamda,x); 
        }
    
        return s; 
    }  
    
    public static long  factorial(int n)
    {
        long f = 1; 
        if(n > 1)  
        {    
            while (n > 1)   
            {
                f *= n--; 
            }    
        }
        return f;
    }

}
Bajar archivo

Ejemplo

Un tirador va a realizar 3 tiros al blanco. Este tiene un registro historico de dar en el blanco de un 48.6%.

a) ¿ Cual es la probabilidad de no dar en el blanco tras los 3 tiros?
b) ¿ Cual es la probabilidad de efectuar al menos 2 tiros justo en el blanco ?

Solución

a) lamda = n * p = 3 * 0.4860 = 1.458 ; x = 0

Función Hipergeometrica

Sirve para calcular la probabilidad de sacar x elementos de cierta característica, sobre una muestra aleatoria de n elementos.
La muestra se saca de una población de N elementos, en donde M elementos tienen la característica de la cual se desea obtener.

hipergeometrica
public static double hipergeometrica(int x ,int N ,int M ,int n)
{
    double p = combinatoria(M,x) / combinatoria(N,n);
    return p * combinatoria(N - M,n - x);
}

Ejemplo : Se quiere vender a un comerciante una caja de 30 ampolletas pequeñas.
El vendedor sabe que por problemas de producción la mayoría de las cajas vienen con 4 ampolletas defectuosas.
El comprador está decidido a sacar 10 ampolletas para probarlas.
Las condiciones para comprar la caja es de no encontrar más de una ampolleta defectuosa.
¿ Cual es la probabilidad de no hacer la compra ?

Se quiere la probabilidad de sacar 0 o 1 ampolletas defectuosas entre la muestra de 10 ampolletas. Por lo tanto :

N : 30 (población)
M : 4 (numero de elementos con la característica defectuosa)
n : 10 (muestra aleatoria)

P(x <= 1) = P(x = 0) + P(x = 1)

Ejercicio : Realizar un programa en Java para leer las variables por teclado, aplicando el método hipergeometrica e implementar el método hipergAcum como en los programas anteriores.