Lança histórico, script, e link da aula 6.

parent ac870c03
...@@ -52,6 +52,8 @@ Prof. Dr. [Walmes Zeviani] (walmes [@] ufpr.br) ...@@ -52,6 +52,8 @@ Prof. Dr. [Walmes Zeviani] (walmes [@] ufpr.br)
[9](http://www.im.ufrj.br/ralph/estatisticacomputacional/aula_09.pdf), [9](http://www.im.ufrj.br/ralph/estatisticacomputacional/aula_09.pdf),
[10](http://www.im.ufrj.br/ralph/estatisticacomputacional/aula_010.pdf), [10](http://www.im.ufrj.br/ralph/estatisticacomputacional/aula_010.pdf),
[11](http://www.im.ufrj.br/ralph/estatisticacomputacional/aula_011.pdf); [11](http://www.im.ufrj.br/ralph/estatisticacomputacional/aula_011.pdf);
* [Método da aceitação e rejeição](http://www.columbia.edu/~ks20/4703-Sigman/4703-07-Notes-ARM.pdf) -
Karl Sigman.
## Histórico das aulas ## Histórico das aulas
...@@ -74,6 +76,9 @@ Prof. Dr. [Walmes Zeviani] (walmes [@] ufpr.br) ...@@ -74,6 +76,9 @@ Prof. Dr. [Walmes Zeviani] (walmes [@] ufpr.br)
- Aplicando o MTIP a partir da função densidade e da acumulada. - Aplicando o MTIP a partir da função densidade e da acumulada.
- Gerando números da distribuição trapezoidal com interpolação - Gerando números da distribuição trapezoidal com interpolação
linear. linear.
6. 19/08: Método da Aceitação e Rejeição.
- Fundamentos e algorítmo do método da aceitação e rejeição.
- Programação do método da aceitação e rejeição.
## Atividades e avaliações ## Atividades e avaliações
......
#-----------------------------------------------------------------------
# Aplicar o método da aceitação e rejeição para gerar números da
# trapeizoidal usando a densidade seno.
# Função densidade, f(x), da trapezoidal.
fx <- function(x, a = 0, b = pi/3, c = 2 * pi/3, d = pi) {
k <- 2/(d + c - b - a)
y <- 0 +
(x - a)/(b - a) * (x >= a & x < b) +
(x >= b & x < c) +
(d - x)/(d - c) * (x >= c & x <= d)
return(k * y)
}
curve(fx, 0, pi)
# Função densidade, g(x), da seno.
gx <- function(x) {
sin(x)/2 * (x >= 0 & x <= pi)
}
curve(gx, 0, pi)
# Gerador de números aleatórios da seno, g(x).
rgx <- function(n) {
u <- runif(n)
x <- acos(1 - 2 * u)
return(x)
}
curve(fx, 0, pi)
curve(gx, add = TRUE, col = 2)
curve(fx(x)/gx(x), 0, pi)
abline(h = 1.1, col = 2)
c <- 1.1
curve(fx, 0, pi, ylim = c(0, 0.6))
curve(c * gx(x), add = TRUE, col = 2)
# Função para gerar números aleatórios da trapezoidal pelo método da
# aceitação e rejeição.
rtrap <- function(n) {
x <- numeric(n)
i <- 1
while (i <= n) {
y <- rgx(n = 1)
u <- runif(n = 1)
if (u <= fx(y)/(c * gx(y))) {
x[i] <- y
i <- i + 1
}
}
return(x)
}
x <- rtrap(n = 1000)
plot(density(x))
curve(fx, add = TRUE, col = 2)
#-----------------------------------------------------------------------
# Ilustração do método.
curve(fx, 0, pi, ylim = c(0, 0.6))
curve(c * gx(x), add = TRUE, col = 2)
legend("topleft",
legend = c("Aceitos", "Rejeitados"), col = c(4, 2),
pch = 1, bty = "n")
n <- 100
i <- 1
while (i <= n) {
Sys.sleep(0.05)
y <- rgx(n = 1)
u <- runif(n = 1)
h <- c * gx(y)
if (u <= fx(y)/h) {
points(x = y, y = u * gx(y), col = 4)
rug(x = y, col = 4)
i <- i + 1
} else {
points(x = y, y = u * h, col = 2)
}
}
#-----------------------------------------------------------------------
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment