0% encontró este documento útil (0 votos)
82 vistas5 páginas

EXAMEN FINAL - FC2 - Colaboratory

Este documento presenta el uso de métodos de Monte Carlo para calcular integrales de una variable. Se utiliza el método de inversión para generar números aleatorios exponenciales y se compara el método tradicional con el de muestreo por importancia. Los resultados muestran una diferencia de 0.003 entre los métodos y que el muestreo por importancia es más eficiente al requerir menos iteraciones y tener menor varianza.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
82 vistas5 páginas

EXAMEN FINAL - FC2 - Colaboratory

Este documento presenta el uso de métodos de Monte Carlo para calcular integrales de una variable. Se utiliza el método de inversión para generar números aleatorios exponenciales y se compara el método tradicional con el de muestreo por importancia. Los resultados muestran una diferencia de 0.003 entre los métodos y que el muestreo por importancia es más eficiente al requerir menos iteraciones y tener menor varianza.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

26/8/22, 13:07 EXAMEN FINAL - FC2 - Colaboratory

1
#PREGUNTA 1 

2
#Mètodo de transformaciòn

3
"""

4
Obtener la distribucion de NA de acuerdo a p(x)=exp(-x)

5
mediante el metodo de inversion

6
A(int(e^-x))=1->A=1/(1-e^-1)

7
r=integral(p(x))->x=-ln(1-r/A)
8
x = -ln(1-r/A)

9
"""

10

11
import numpy as np

12
from random import random

13
import [Link] as plt

14
from math import *

15
#Constante de normalizaciòn

16
A=1/(1-e**-1)

17
# numero de eventos (puntos)

18
N = 10000

19
def transformacion(N):

20
    vx=[]

21
    vr = []

22
    for i in range(N):

23
        r = random()  # na entre 0 y 1

24
        x = -[Link](1-r/A)  # transformacion

25
        [Link](x)
26
        [Link](r)
27
    return (vx,vr) 

28

29
# llamado de la funcion

30
gx,gr =transformacion(N)

31

32

33

34
[Link](1)

35
[Link]('Distribución homogónea')

36
[Link](gr, color="firebrick")

37
[Link]('r')

38
    

39

40
[Link](2)

41
[Link]('Distribución exponencial')

42
[Link](gx, color="lightblue")

43
[Link]('x')

44

[Link] 1/5
26/8/22, 13:07 EXAMEN FINAL - FC2 - Colaboratory

Text(0.5, 0, 'x')

1 #PREGUNTA 2 (integral de una variable con puntos aleatorios)
2 #A
3 from math import *
4 import numpy as np
5 from random import random
6 from random import seed
7 import [Link] as plt
8 from [Link] import quad
9 from sympy import symbols, integrate
10 #solucion analitica 
11 a= symbols('a')
12 integrate(np.e**(-a**2),a)
13 g=lambda a:np.e**(-a**2)
14 #algoritmo MC
15 def mcp(a,b,N):
16     """
17     Parameters
18     ----------
19     xi : conjunto de N numeros aleatorios uniformemente distribuidos
20     en el intervalo a,b  
21     fi: vector con los valores de la funcion f(xi)
22     sigma : desviacion standart
23
24     Returns
25     -------
26     integ, sigma 
27     """
28     xi = [Link](a,b,N)
29     fi = f(xi)
30     mean = [Link](fi)/N
31     suma2 = [Link](fi**2)/N
32     integ = mean*(b-a)
[Link] 2/5
26/8/22, 13:07 EXAMEN FINAL - FC2 - Colaboratory

33     sigma = sqrt(suma2-mean**2)
34     return integ , sigma 
35     
36 # limites de integracion y la funcion a integrar
37 a,b = 0,1
38 f = lambda x: e**(-x**2)
39 N = 1000
40 integral, sigma = mcp(a,b,N)
41 error = abs(sigma/sqrt(N))
42 print('Integracion con Monte Carlo')
43 print('===============')
44 print('integral analítica y error de método = ',(quad(g,0,1)))
45 print('integral_MC = ','{:6.3f}'.format(integral))
46 print('sigma = ','{:6.3f}'.format(sigma))
47 print('error (tolerancia) = ','{:6.2f}'.format(error))

