使用拒绝方法对给定密度函数进行采样?

时间:2016-12-01 20:14:10

标签: matlab statistics probability probability-density

我试图从具有给定密度的分布中采样1000个数,其中f(x)=(1/3)* X ^ 2在-1之间。 x< 2.到目前为止,我有这个,但是根据直方图,这显然是错误的,但我认为我正朝着正确的方向前进。任何有关如何解决这个问题的帮助将不胜感激。

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

1 个答案:

答案 0 :(得分:-1)

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

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