【问题标题】:Using Rejection Method to Sample with a given density function?使用拒绝方法对给定的密度函数进行采样?
【发布时间】:2017-04-16 14:50:20
【问题描述】:

我正在尝试从具有给定密度 f(x) = (1/3)* X^2 在 -1

X=rand(0,1000); Y=rand(1,10000);
a=-1;
b=2;
c=2;
f = (1/3).*X.^2; 

for i = 1:length(X)
while(Y(i) > f )
    U = rand; V = rand;
    X(i) = a+(b-a)*U;
    Y(i) = c*V;
end

end
hist(X);
X

【问题讨论】:

  • 这可能是一个错误吗?第一行应该是X=rand(1,1000);?
  • @mpaskov 我认为这有效!非常感谢!
  • 如前所述,f 的最大值在 2 处达到,等于 4/3。如果您将c 设置为 4/3,您的采样效率会更高

标签: matlab statistics probability probability-density


【解决方案1】:

从任意分布中抽取样本实际上非常简单。您只需要做两件事:1) 找到 CDF(通过集成 PDF),以及 2) 找到 CDF 的逆。然后,您只需从均匀分布中抽取样本(使用 rand())并将该值映射到 CDF 的倒数上。在你的情况下,你得到

y = rand(1e6, 1); x = nthroot((9*c - 1), 3); 历史(x, 1000)

【讨论】:

  • 对不起,是想说
  • y = rand(1e6, 1); x = nthroot((9*y - 1), 3);历史(x,1000)
  • 您已回答相关但未直接提出的问题。您的代码中没有使用拒绝。
  • 您能否详细说明“拒绝”是什么意思?
  • 我不是在提议拒绝抽样。每个样本 nthroot((9*rand - 1), 3) 将来自分布 (1/3)*x^2, -1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2014-05-04
  • 1970-01-01
  • 2013-03-08
  • 2014-06-19
相关资源
最近更新 更多