Baixe o app para aproveitar ainda mais
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
Compartilhar