我试图计算exp(x)的积分,范围为[0,2]的x和来自均匀dist的样本。不知何故,积分结果恰好是预期值的一半。有谁知道我弄错了哪一部分?谢谢!
x_upLimit=2
max = np.exp(x_upLimit)
def f(x):
return np.exp(x)
def P_samples(N):
return np.random.uniform(0, x_upLimit, N)
def expectation_value(N):
s = P_samples(N)
return sum(f(s))/N
# xs = np.linspace(0, 2)
# plt.plot(xs, np.array([max]*len(xs)))
# plt.plot(xs, f(xs), label ='f(x)')
#estimated
expectation_value(1000000) #3.1938802618
#expected
expr = integrate(exp(x), (x,0,2))
expected = expr.evalf() #6.38905609893065
回答我的老板问题。蒙特卡洛的积分是正确的。不正确的地方是“整合”中使用的功能。它应该是
#expected
expr = integrate(exp(x)*1/(2-0), (x,0,2))
expected = expr.evalf() #3.19452804946533
答案 0 :(得分:0)
在0和2之间计算的exp(x)的积分值实际上是6.389 ...(由您使用的Future
函数给出)。
问题在于你的 FutureBuilder
函数,它应该将函数平均值乘以积分范围(在这种特定情况下为即 2)。有关详细说明,请参阅here。