Para obter uma descrição mais detalhada a respeito do método de Monte Carlo acesso o site http://www.chem.unl.edu/zeng/joy/mclab/mcintro.html
/*
UFBA - Universidade Federal Bahia
POP - Programção Matemática
Professor: Charles
Aluno: Carlos Casteo Branco Caldas Neto
Data 26/11/2006
Objetivo: Utilizar o método de Monte Carlo para calculo de PI
Resumo:
Sao gerados pontos aleatorios dentro de uma area de um quarto de quadrado
Parte desse quadrado possui um quarto de circulo imaginario.
Pela regra de tres:
A = (pontos no quarto de circulo)/pontos no quadrado
B = area do quarto de circulo/area do quadrado
A = B
Resolvendo valor de A, isoladamente temos que A = (1/4pi)
pi = 4 * A.
Site de referencia: http://www.chem.unl.edu/zeng/joy/mclab/mcintro.html
*/
public class MonteCarlo {
private int pontosNoQuadrado, pontosNoCirculo;
public static boolean isInteger(String str) {
try { int i = Integer.valueOf(str); }
catch (Exception E) { return false; }
return true;
}
private static final boolean estaNoCirculo(double px, double py){
return ((px * px + py * py) <= 1.0);
}
public void popular (int qtde) {
pontosNoQuadrado = 0; pontosNoCirculo = 0;
for (int i = 0; i < qtde; i++) {
pontosNoQuadrado++;
if (estaNoCirculo(Math.random(),Math.random()))
pontosNoCirculo++;
}
}
public void resumo() {
double valorPI = (double)pontosNoCirculo / (double)pontosNoQuadrado * 4.0;
double erro = Math.PI - valorPI;
System.out.println ("Iteracoes:"+pontosNoQuadrado);
System.out.println ("Erro calculado:"+erro);
System.out.println ("Valor calculado de PI:"+valorPI);
}
public static void main (String[] args) {
System.out.println ("----------------------------------------------------------");
System.out.println ("Carlos Caldas - Calculo de PI usando metodo de Monte Carlo");
System.out.println ("----------------------------------------------------------");
int iteracoes = 1000000;
if ((args.length==1) && (isInteger(args[0])))
iteracoes = Integer.valueOf(args[0]);
else
System.out.println("Foi utilizado um valor padrao para o numero de iteracoes.\n");
MonteCarlo mc = new MonteCarlo();
mc.popular (iteracoes);
mc.resumo();
mc = null;
}
}