Simulação de Monte Carlo com Python: Um Tutorial Prático

Introdução

A simulação de Monte Carlo é uma técnica amplamente utilizada para resolver problemas complexos e estimar comportamentos de sistemas através da geração de números aleatórios. Neste artigo, vamos explorar como aplicar essa técnica em Python para estimar o valor de π (pi). A simulação de Monte Carlo pode ser usada em diversos campos, desde finanças até engenharia, oferecendo uma abordagem poderosa para análise e previsão.

Objetivo

O objetivo deste tutorial é demonstrar a aplicação da simulação de Monte Carlo para estimar o valor de π. Vamos usar Python e as bibliotecas numpy e matplotlib para gerar pontos aleatórios e visualizar os resultados.

Instalação de Pacotes Necessários

Certifique-se de ter o Python e os pacotes necessários instalados. Para isso, execute o comando abaixo:

pip install numpy matplotlib

Importação das Bibliotecas

Começamos importando as bibliotecas necessárias:

import numpy as np
import matplotlib.pyplot as plt

Definição do Problema

Neste exemplo, utilizaremos a simulação de Monte Carlo para estimar o valor de π. A técnica consiste em gerar pontos aleatórios dentro de um quadrado que contém um círculo inscrito e calcular a razão entre os pontos que caem dentro do círculo e o total de pontos gerados. A fórmula usada para estimar π é:

[ \pi \approx \frac{4 \times (\text{número de pontos dentro do círculo})}{\text{total de pontos gerados}} ]

Implementação da Simulação

Gerar Pontos Aleatórios

Vamos definir uma função para gerar pontos aleatórios e calcular a estimativa de π:

def monte_carlo_pi(num_samples):
    x = np.random.rand(num_samples)
    y = np.random.rand(num_samples)

    distance = x**2 + y**2
    inside_circle = np.sum(distance <= 1)

    pi_estimate = (inside_circle / num_samples) * 4
    return pi_estimate

Executar a Simulação

Rodamos a simulação com um número grande de amostras para obter uma estimativa precisa de π:

num_samples = 10000
pi_estimate = monte_carlo_pi(num_samples)
print(f"Estimativa de π com {num_samples} amostras: {pi_estimate}")

Visualização dos Pontos

Para entender melhor o processo, vamos visualizar os pontos gerados e o círculo. A função abaixo gera um gráfico que mostra os pontos dentro e fora do círculo.

def plot_points(num_samples):
    x = np.random.rand(num_samples)
    y = np.random.rand(num_samples)

    distance = x**2 + y**2

    plt.figure(figsize=(6, 6))
    plt.scatter(x[distance <= 1], y[distance <= 1], color='blue', s=1, label='Dentro do Círculo')
    plt.scatter(x[distance > 1], y[distance > 1], color='red', s=1, label='Fora do Círculo')

    circle = plt.Circle((0.5, 0.5), 0.5, color='black', fill=False)
    plt.gca().add_artist(circle)

    plt.title('Simulação de Monte Carlo')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.legend()
    plt.gca().set_aspect('equal', adjustable='box')
    plt.show()

Gráfico de Simulação

Aqui está o gráfico gerado pela função plot_points, que ilustra a distribuição dos pontos dentro e fora do círculo.

plot_points(num_samples)
Gráfico de Simulação de Monte Carlo

Código Completo

Aqui está o código completo para o tutorial, incluindo a visualização dos pontos:

import numpy as np
import matplotlib.pyplot as plt

def monte_carlo_pi(num_samples):
    x = np.random.rand(num_samples)
    y = np.random.rand(num_samples)

    distance = x**2 + y**2
    inside_circle = np.sum(distance <= 1)

    pi_estimate = (inside_circle / num_samples) * 4
    return pi_estimate

def plot_points(num_samples):
    x = np.random.rand(num_samples)
    y = np.random.rand(num_samples)

    distance = x**2 + y**2

    plt.figure(figsize=(6, 6))
    plt.scatter(x[distance <= 1], y[distance <= 1], color='blue', s=1, label='Dentro do Círculo')
    plt.scatter(x[distance > 1], y[distance > 1], color='red', s=1, label='Fora do Círculo')

    circle = plt.Circle((0.5, 0.5), 0.5, color='black', fill=False)
    plt.gca().add_artist(circle)

    plt.title('Simulação de Monte Carlo')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.legend()
    plt.gca().set_aspect('equal', adjustable='box')
    plt.show()

num_samples = 10000
pi_estimate = monte_carlo_pi(num_samples)
print(f"Estimativa de π com {num_samples} amostras: {pi_estimate}")

plot_points(num_samples)

Conclusão

Neste tutorial, exploramos a simulação de Monte Carlo para estimar o valor de π utilizando Python. A técnica de Monte Carlo é versátil e pode ser aplicada a diversos problemas complexos, oferecendo uma maneira eficiente de realizar estimativas e análises.

Disclaimer: Este artigo é uma simplificação para fins educacionais. A simulação de Monte Carlo é uma técnica poderosa, mas deve ser usada com compreensão adequada dos seus limites e das suposições subjacentes. Os resultados podem variar com base no número de amostras e na natureza do problema.

Aviso de Colaboração e Direitos Autorais

Este documento foi elaborado com a assistência técnica e suporte da inteligência artificial ChatGPT da OpenAI. A assistência recebida inclui sugestões, exemplos e informações técnicas que ajudaram na elaboração do conteúdo. No entanto, todas as ideias, análises e conclusões expressas neste documento são de responsabilidade exclusiva do autor.

A colaboração com a inteligência artificial não transfere ou concede quaisquer direitos autorais ou de propriedade intelectual sobre o conteúdo gerado. O autor é o único responsável pela proteção de qualquer propriedade intelectual associada ao conteúdo deste documento.

Se você precisar de mais informações ou tiver dúvidas sobre a autoria e direitos relacionados ao conteúdo, entre em contato diretamente com o autor.

Edvaldo Guimrães Filho Avatar

Published by

Categories:

Leave a comment