效用函数没有正确评估 numpy python
Utility function not evaluating correctly numpy python
答案应该是 117.4,我得到的是 9982.3...不知道问题出在哪里,但这是我的代码:
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-alpha)/(1-alpha).
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))
你的主要问题是 Python 正在做整数除法。 Python 2 用 /
做整数除法,除非你做 from __future__ import division
(见 PEP 238)。因此,您需要将至少一个操作数更改为浮点值。您可以通过设置 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))
答案应该是 117.4,我得到的是 9982.3...不知道问题出在哪里,但这是我的代码:
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-alpha)/(1-alpha).
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))
你的主要问题是 Python 正在做整数除法。 Python 2 用 /
做整数除法,除非你做 from __future__ import division
(见 PEP 238)。因此,您需要将至少一个操作数更改为浮点值。您可以通过设置 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))