我想与范围[0.42,1.19]开发对数正态分布 D=[1.19,1.00,0.84,0.71,0.59,0.50,0.42]. 。平均应该是 0.84 和标准偏差尽可能小。还给出的是,CDF的90%(= 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);
有帮助吗?

解决方案

如果您有统计工具箱,并且要从日志正态分布中绘制随机值,则可以调用 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))

其他提示

看来您正在寻找生成截断的log normal随机数。如果我的假设是正确的,则可以使用 拒绝采样 或者 逆变换采样 生成必要的样品。警告:如果您的界限远离平均值,拒绝采样效率非常低。

拒绝采样

如果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(log) - mu)/sigma) - phi((log(log(lb) - mu)/sigma)))

生成,U〜统一(0,1)。

设置,cdf(x)= u,x倒置。

换句话说,

x = exp(mu + sigma * phi_inverse(u *)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top