从 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.
我尝试更改 thin
和 burning
参数的起始值和值,但它似乎不起作用。您能否就如何使 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)
我想从 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.
我尝试更改 thin
和 burning
参数的起始值和值,但它似乎不起作用。您能否就如何使 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)