我想试一试 R
从Matlab中自定义的概率密度函数中提取随机数。
这是概率密度函数的表达式,其评估值为 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.
我试着改变起始值和 thin
和 burning
参数,但似乎并不奏效。你能不能给点建议,要么就是如何让 slicesample
工作或在Matlab中从自定义概率密度函数中抽取随机数样本的替代解决方案上?
让 X 是一个根据目标pdf分布的随机变量。应用变量的变化 y = 1x 并使用 著名定理 对于一个随机变量的函数,其分布为 Y = 1X 被公认为是一个 伽马分布 与参数 α = 12, β = 14.
因此,只要生成一个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)