Resolvendo integrais difíceis com a ajuda do acaso
Método de integração de Monte Carlo
ESTAT0090 – Estatística Computacional Prof. Dr. Sadraque E. F. Lucena sadraquelucena@academico.ufs.br
Motivação
Na Estatística e na Ciência de Dados, muitas vezes enfrentamos problemas complexos que não têm uma solução analítica simples ou rápida.
Como calcular o valor de uma integral sem solução?
Como estimar o preço de um ativo financeiro que depende de milhares de cenários futuros?
Como determinar a probabilidade de um evento raro, como a colisão de um asteroide com a Terra?
O Método de Monte Carlo é a nossa “caixa de ferramentas” para resolver esses problemas. Ele nos permite usar o poder da simulação computacional e da aleatoriedade para encontrar respostas aproximadas para questões que seriam impossíveis de resolver no papel.
Objetivos da aula
Entender a lógica por trás do Método de Monte Carlo para cálculo de integrais.
Resolvendo integrais por Monte Carlo
Imagine que temos a seguinte integral: \[
\int_0^1 g(x) dx
\]
Se \(g(x)\) for uma função simples, tipo \(x^2\), a gente consegue resolver na mão: \[
\int_0^1 x^2 dx = \left[\frac{x^3}{3}\right]_0^1 = \frac{1^3}{3}-\frac{0^3}{3} = \frac{1}{3}
\]
Mas se \(g(x)\) for uma função super complexa, tipo \(g(x) = \log(x^2+e^x)\)? A coisa complica, e muito!
É aí que entra o Monte Carlo.
A gente pode interpretar a integral como a esperança de uma variável aleatória.
Resolvendo integrais por Monte Carlo
Vamos pensar numa variável aleatória \(U\) que tem uma distribuição uniforme entre 0 e 1, ou seja, \(U\sim\) Uniforme\((0,1)\). A esperança de uma função de \(U\), \(g(U)\), é dada por: \[
E[g(U)] = \int_{-\infty}^{+\infty} g(u) f_U(u) du
\]
\(f_U(u)\) seria a função densidade da Uniforme\((0,1)\), ou seja, \(f(u)=1\), para \(0<u<1\). Daí \[
E[g(U)] = \int_0^1 g(d) \cdot 1\, du = \int_0^1 g(u)du
\]
Ou seja, a integral é exatamente a esperança da função \(g\) aplicada a uma variável uniforme, \(E[g(U)]\).
Resolvendo integrais por Monte Carlo
Então, se queremos estimar \(E[g(U)]\), o que podemos fazer é: 1. Gerar uma amostra grande de números aleatórios (\(u_1, u_2, \ldots,u_k\)) de uma distribuição uniforme entre 0 e 1. 2. Calcular o valor de g para cada um desses números: \(g(u_1),g(u_2),\ldots,g(u_k)\). 3. Calcular a média desses valores.
Pela Lei dos Grandes Números, a média que a gente calcular vai se aproximar do valor verdadeiro: \[
\frac{1}{k}\sum\limits_{i=1}^k g(u_i) \longrightarrow E[g(U)]
\]
Isso significa que, gerando muitos números aleatórios, a gente consegue uma aproximação excelente para a integral!
Exemplo 15.1
Vamos calcular a integral \[
\int_0^1 (x^3 + \cos(x)) \,dx.
\]
Vimos que calcular essa integral é o mesmo que calcular \(E[U^3 + \cos(U)]\), com \(U\sim\) Uniforme\((0,1)\).
# Gerando 100.000 amostras da Uniforme(0,1)set.seed(1234)u <-runif(100000, min=0, max=1)# Aplicando a função g(u) e calculando a média( media_monte_carlo <-mean(g(u)) )
[1] 1.091724
Comparando com o resultado da função integrate:
integrate(g, lower =0, upper =1)
1.091471 with absolute error < 1.2e-14
De forma analítica, a integral é \(\frac{x^4}{4} + \text{sen}(x)\), logo:
integral <-function(x) (x^4/4) +sin(x)integral(1) -integral(0)
[1] 1.091471
E se a integral não for no intervalo \((a,b)\)?
Para intergrar \(\int_a^b g(x)\, dx\), há duas formas:
Forma 1.Tranformação de variável para o intervalo \((0,1)\).
Fazemos a mudança de variável \[u=\frac{x-a}{b-a} \Rightarrow x = a + (b-1)u\]
Essa transformação leva \(x\in(a,b)\) para \(u\in (0,1)\). Note que \(x=a \Rightarrow u=0\) e \(x=b \Rightarrow u=1\).
Precisamos mudar também o elemento diferencial \(dx\). Derivando a equação \(x = a + (b-1)u\), obtemos: \[
dx = (b-a)du
\]
Substituindo tudo na integral, temos \[
\int_a^b g(x)\,dx = \int_0^1 g\left(a+(b-a)u\right) \cdot (b-a)\, du
\]
Exemplo 15.2
Agora vamos integrar \(\int_2^5 (x^3 + \cos(x)) \, dx\) usando a Forma 1.
g <-function(u) u^3+cos(u) # Função que queremos integrara <-2; b <-5u <-runif(100000, min =0, max =1)mean( g(a+(b-a)*u) * (b-a) )
[1] 150.2645
integral <-function(x) (x^4/4) +sin(x)integral(5) -integral(2)
[1] 150.3818
E se a integral não for no intervalo \((a,b)\)?
Para intergrar \(\int_a^b g(x)\, dx\), há duas formas:
Forma 2.Usamos a esperança de uma Uniforme\((a,b)\): Essa é a mais direta e intuitiva. Lembre-se: \[
E[g(X)] = \int_a^b g(x) f_X(x)\, dx = \int_a^b g(x) \frac{1}{b-a} \, dx = \frac{1}{b-a}\int_a^b g(x) \, dx
\] Logo, \[
\int_a^b g(x) \, dx = (b-a) E[g(X)]
\]
Ou seja, geramos \(x_1,x_2,\ldots,x_k\) com distribuição Uniforme\((a,b)\) e calculamos \[
(b-a) \frac{1}{k} \sum\limits_{i=1}^k g(x_i).
\]
Exemplo 15.2 (continuação)
Agora vamos integrar \(\int_2^5 (x^3 + \cos(x)) \, dx\) usando a Forma 2.
a <-2; b <-5x <-runif(100000, min = a, max = b)(b-a) *mean(g(x))
[1] 150.1721
Exercício 15.1
Calcule por Monte Carlo as integrais:
\(\int_0^1 e^{-x} dx\)
\(\int_2^4 e^{-x} dx\)
\(\int_1^3 x^2 + 3 x^2 dx\)
Ganho da aula
Capacidade de calcular itegrais numericamente usando Monte Carlo.
Fim
Aula baseada no material “Métodos Computacionais Aplicados à Estatística Implementação no Software R” de Cristiano de Carvalho Santos.