Hola, en clase hemos estado estudiando métodos de Monte Carlo, y hasta ahora entiendo la versión es 1D pero no he logrado entender como se hace la generalización a más dimensiones y mucho menos he logrado implementar esto en mi código.
top of page
bottom of page
Para ver lo que nos decía Daniel arriba vamos a integrar una función usando el método de montecarlo multidimensional:
def aIntegrar(xs): #funcion que se quiere integrar (x1+x2+..+x10)**2, donde se quiere integrar sobre x1 ... x10 terminos return sum(xs)**2 N=[2] #lista para los sample sizes for i in range(1,13): N.append(2*N[i-1]) #aca agregamos mas sizes dependientes cada uno del anterior def montecarlo(N, aIntegrar=aIntegrar, MH=0, d=10): #Utilizando la ecuacion que compartio Daniel if MH==0: #Si no tenemos por parametro una lista de valores aleatorios usamos el metodo de Metropolis Hastings para la lista de numeros aleatorios. MH = [np.random.random() for i in range(d)] #d = 10 es la cantidad de variables a integrar b = [(1/N)*aIntegrar(MH) for i in range(N)] return sum(b) #Hacemos la sumatoria sobre N de la función analitica = 155/6 #valor de la integral analitica monte=[] for i in N: #Obtenemos el valor de la integral para las diferentes cantidades de sampleo para mayor precision a = [montecarlo(i) for j in range(16)] monte.append(np.mean(a)) monte=np.array(monte) print('analitica',analitica,'montecarlo',monte) #Comparamos el valor analitico y el que se da con el metodo de montecarlo para diferentes valores de N error = (analitica-monte)/analitica #Encontramos el error que se da con este metodo y nos damos cuenta que es bastante preciso. print('error',error)
Hola, no se específicamente a que te refieres, pero mi respuesta va a ir dirigida a hacer integrales multidimensionales con Montecarlo.
Para hacer una integral 1D con Montecarlo, nos basamos en el teorema del valor medio de calculo:
Entonces la idea es usar un arreglo x_i de N puntos, la idea es que N sea lo más grande posible, donde cada punto se evalúa en la función, luego se saca el promedio de ellos y se pesa con la diferencia de los extremos de la integral y el N.
Para generalizarlo a dos dimensiones, el peso se vuelve el de un área cuadrada y los puntos x_i se vuelven puntos en 2D.
Al ir aumentando dimensiones, se realiza este mismo procedimiento.
Saludos,
Daniel