Integrales aproximadas usando simulación Monte Carlo en R


12

¿Cómo aproximado la siguiente integral usando la simulación MC?

1111|xy|dxdy

¡Gracias!

Editar (Algún contexto): estoy tratando de aprender a usar la simulación para aproximar integrales, y estoy haciendo algo de práctica cuando me encontré con algunas dificultades.

Edición 2 + 3 : De alguna manera me confundí y pensé que necesitaba dividir la integral en partes separadas. Entonces, en realidad lo descubrí:

n <- 15000
x <- runif(n, min=-1, max=1)
y <- runif(n, min=-1, max=1)
mean(4*abs(x-y))

2
U(1,1)

2
Es 0.5. Entonces necesito multiplicar por dos 2 para dar: 'mean (4 * abs (xy))'. ¿Finalmente lo entendí?
Mi nombre el

3
(+1) ¡ ! :) Puede que tenga que esperar unas pocas (8?) Horas, pero debe considerar volver y colocar su edición en una respuesta para que otros usuarios (como yo) puedan votarla. Bienvenido al sitio! Espero verte continuar participando aquí. Salud. :)
cardenal

1
Un punto para agregar: encuentro que los máximos son extremadamente útiles para las matemáticas simbólicas. Si tuviera que hacer cálculos analíticos yo mismo, tendría el mismo problema que @EpiGrad. Pero en maxima, podrías hacer integrate(integrate(abs(x-y), y, -1, 1), x, -1, 1);y obtener la respuesta 8/3.
Karl

2
Para los interesados ​​R, aunque no tan elegante en el código máximo publicado por Karl, uno puede hacer integrate(Vectorize(function(y) integrate(function(x) abs(x-y), -1, 1)$value), -1, 1)y obtener una aproximación numérica. Se puede usar el paquete cubatureadaptIntegrate(function(x) abs(x[1] - x[2]), c(-1, -1), c(1, 1)) . Esto es solo para dar un par de ideas para la evaluación numérica de integrales que podrían ser útiles, por ejemplo, al probar si una simulación funciona correctamente.
NRH

Respuestas:


1

Solo como referencia, una integral de baja dimensión como esa generalmente se realiza de manera más eficiente a través de una cuadratura determinista en lugar de Monte Carlo. Monte Carlo tiene su propia dimensión de 4 a 6 dimensiones. Primero tengo que aprenderlo en dimensiones bajas, por supuesto ...


2
Supongo que es por eso que esta pregunta está etiquetada como tarea :-).
whuber

0

Puedes hacerlo en Excel con Tukhi .

Entrar

=tukhi.average(abs(2*rand()-1 - (2*rand()-1))) 

y presiona el botón de correr.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.