我有一个功能它呈指数下降(如差分 QCD 横截面与不变质量)。我想执行蒙特卡洛积分。问题是只有很小的有大的被计入。我的意思是如果范围是TeV,最大值是和最小值是相差8个数量级。因此,只有随机生成接受接近 1 的 。我怎样才能产生大? 谢谢
加权蒙特卡洛积分
计算科学
蒙特卡洛
一体化
随机数生成
2021-12-01 08:59:27
1个回答
怎么划分区间在子区间所以在每一个中,函数值都具有相同的数量级?例如,您可以选择,
然后你可以对每一个进行积分并对部分结果求和以获得总积分。
我从来没有这样做过,但这是我首先要尝试的。每个区间最右边的贡献可能会被低估,但至少这种影响会降低。
还要确保正确考虑错误(它们取决于您的具体方法):如果凹凸的贡献小于不确定性,则您必须减少错误(我想这是您的情况,因为您对凹凸)或者你可以忽略凹凸。
如果你尝试这个,让我知道它是否有效!
详细实现
(伪代码)
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 中的区域。对每个间隔计算相同的值,然后对所有部分区域求和。
其它你可能感兴趣的问题