【问题标题】:Importance sampling in monte carlo method (in C)蒙特卡罗方法中的重要性抽样(在 C 中)
【发布时间】:2010-09-24 16:14:56
【问题描述】:

嗨,我编写了一个代码,该代码使用“粗略的”蒙特卡罗采样技术成功地逼近了一维、二维和三维积分。 我现在想通过使用“重要性抽样”来改进这一点,因为显然这可以减少方差。我已经阅读了一些关于此的网页,但似乎没有一个特别清楚。我将如何实现这样的事情?非常感谢。杰克

【问题讨论】:

  • 我不敢说,一般来说,弄清楚它的唯一方法是理解数学。有时,您可以通过与类似的已经工作的示例进行类比来解决特定情况,但是这样做时可能会犯一些愚蠢的错误。我从来没有为自己的重要性抽样而烦恼,但浏览维基百科文章表明它并没有比基本抽样定理复杂得多。
  • 这段 C 代码,用于使用“原始”蒙特卡罗采样技术的近似一维、二维和三维积分,可以作为开源获得吗?我需要做一些类似的事情来包含在我正在开发的应用程序中。提前致谢

标签: c integration montecarlo


【解决方案1】:

是的,我发现了我的错误。我没有使用 PDF 的逆积分来计算每个点的“权重”。对于任何对我的条件循环感兴趣的人来说:

for (i = 0; i <= N; i++) {
    X = (double) rand() / (double) RAND_MAX;
   integrand = function(inverse(X)) / PDF(inverse(X));
   sum = sum + integrand;
   sum2 = sum2 + (integrand * integrand);
}
average = sum / N;
average2 = sum2 / N;

其中 PDF 是我的概率密度函数,inverse 是 PDF 的逆积分。而average和average2分别代表和。

【讨论】:

    猜你喜欢
    • 2012-12-11
    • 2012-11-07
    • 2019-11-11
    • 2013-01-18
    • 1970-01-01
    • 2023-04-03
    • 2020-01-28
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多