2017-10-15 2 views
1

Mise à jour **valeur attendue en python

Je travaille sur le retour de la valeur attendue E [x^2]. J'ai déjà créé la fonction normale pour échantillonner les valeurs normales avec mean mu et sigma2. Je veux utiliser cette fonction pour générer des valeurs normales, puis appliquer fun à chacune de ces valeurs. Dois-je définir la valeur attendue dans ma boucle, puis appliquer fun? Puis-je prendre la moyenne après avoir trouvé x^2 pour chaque x? Voici ce que je travaille sur:

def fun(x): 
    y=x**2 
    return y 

def EV(fun,n_samples,mu,sigma2): 
     for i in range(1,n_samples): 

... u = np.random.uniform (0,1,1) ... output.append (float (y)) ... return output

+0

'fun' est juste une fonction. Vous pouvez mettre 'response.append (fun (normal (n_samples, mu, sigma2))'. Est-ce votre question? Notez que 'i' n'est pas utilisé par' normal', donc il n'a pas besoin d'être dans la boucle –

Répondre

2

Vous réalisez une expérience Monte-Carlo en estimant la valeur attendue du carré d'un nombre aléatoire normalement distribué. Pour ce faire, il suffit d'accumuler la somme des carrés des pseudo-aléatoires, puis de les diviser par leur nombre.

>>> import random 
>>> n_samples = 100 
>>> sum_x_2 = 0 
>>> for i in range(n_samples): 
...  sum_x_2 += random.normalvariate(0,1)**2 
...  
>>> estimate = sum_x_2/n_samples 
>>> estimate 
1.045308497590742 

J'ai utilisé des écarts normaux standard.

Une autre façon de procéder en Python consiste à utiliser une bibliothèque qui tentera d'effectuer une algèbre informatique. Le Monte-Carlo ne l'a pas fait si mal étant donné que j'ai permis à peu d'échantillons.