Ir ao conteúdo

Posts recomendados

Postado

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.

 


 

 

 

 

 

 

Postado

É 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
Postado
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...

 

 

 

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!