Buscar

Cálculo de Integrais

Prévia do material em texto

Cálculo de Integrais
Kassio Ferreira
14 de setembro de 2015
Neste experimento, deseja-se calcular o valor da integral utilizando uma chuva de pontos
aleatórios sobre o gráfico da função. Trata-se de um método probabilístico para calcular integrais. Para fins de
comparação, pode-se calcular a integral acima analiticamente, com ajuda da tabela da distribuição normal
padrão (a tabela não computa os valores exatos, então, a rigor, este não é o valor exato da integral), segue:
Resolvendo com ajuda na Normal padrão:
Faça 
Temos que e 
Substituindo na integral e modificando os limites de integração, temos:
Agora, multiplicamos e dividimos a integral por um termo que não depende de , 
a saber, :
Com o que obtemos 
Note que a integral corresponde à , em que é uma variável
aleatória com distribuição Normal(0,1). Daí, a integral se resume a
Em que é a densidade acumulada em .
Com auxílio do R, encontramos o valor da integral:
sqrt(pi)*(pnorm(sqrt(2)) - pnorm(0)) 
## [1] 0.7468241
A técnica para calcular uma área utilizando uma “chuva de pontos” consiste em
dx∫ 10 e
−x2
dx∫ 10 e
−x2
y = x2
–√
− =x2
−y2
2
dx =
dy
2√
dy∫
2√
0
e−
y2
2
1
2
–√
y
2π
−−√
dy2π
−−√ ∫
2√
0
1
2π
−−
√
e−
y2
2
1
2
–√
dyπ−−√ ∫
2√
0
1
2π
−−
√
e−
y2
2
P(0 < Z < )2
–√ Z
(Φ( ) − Φ(0))π−−√ 2
–√
Φ(z) z
1. Gerar uma grande quantidade de pontos uniformente distribuídos no intervalo de integração desejado,
em e e
2. Computar a proporção de pontos que caíram dentro da área que se deseja calcular.
Considerando a função os seguintes experimentos serão realizados:
1. Variar a quantidade de pontos utilizados na aproximação para os valores 
 com replicações e representar num boxplot;
2. Computar a diferença entre os valores encontrados pelo método e o valor da integral encontrado
analiticamente, assim como computar o erro percentual ( ) e representar graficamente.
Inicialmente, para fazer as replicações para cada , escrevemos a seguinte função, que retorna os resultados
para cada replicação:
integral <- function(N,rep) 
 
replicate(rep, 
{ 
a <- runif(N) 
b <- runif(N) 
 
funcao <- function(x){ 
 exp(-x^2) 
} 
 
vetor = b <= funcao(a) 
area = sum(vetor)/N 
} 
)
Agora, para criar o boxplot, criamos um data frame com os resultados para os valores de N desejados:
dados <- data.frame(N100 = integral(100,1000), N1000 = integral(1000,1000), 
 N10000 = integral(10000,1000), N100000 = integral(100000,1000)) 
colnames(dados) = c("N100", "N1000", "N10000", "N100000")
Para criar o boxplot que permitirá a comparação, utilizamos os seguintes comandos:
suppressPackageStartupMessages(library(ggplot2)) 
library(tidyr) 
library(dplyr, warn.conflicts = FALSE) 
 
p <- dados %>% gather("replication","results") %>% ggplot(aes(x = replication, y = re
sults, fill = replication)) 
 
p <- p + geom_boxplot(alpha=0.5) 
p
x y
f(x) = e−x
2
N = 100,1000,10000,100000 1000
calculado−real
real
N
Agora, faremos as comparações envolvendo o valor da integral calculado analiticamente e os
valores obtidos pelo método probabilístico. Inicialmente, Criamos um data frame para guardar a diferença
absoluta:
attach(dados) 
diff <- abs(dados - 0.7468241) 
colnames(diff) <- c("diff100", "diff1000", "diff10000", "diff100000") 
 
d <- diff %>% gather("replication","difference") %>% ggplot(aes(x = replication, y = 
difference, fill = replication)) 
 
d <- d + geom_boxplot(alpha=0.5) 
d
(0.7468241)
Repetimos o procedimento, agora considerando o erro percentual:
percent <- diff/0.7468241 
colnames(percent) <- c("perc100", "perc1000", "perc10000", "perc100000") 
 
r <- percent %>% gather("replication","percentual") %>% ggplot(aes(x = replication, y
 = percentual, fill = replication)) 
 
r <- r + geom_boxplot(alpha=.5) 
r
# Variar N e fazer, dentro de cada N, 100 replicações. ok 
# Fazer um boxplot com ggplot2 e escrever no rmarkdown ok 
# valor | diferença(calculado - valor real) | error percentual(calc - Valor real)/va
lor real 
# Fazer boxplots

Continue navegando