python - 使用重要性采样公式进行积分
问题描述
我正在尝试通过重要性采样公式进行积分。算法如下: 代码
积分值应为:0.838932960013382
此外,我必须使用下一个 概率分布来生成 0 到 1 之间的 1,000,000 个随机数。我还使用下一个权重函数。最后,我必须用这些数字计算这个公式。但是我弄错了数值,我不确定 1.000.000 随机数的计算。
解决方案
你没有正确计算权重归一化和逆,检查你的数学
下面的代码,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)
看起来不错?
推荐阅读
- angular - 使用 ng test 运行 Angular 测试用例时 Chrome 崩溃
- php - 电子邮件中的语言检测
- python - 使用 lxml etree 将 html 标签打印为字符串
- c# - 获取 iTextsharp PDF C# 中的总页数
- cmake - 提供“west zephyr-export”命令时出现致命错误
- database - 向用户展示不同的内容
- javascript - 使用带有 docker 和 express 的节点映像时出现“无法获取/”
- c++ - C++中常量初始化和零初始化顺序的矛盾定义
- vim - 有没有办法在vim中向上或向下复制选定区域?
- flutter - 如何在 Flutter 中更新现有文件(Path_Provider)