在Matlab中从自定义的概率密度函数中提取随机数。

问题描述 投票:1回答:1

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

这是概率密度函数的表达式,其评估值为 x.

enter image description here

我想过用 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中从自定义概率密度函数中抽取随机数样本的替代解决方案上?

matlab probability probability-theory
1个回答
4
投票

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)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.