Escreva um programa em Python para estimar o valor de
utilizando o método de Monte Carlo, seguindo os passos descritos abaixo:
- O programa deve solicitar o número de pontos
a serem gerados.
- Utilize a função rand() para gerar
pares de pontos aleatórios
, com
, onde
e
pertencem ao intervalo
.
- Para cada par, calcule
.
- Conte o número de pontos
que satisfazem a condição
, ou seja, que estão dentro do quarto de círculo de raio 1 .
- Estime o valor de
usando a fórmula:
Ao final, o programa deve exibir na tela: (i) O número total de pontos gerados
; (ii) O número de pontos
que satisfazem
; (iii) O valor estimado de
com base no método e (iv) Faça um gráfico de dispersão, no qual os pontos que satisfazem
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
usando o método de Monte Carlo. Precisamos gerar
pares de pontos aleatórios
em
, contar quantos caem dentro do quarto de círculo de raio 1 (isto é, satisfazem
) e usar a fórmula
onde
é o número de pontos no interior.
Passo 2
O fluxo do programa é:
- Pedir ao usuário o valor de
. - Repetir
vezes: gerar e com random.random()
, computar, incrementar o contador se , e armazenar as coordenadas em listas separadas para pontos “dentro” e “fora”. - Calcular a estimativa
. - Exibir
, e . - Fazer um gráfico de dispersão, pintando de azul os pontos com
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()