2017-10-15 68 views
1

更新**Python中的預期值

我正在致力於返回期望值E [x^2]。我已經創建了功能正常以平均mu和sigma2對正常值進行採樣。我想用這個函數來生成正常值,然後將樂趣應用到這些值中的每一個。我需要在我的循環中定義期望值,然後應用好玩?我可以在爲每個x找到x^2之後取平均值嗎?這就是我一直在努力:

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(浮點(Y)) ...返回輸出

+0

'fun'只是一個功能。你可以把'response.append(fun(normal(n_samples,mu,sigma2))'這是你的問題嗎?請注意'i'不被'normal'使用,所以它不需要在循環中 –

回答

2

您正在進行蒙特卡羅實驗,估計正態分佈隨機數的平方的期望值。要做到這一點,你只需要累加僞隨機偏差的平方和,然後除以它們的數量。

>>> 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 

我已經使用了標準偏差。

在Python中做這件事的另一種方法是使用一個試圖執行計算機代數的庫。

>>> from sympy.stats import E, Normal 
>>> Z = Normal('Z', 0, 1) 
>>> E(Z**2) 
1 

考慮到我允許這麼少的樣本,蒙特卡洛並沒有那麼嚴重。