我想编写一个从分布中生成样本的函数。为此,我知道它的连续密度函数。想到的第一个想法是写一个像这样的代码:
% a and b are know coefficients.
% besselj is a MATLAB function.
x = 0:0.0001:5;
% PDF=density function (PDF=a (1 x 50.000) vector)
PDF = (x/b).*exp(-(x.^2+a^2)./(2*b)).*besselj(1,(x.*a)./b);
% density function has to be normalized
PDF = PDF./sum(PDF)
% y=the vector containing the sample
[temp , y] = histc(rand(1 , N), [0 cumsum(PDF)]);
对于好奇的,这个密度函数代表赖斯分布; - )。
然而,在第二个想法,这个算法似乎很糟糕。实际上,从100%已知的密度函数,我得到一个部分已知的离散化密度函数(向量PDF),我依靠这个新的密度函数来获得样本。我认为由于离散化,一些信息会丢失。
所以,我的问题是以下:有没有办法可以在不丢失信息的情况下从连续密度函数生成样本?
此外,上面的代码对我来说似乎并不好,因为规范化之前和之后的图(x,PDF)的大小绝对不一样。