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 n a serem gerados.
- Utilize a funçāo randO 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)
valor estimado de
com base no método e (iv) Faça um gráfico de dispersino, no qual os pontos que satisfaxem
devem ser plotados em azul, e os que näou satisfazem essa condição, em vernuelho
Passo 1
O enunciado pede para escrever um programa em Python que estime o valor de
usando o método de Monte Carlo. Vamos gerar
pontos aleatórios
em
, calcular
, contar quantos estão dentro do quarto de círculo de raio 1 (ou seja, quantos satisfazem
), e calcular
onde
é o número de pontos dentro do círculo. Por fim, exibir
,
,
e fazer um gráfico de dispersão: pontos dentro em azul e fora em vermelho.
Passo 2
Importar as bibliotecas necessárias: que representa o número de pontos.
random
para gerar números aleatórios e matplotlib.pyplot
para plotar. Ler do usuário um inteiro
Passo 3
Iterar
de 1 até
, gerar
calcular
. Se
, incrementa o contador
e armazena o ponto numa lista de “dentro”; caso contrário, armazena na lista de “fora”.
Passo 4
Calcular a estimativa
Imprimir
,
e
. Fazer o gráfico de dispersão usando
plt.scatter
, colorindo de azul os pontos dentro e de vermelho os pontos fora, e exibir com plt.show()
.Resposta
import random
import matplotlib.pyplot as plt
def \(estimar_pi\)(n):
\(dentro_x\), \(dentro_y\) = [], []
\(fora_x\), \(fora_y\) = [], []
m \(=0\)
for _ in range(n):
x = random.random()
y = random.random()
z = x**\(2+\) y**2
if z <\(=1\):
m \(+=1 dentro_x\).append(x)
\(dentro_y\).append(y)
else:
\(fora_x\).append(x)
\(fora_y\).append(y)
\(pi_estimado =4\) * m / n
return m, \(pi_estimado\), (\(dentro_x\), \(dentro_y\)), (\(fora_x\), \(fora_y\))
def main():
n = int(input("Número de pontos a gerar (n): "))
m, \(pi_est\), \(dentro_pts\), \(fora_pts\) = \(estimar_pi\)(n)
print(f"Total de pontos gerados: {n}")
print(f"Pontos dentro do quarto de círculo: {m}")
print(f"Estimativa de π: {pi_est}")
plt.figure(figsize=(6,6))
plt.scatter(*\(dentro_pts\), color='blue', s\(=5\), label='Dentro (z ≤ 1)')
plt.scatter(*\(fora_pts\), color='red', s\(=5\), label='Fora (z > 1)')
plt.title("Estimativa de π por Monte Carlo")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.axis('equal')
plt.show()
if __name__ \(==\) "__main__":
main()