0

我想开发一个范围为 [0.42,1.19] 的对数正态分布,它的少数元素给出为D=[1.19,1.00,0.84,0.71,0.59,0.50,0.42]. 平均值0.84和标准差应尽可能小。还给出了 90% 的 cdf(= 90% 的晶粒)介于0.59 and 1.19.

一旦我知道了包含给定条件的对数正态分布的所有元素,我就可以找到它的 pdf,这就是我所需要的。以下是我尝试过的简单步骤:

D=[1.19,1.00,0.84,0.71,0.59,0.50,0.42];

s=0.30; % std dev of the lognormal distribution

m=0.84; % mean of the lognormal distribution

mu=log(m^2/sqrt(s^2+m^2)); % mean of the associated normal dist.

sigma=sqrt(log((s^2/m^2)+1)); % std dev of the associated normal dist.

[r,c]=size(D);

for i=1:c

D_normal(i)=mu+(sigma.*randn(1));

w(i)=(D_normal(i)-mu)/sigma; % the probability or the wt. percentage

end

sizes=exp(D_normal);
4

2 回答 2

1

如果您有统计工具箱并且想要从对数正态分布中抽取随机值,您可以简单地调用LOGNRND。如果您想知道给定均值和 sigma 在特定值的对数正态分布的密度,请使用LOGNPDF

由于您正在计算权重,因此您可能正在寻找密度。在您的示例中,这些将是:

weights = lognpdf([1.19,1.00,0.84,0.71,0.59,0.50,0.42],0.84,0.3)

weights =
     0.095039     0.026385     0.005212   0.00079218   6.9197e-05   5.6697e-06   2.9244e-07

编辑

如果您想知道多少百分比的颗粒落入 0.59 到 1.19 的范围内,请使用LOGNCDF

100*diff(logncdf([0.59,1.19],0.84,0.3))
ans =
       1.3202

这不是很多。如果您绘制分布,您会注意到您的值的对数正态分布峰值略高于 2

x = 0:0.01:10;
figure
plot(x,lognpdf(x,0.84,0.3))
于 2010-06-18T14:50:26.343 回答
0

您似乎正在寻找生成截断的对数正态随机数。如果我的假设是正确的,您可以使用拒绝采样逆变换采样来生成必要的样本。警告:如果您的界限与均值相差甚远,则拒绝抽样的效率非常低。

拒绝抽样

如果 x ~ LogNormal(mu,sigma) I(lb < x < ub )

然后生成 x ~ LogNormal(mu,sigma) 并在 lb < x < ub 时接受平局。

逆变换采样

如果 x ~ LogNormal(mu,sigma) I(lb < x < ub ) 那么

CDF(x) = phi((log(x) - mu)/sigma) /( phi((log(ub) - mu)/sigma) - phi((log(lb) - mu)/sigma))

生成,u ~ Uniform(0,1)。

设置 CDF(x) = u 并反转 x。

换句话说,

x = exp( mu + sigma * phi_inverse( u * ( phi((log(ub) - mu)/sigma) - phi((log(lb) - mu)/sigma)) ) )

于 2010-06-18T14:43:18.187 回答