Ir ao conteúdo
  • Cadastre-se

C Descobrir o PI pelo método de monte carlo, em c


Pedro_HF

Posts recomendados

Ola, como trabalho final do semestre na faculdade , tenho que fazer um algorítimo onde calcule o PI usando o método de monte Carlo. Não estou conseguindo nem começar o algorítimo, porque estou muito perdido, se alguém pudesse me dar um norte eu agradeceria. Segue o problema.

 

-Problema 2: Cálculo do PI

 

O valor do PI pode ser calculado de várias maneiras, sendo que uma delas é utilizando o método de aproximação do PI proposto por Monte Carlo que pode ser visto abaixo:

Dado um círculo com raio r (em radianos) em um quadrado com tamanho de 2r

A área do círculo é Πr2 e a área do quadrado é 4r2

A relação entre a área do círculo e a área do quadrado é: Πr2 / 4r2 = Π / 4

Se for gerado aleatoriamente N pontos dentro do quadrado, aproximadamente N * Π / 4 destes pontos (M) devem cair dentro do círculo.

Assim, o valor do PI (Π) é então aproximado como:
N * Π / 4 = M
Π / 4 = M / N
Π = 4 * M / N

Observe que quanto mais cresce o número de pontos gerados mais a aproximação do PI aumenta.

unnamed.gif.0bd2203e1921b1b169a24c51ad601acb.gif

 

--Segue um algorítimo de exemplo que o professor deu.--

Exemplo de código sequencial


npoints = 10000
circle_count = 0
do j = 1,npoints
	  generate 2 random numbers between 0 and 1

      xcoordinate = random1

      ycoordinate = random2

      if (xcoordinate, ycoordinate) inside circle

      then circle_count = circle_count + 1
end do
PI = 4.0*circle_count/npoints.

 


 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

É só implementar o algorítimo que o professor deu.

Para gerar número aleatórios entre 0 e 1 use a função rand(). Ex.:

float x = rand()/RAND_MAX;

Para verificar se verificar se o ponto está dentro ou não do circulo, calcule a distância do ponto até o centro do círculo. Se for maior que o raio, está fora. 

Para calcular a distância, use pitágoras:

dist = sqrt(x*x + y*y);

 

Espero ter ajudado.

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 horas atrás, Pedro_HF disse:

Ola, como trabalho final do semestre na faculdade , tenho que fazer um algorítimo onde calcule o PI usando o método de monte Carlo. Não estou conseguindo nem começar o algorítimo, porque estou muito perdido, se alguém pudesse me dar um norte eu agradeceria

 

Fica difícil entender sua dificuldade sem qualquer detalhe.

Para começar o algoritmo seria o caso de perguntar se você o entendeu, antes de tudo, e não seria uma questão de C ou C++.

 

Você entende a ideia do método de Monte Carlo?

 

É como resolver o problema sem resolver o problema. 

 

Um ponto dentro do quadrado, um ponto qualquer, ele pode ou não estar também dentro do círculo, já que o círculo inteiro está dentro do quadrado, certo?
 

image.png.a35f86fbc3826cb2d2a38490986c53a4.png

  • E se conhece a área do círculo
  • E se conhece a área do quadrado
  • Dá pra imaginar que a área do círculo é menor que a área do quadrado, já que o círculo está dentro do quadrado
  • Dividindo a área do círculo pela área do quadrado dá Pi/4
  • E qual a probabilidade de um ponto qualquer então estar dentro do círculo? Se eu pegar 1000 pontos aleatoriamente, algo em torno de 1000*Pi/4 ou (250Pi) deles vão estar dentro do círculo, certo? 250Pi dá perto de 780 pontos :) .
     
    Citação

    Se eu sortear 1000 pontos e 800 deles estiverem dentro do quadrado quer dizer que Pi vale 4*800 / 1000 ou 3.2 que está até perto

     
    Citação


     E se vierem 780? Então Pi deve ser 3.12. E o valor está perto do valor real de 3.1415

     

  • E assim você tem uma aproximação do valor de Pi, tanto mais certinha quanto maior for o valor de M certo? Já que os M pontos são aleatórios e há claro infinitos pontos. E se o seu gerador de números aleatórios gerar números assim aleatórios mesmo

Espero que tenha ajudado a entender o algoritmo de Monte Carlo: você sabe que os pontos estão lá, sabe que são infinitos, sabe que se pegar um milhão deles vai ter 250.000*Pi deles em média dentro do círculo. 

 

Só que os computadores são ridiculamente rápidos em calcular essas coisas então eu posso simular 5 milhões deles e contar quantos estão dentro e quantos estão fora do círculo, vendo as coordenadas deles, e lógico que o valor vai estar perto de Pi. E se eu usar 50 milhões? 


Acho que deu pra entender

E o algoritmo

npoints = 10000
circle_count = 0
do j = 1,npoints
	  generate 2 random numbers between 0 and 1
      xcoordinate = random1
      ycoordinate = random2
      if (xcoordinate, ycoordinate) inside circle
      then circle_count = circle_count + 1
end do
PI = 4.0*circle_count/npoints.

Isso parece um Mix de FORTRAN e Pascal. Velhos Tempos :) 

 

circle_count é o número de caras de está dentro do círculo.

Tudo o que você precisa fazer é simular os pontos e tabelar num total de UM critério: dentro ou fora do círculo. E ao final você aplica a sofisticada fórmula Pi = ( 4 * circle_count ) / Tamanho da Amostra...

 

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!