首页 > 解决方案 > 使用重要性采样公式进行积分

问题描述

我正在尝试通过重要性采样公式进行积分。算法如下: 代码

积分值应为:0.838932960013382

此外,我必须使用下一个 概率分布来生成 0 到 1 之间的 1,000,000 个随机数。我还使用下一个权重函数。最后,我必须用这些数字计算这个公式。但是我弄错了数值,我不确定 1.000.000 随机数的计算。

标签: pythonstatisticsprobabilitysamplingmontecarlo

解决方案


你没有正确计算权重归一化和逆,检查你的数学

下面的代码,Python 3.9,Win 10 x64

import numpy as np
from scipy import integrate

def f(x):
    return 1.0/((np.exp(x)+1.0)*np.sqrt(x))

def w(x):
    return 0.5/np.sqrt(x)

def inv(x):
    return x*x

rng = np.random.default_rng()

N = 100000

x = rng.random(N)

p = inv(x)

q = f(p)/w(p)

print(np.mean(q))

print(integrate.quad(f, 0, 1))

印刷

0.8389948486429488
(0.8389329600133858, 2.0727863869751673e-13)

看起来不错?


推荐阅读