如何在python中计算计算积分的误差?

如何在python中计算计算积分的误差?,python,numpy,sympy,montecarlo,integral,Python,Numpy,Sympy,Montecarlo,Integral,我用蒙特卡罗方法计算一个积分(对于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):

我用蒙特卡罗方法计算一个积分(对于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()
a=0
b=2
N=np.数组([101001000])
def func(x):
返回np.幂(sin(1/(x*(2-x))),2)
面积=[]
j=0
当j
您可以使用,它提供了计算积分的不同方法。e、 g:

scipy.integrate.quad(lambda x: func(x), a, b)

您的问题是“如何集成此功能”?因为我不认为它属于这个SE…Wolfram不会提供积分,而是计算它的值
http://www.wolframalpha.com/input/?i=integrate+sin%5E2(1%2F(x*(2-x)))+dx+从+0+到+2
答案是1。4514@Engineero我的问题是,如何计算数值计算积分与蒙特卡罗积分之间的误差(我正在计算)和实积分,以及如何绘制误差及其演变,作为随机数的数量(本例中为N)grow。在Python中,您可能可以使用符号数学包获得精确积分,但一般来说,任何计算函数积分的Python库都会以数字形式进行计算。这适用于几乎所有的计算包,包括Wolfram,尽管Wolfram也会尝试为您提供精确的表达式,这你可以计算。这种数值方法可能比MC更精确,但无论如何,它不一定精确。如果你真的需要精确的积分,我的建议是在纸上计算出精确的形式,并制作一个单独的函数,在你感兴趣的任何范围内计算积分的值。@user6655984这个问题OP使用的特定函数没有基本的反导数,因此数值近似是我们能做的最好的方法。函数的输出参数之一,
abserr
,提供了积分中绝对误差的估计值。