【问题标题】:Integral using importance sampling formula使用重要性采样公式进行积分
【发布时间】:2021-05-21 21:11:54
【问题描述】:

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

积分的值应该是:0.838932960013382

我还必须使用下一个 probability distribution 生成 1,000,000 个介于 0 和 1 之间的随机数。我还使用下一个权重 function。 最后用这些数字我必须计算出这个formula。 但是我弄错了数值,我不确定 1.000.000 个随机数的计算。

【问题讨论】:

    标签: python statistics probability sampling montecarlo


    【解决方案1】:

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

    以下代码,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)
    

    看起来不错?

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 2019-01-23
      • 2018-11-22
      • 2017-12-02
      相关资源
      最近更新 更多