Integracion con Monte Carlo

===============

integral analítica y error de método = (0.7468241328124271, 8.291413475940725e-15)

integral_MC = 0.743

sigma = 0.202

error (tolerancia) = 0.01

1 #PREGUNTA 2 (integral de una variable con puntos aleatorios)
2 #B
3 from math import *
4 import numpy as np
5 from random import random
6 from random import seed
7 import [Link] as plt
8 from [Link] import quad
9 from sympy import symbols, integrate
10 #solucion analitica 
11 a= symbols('a')
12 integrate(np.e**(-a**2),a)
13 g=lambda a:np.e**(-a**2)
14 #algoritmo MC
15 def mcp(a,b,N):
16     """
17     Parameters
18     ----------
19     xi : conjunto de N numeros aleatorios uniformemente distribuidos
20     en el intervalo a,b  
21     fi: vector con los valores de la funcion f(xi)
22     sigma : desviacion standart
23
24     Returns
25     -------
26     integ, sigma 
27     """
28     xi = [Link](a,b,N)
29     fi = f(xi)
30     pi= p(xi)
31     zi=f(xi)/p(xi)
32     mean = [Link](zi)/N
[Link] 3/5
26/8/22, 13:07 EXAMEN FINAL - FC2 - Colaboratory
p ( )
33     suma2 = [Link](zi**2)/N
34     integ = mean*(b-a)
35     sigma = sqrt(suma2-mean**2)
36     return integ , sigma 
37     
38 # limites de integracion y la funcion a integrar
39 a,b = 0,1
40 A=1/(1-e**-1)
41 f = lambda x: e**(-x**2)
42 p= lambda x: A*e**-x
43 N = 100
44 integral, sigma = mcp(a,b,N)
45 error = abs(sigma/sqrt(N))
46 print('Integracion con Monte Carlo')
47 print('===============')
48 print('integral analítica y error de método = ',(quad(g,0,1)))
49 print('integral_MC = ','{:6.3f}'.format(integral))
50 print('sigma (varianza)= ','{:6.3f}'.format(sigma))
51 print('error (tolerancia) = ','{:6.2f}'.format(error))

Integracion con Monte Carlo

===============

integral analítica y error de método = (0.7468241328124271, 8.291413475940725e-15)

integral_MC = 0.744

sigma (varianza)= 0.053

error (tolerancia) = 0.01

1
#C

2
from math import *

3
import numpy as np

4
from random import random

5
from random import seed

6
import [Link] as plt

7
from [Link] import quad

8
from sympy import symbols, integrate

9
#Resultado de integral con metodo tradicional

10
I1=0.743

11
#Resultado de integral con muestreo por importancia

12
I2=0.746

13
#comparacion de resultados

14
C=I2-I1

15
print("Diferencia de resultados respecto a cada uno de los metodos:",C)

Diferencia de resultados respecto a cada uno de los metodos: 0.0030000000000000027

Como podemos observar, hay una diferencia de 3e-3 de acuerdo a los resultados de cada
integral, lo que significa que ambos métodos son eficientes si tomamos en cuenta que el
resultado analìtico de nuestra integral tiene un valor de 0.746824 aproximadamente.
Es
importante resaltar el hecho de que estamos considerando una tolerancia de ϵ=0.01, y estamos
tomando N1=1000 iteraciones para el primer caso y N2=100 iteraciones para el segundo, por lo
que a grandes rasgos esto significa que el mètodo de muestreo por importancia es mucho más

[Link] 4/5
26/8/22, 13:07 EXAMEN FINAL - FC2 - Colaboratory

eficiente respecto al tradicional, tal como predice la teorìa.


Con respecto a los valores obtenidos
de cada una de las varianzas, podemos observar que la varianza de σ2=0.054 es mucho menor
a σ1=0.202, esto significa que el mètodo de muestreo por importancia presenta una dispersión
ínfima de datos con respecto al primer caso.
Finalmente, podemos decir que es mucho mejor
utilizar el método de muestreo por importancia por los motivos descritos anteriormente.

Productos de pago de Colab


-
Cancelar contratos

check 0 s completado a las 12:58

[Link] 5/5

También podría gustarte