我正在尝试运行一个通过使用蒙特卡洛积分对一维高斯分布方程进行积分来输出高斯分布的代码。我正在尝试使用mcint模块。我定义了mcint模块中使用的高斯方程式和采样器函数。我不确定mcint函数中的“度量”部分做什么以及应将其设置为什么。有人知道应该采取什么措施吗?我怎么知道将其设置为什么?

from matplotlib import pyplot as mp
import numpy as np
import mcint
import random


#f equation
def gaussian(x,x0,sig0,time,var):
    [velocity,diffussion_coeffient] = var
    mu = x0 + (velocity*time)
    sig = sig0 + np.sqrt(2.0*diffussion_coeffient*time)
    return (1/(np.sqrt(2.0*np.pi*(sig**2.0))))*(np.exp((-(x-mu)**2.0)/(2.0*(sig**2.0))))

#random variables that are generated during the integration
def sampler(varinterval):
    while True:
        velocity = random.uniform(varinterval[0][0],varinterval[0][1])
        diffussion_coeffient = random.uniform(varinterval[1][0],varinterval[1][1])
        yield (velocity,diffussion_coeffient)



if __name__ == "__main__":

    x0 = 0
    #ranges for integration
    velocitymin = -3.0
    velocitymax = 3.0
    diffussion_coeffientmin = 0.01
    diffussion_coeffientmax = 0.89
    varinterval = [[velocitymin,velocitymax],[diffussion_coeffientmin,diffussion_coeffientmax]]

    time = 1
    sig0 = 0.05

    x = np.linspace(-20, 20, 120)

    res = []
    for i in np.linspace(-10, 10, 120):
        result, error = mcint.integrate(lambda v: gaussian(i,x0,sig0,time,v), sampler(varinterval), measure=1, n=1000)
        res.append(result)

    mp.plot(x,res)
    mp.show()

最佳答案

this是您正在谈论的模块吗?如果是这样,整个源只有17行长(在撰写本文时)。相关的行是最后一行,内容为:

return (measure*sample_mean, measure*math.sqrt(sample_var/n))


如您所见,measure参数(其默认值为1)用于缩放integrate方法返回的值。

关于python - mcint模块Python-Monte Carlo集成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51118650/

10-12 14:19