Skip to content
Extraits de code Groupes Projets
ex1.py 894 octets
Newer Older
  • Learn to ignore specific revisions
  • Martin Delcourt's avatar
    Martin Delcourt a validé
    import random
    import math
    
    
    class my_random_vector:
        def __init__(self,N_dim,min_value = -5, max_value = 5):
            self.vec = [min_value + (max_value-min_value)*random.random() for i in range(N_dim)]
    
        def norm_squared(self):
            nn = 0
            for x in self.vec:
                nn+= x**2
            return nn
    
    def pdf(vec):
        return math.exp(-0.5*vec.norm_squared())
    
    
    def integrate_normal(n_dim, n_tests, n_sigma = 5):
        n_tests = int(n_tests)
        integral = 0
        for test in range(n_tests):
            integral += pdf(my_random_vector(n_dim,-n_sigma,n_sigma))
        return 1./n_tests * integral * (2*n_sigma)**n_dim
    
    
    
    for n_dim in [1,2,5,15]:
        mc = integrate_normal(n_dim,1e5,3)
        truth = math.sqrt((2*math.pi)**n_dim)
        print("N_dim = {}".format(n_dim))
        print("Truth = {}, Monte-Carlo = {}".format(truth,mc))
        print("Difference : {:.2f}%".format(100*(truth-mc)/truth))