| MC.samplemean {animation} | R Documentation |
Integrate a function from 0 to 1 using the Sample Mean Monte Carlo algorithm
MC.samplemean(FUN = function(x) x - x^2, n = ani.options("nmax"), col.rect = c("gray",
"black"), adj.x = TRUE, ...)
FUN |
the function to be integrated |
n |
number of points to be sampled from the Uniform(0, 1) distribution |
col.rect |
colors of rectangles (for the past rectangles and the current one) |
adj.x |
should the locations of rectangles on the x-axis be adjusted?
If |
... |
other arguments passed to |
Sample Mean Monte Carlo integration can compute
I=\int_0^1 f(x) dx
by drawing random numbers x_i from Uniform(0, 1) distribution and average the values of f(x_i). As n goes to infinity, the sample mean will approach to the expectation of f(X) by Law of Large Numbers.
The height of the i-th rectangle in the animation is f(x_i) and the width is 1/n, so the total area of all the rectangles is ∑ f(x_i) 1/n, which is just the sample mean. We can compare the area of rectangles to the curve to see how close is the area to the real integral.
A list containing
x |
the Uniform random numbers |
y |
function values evaluated at |
n |
number of points drawn from the Uniform distribtion |
est |
the estimated value of the integral |
This function is for demonstration purpose only; the integral might be
very inaccurate when n is small.
ani.options('nmax') specifies the maximum number of trials.
Yihui Xie
http://animation.yihui.name/compstat:sample_mean_monte_carlo
oopt = ani.options(interval = 0.2, nmax = ifelse(interactive(),
50, 2))
par(mar = c(4, 4, 1, 1))
## when the number of rectangles is large, use border = NA
MC.samplemean(border = NA)$est
integrate(function(x) x - x^2, 0, 1)
## when adj.x = FALSE, use semi-transparent colors
MC.samplemean(adj.x = FALSE, col.rect = c(rgb(0, 0, 0, 0.3), rgb(1,
0, 0)), border = NA)
## another function to be integrated
MC.samplemean(FUN = function(x) x^3 - 0.5^3, border = NA)$est
integrate(function(x) x^3 - 0.5^3, 0, 1)
## HTML animation page
saveHTML({
ani.options(interval = 0.3, nmax = ifelse(interactive(), 50,
2))
MC.samplemean(n = 100, border = NA)
}, img.name = "MC.samplemean", htmlfile = "MC.samplemean.html",
title = "Sample Mean Monte Carlo Integration", description = c("",
"Generate Uniform random numbers", " and compute the average",
"function values."))
ani.options(oopt)