加权蒙特卡洛积分

计算科学 蒙特卡洛 一体化 随机数生成
2021-12-01 08:59:27

我有一个功能F(x)它呈指数下降(如差分 QCD 横截面与不变质量)。我想执行蒙特卡洛积分。问题是只有很小的x有大的F(x)被计入。我的意思是如果范围x[1,8]TeV,最大值FF(1)和最小值FF(8)相差8个数量级。因此,只有随机生成x接受接近 1 的 。我怎样才能产生大x? 谢谢

1个回答

怎么划分区间[0,0.6]在子区间[xi,xi1]所以在每一个中,函数值都具有相同的数量级?例如,您可以选择x0=0,xm=0.6

xi|0<i<mF(xi)=10i
然后你可以对每一个进行积分并对部分结果求和以获得总积分。

我从来没有这样做过,但这是我首先要尝试的。每个区间最右边的贡献可能会被低估,但至少这种影响会降低。

还要确保正确考虑错误(它们取决于您的具体方法):如果凹凸的贡献小于不确定性,则您必须减少错误(我想这是您的情况,因为您对凹凸)或者你可以忽略凹凸。

如果你尝试这个,让我知道它是否有效!

详细实现

(伪代码)

hit = 0
miss = 0
x = generate_random(x_interval)
y = generate_random([0,max_of_function])
if(F(x)>y) hit++ 
else if(F(x)<y) miss++
percentage_hits = hit/(hit+miss)
total_area = (x_interval*max_of_function)
function_area = percentage_hits * total_area

现在您选择了 x_interval 中的区域。对每个间隔计算相同的值,然后对所有部分区域求和。