从 Matlab 中的自定义概率密度函数绘制随机数

Draw random numbers from a custom probability density function in Matlab

我想从 Matlab 中的自定义概率密度函数中抽取 R 个随机数。

这是在x处求值的概率密度函数的表达式。

我考虑过使用 slicesample

R=10^6;
f =  @(x) 1/(2*pi^(1/2))*(1/(x^(3/2)))*exp(-1/(4*x));
epsilon= slicesample(0.3,R,'pdf',f,'thin',1,'burnin',1000);

但是,它不起作用,因为我收到错误

Error using slicesample (line 175)
The step-out procedure failed.

我尝试更改 thinburning 参数的起始值和值,但它似乎不起作用。您能否就如何使 slicesample 工作或从 Matlab 中的自定义概率密度函数中抽取随机数的替代解决方案提出建议?

X 为根据您的目标 pdf 分布的随机变量。应用变量 y = 1/x 的变化并使用带有参数 αwell-known theorem for a function of a random variable, the distribution of Y = 1/X is recognized to be a Gamma distribution ] = 1/2, β = 1/4.

因此,使用这些参数生成 Gamma 随机变量(使用 gamrnd)并取反就足够了。注意Matlab定义Gamma分布使用参数A = α, B = 1/β.

R = 1e5; % desired sample size
x = 1./gamrnd(1/2, 4, [1 R]); % result

检查:

histogram(x, 'Normalization', 'pdf', 'BinEdges', 0:.1:10)
hold on
f = @(x) 1/2/sqrt(pi)./x.^(3/2).*exp(-1/4./x); % target pdf
fplot(f, 'linewidth', .75)