Online Users:1 Access Number:1890

CCALDAS @nline

Home > Algoritmo > Java

Calcula o valor de PI utilizando a técnica de Monte Carlo

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

Fonte


/* 
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;
	}
}
			

Valid XHTML 1.0 Transitional Get Opera Valid CSS!