2015-07-10 91 views
-1

答案应该是117.4,我得到9982.3 ...不知道是什么问题,但这里是我的代码:效用函数没有正确评估的python numpy的

def util(c,p,alpha): 
    mu = 0 
    for i in range(0,len(c)): 
     m = p[i]*(c[i]**(1-alpha)) 
     mu += m 
    return mu**(1/(1-alpha)) 

omega = 0.495 
c = np.array([100,200,1000]) 
p = np.array([omega, omega, 1-2*omega]) 
alpha = 5 

编辑:我不知道我的数学或函数写错了,我在问我的数学是否符合我写的代码。

我正在解决mu的这个方程:u(mu)= E [U(c)]与支付c和概率分布p,如上所述。 U(c)具有c ^(1-α)/(1-α)的形式。

U(mu) = mu^(1-alpha)/(1-alpha) = E[U(c)] = (omega*c1^(1-alpha)+omega*c2^(1-alpha)+(1-2*omega)*c3^(1-alpha))/(1-alpha) 

=> mu = (omega*c1^(1-alpha)+omega*c2^(1-alpha)+(1-2*omega)*c3^(1-alpha))^(1/(1-alpha)) 
+0

'UTIL(C,P,阿尔法)'其实我返回9.99558。 –

+0

这是额外的混淆...... – bpr

+1

@bpr你必须给我们一点点比继续:这里有一个问题。这些信息不足以帮助我们发现错误。 –

回答

2

你的主要问题是Python正在做整数除法。除非你做from __future__ import division(见PEP 238),否则Python 2会执行与/的整数除法。因此,您需要将至少一个操作数更改为浮点值。您可以通过设置alpha = 5.0而不是alpha = 5来完成此操作。或者你可以写1.0 - alpha而不是1 - alpha。另外,通过使用numpy的矢量化操作,你可以使你的代码更紧凑一些。您util功能可缩短至:

def util(c, p, alpha): 
    mu = np.sum(p * (c ** (1.0 - alpha))) 
    return mu ** (1/(1.0 - alpha))