Escreva um programa em Python para estimar o valor de \pi utilizando o método de Monte Carlo, seguindo os passos descritos abaixo:
  • O programa deve solicitar o número de pontos n a serem gerados.
  • Utilize a função rand() para gerar n pares de pontos aleatórios \left\{x_{k}, y_{k}\right\}, com k=1, \ldots, n, onde x_{k} e y_{k} pertencem ao intervalo [0,1].
  • Para cada par, calcule z_{k}=x_{k}^{2}+y_{k}^{2}.
  • Conte o número de pontos m que satisfazem a condição z_{k} \leq 1, ou seja, que estão dentro do quarto de círculo de raio 1 .
  • Estime o valor de \pi usando a fórmula:
\pi_{n}=\frac{4 m}{n}
Ao final, o programa deve exibir na tela: (i) O número total de pontos gerados n; (ii) O número de pontos m que satisfazem z_{k} \leq 1; (iii) O valor estimado de \pi com base no método e (iv) Faça um gráfico de dispersão, no qual os pontos que satisfazem z_{k} \leq 1 devem ser plotados em azul, e os que não satisfazem essa condição, em vermelho

Passo 1

O enunciado pede um programa em Python para estimar o valor de \pi usando o método de Monte Carlo. Precisamos gerar n pares de pontos aleatórios (x_k,y_k) em [0,1]\times[0,1], contar quantos caem dentro do quarto de círculo de raio 1 (isto é, satisfazem x_k^2+y_k^2\le1) e usar a fórmula
\pi_n = \frac{4\,m}{n},
onde m é o número de pontos no interior.

Passo 2

O fluxo do programa é:
  1. Pedir ao usuário o valor de n.
  2. Repetir n vezes: gerar x e y com random.random(), computar z = x^2+y^2, incrementar o contador m se z\le1, e armazenar as coordenadas em listas separadas para pontos “dentro” e “fora”.
  3. Calcular a estimativa \pi_n = 4m/n.
  4. Exibir n, m e \pi_n.
  5. Fazer um gráfico de dispersão, pintando de azul os pontos com z\le1 e de vermelho os demais.

Passo 3

Abaixo está o programa completo em Python seguindo exatamente esses passos:

Resposta

import random
import matplotlib.pyplot as plt

def main():
 # 1. Solicita ao usuário o número de pontos
 n = int(input("Número de pontos a serem gerados: "))
 
 # Listas para armazenar coordenadas
 \(xs_in\), \(ys_in\) = [], [] # pontos dentro do quarto de círculo
 \(xs_out\), \(ys_out\) = [], [] # pontos fora
 
 m \(=0\) # contador de pontos dentro do quarto de círculo
 
 # 2. Gera n pontos aleatórios e classifica
 for _ in range(n):
 x = random.random()
 y = random.random()
 if x*x + y*y <\(=1\):
 m \(+=1 xs_in\).append(x)
 \(ys_in\).append(y)
 else:
 \(xs_out\).append(x)
 \(ys_out\).append(y)
 
 # 3. Calcula a estimativa de pi
 \(pi_est =4\) * m / n
 
 # 4. Exibe resultados
 print(f"Total de pontos gerados: {n}")
 print(f"Pontos dentro do quarto de círculo: {m}")
 print(f"Estimativa de π = {pi_est}")
 
 # 5. Plota o gráfico de dispersão
 plt.figure(figsize=(6,6))
 plt.scatter(\(xs_in\), \(ys_in\), color='blue', s\(=1\), label='dentro (z≤1)')
 plt.scatter(\(xs_out\), \(ys_out\), color='red', s\(=1\), label='fora (z>1)')
 plt.title("Estimativa de π via Monte Carlo")
 plt.xlabel("x")
 plt.ylabel("y")
 plt.axis('equal')
 plt.legend()
 plt.show()

if __name__ \(==\) "__main__":
 main()

Exercícios relacionados