我正在使用蒙特卡洛方法(对于3个不同的N,分别为10、100、1000)计算积分,但是我想将误差计算为积分的实际准确值(通过分析计算)。怎么做?如何计算积分的实值,并绘制并打印误差值?
这是我现在使用的代码,用于使用蒙特卡洛方法计算积分:
a = 0
b = 2
N = np.array([10, 100, 1000])
def func(x):
return np.power(sin(1/(x*(2-x))),2)
areas = []
j = 0
while j < len(N):
for i in range(N[j]):
xrandom = np.random.uniform(a,b,N[j])
integral = 0.0
for i in range(N[j]):
integral += func(xrandom[i])
result = (b-a)/float(N[j]) * integral
areas.append(result)
plt.subplot(1,3,j+1)
plt.hist(areas, bins=30, ec='black')
j += 1
fig = plt.gcf()
fig.set_size_inches(12.5, 5.5)
plt.show()
答案 0 :(得分:0)
您可以使用scipy.integrate
,它提供了计算积分的不同方法。例如:
scipy.integrate.quad(lambda x: func(x), a, b)