【发布时间】:2016-05-09 20:06:54
【问题描述】:
我们有遵循对数正态分布的数据,知道它的平均值 = 5.0163 和标准偏差 = 1.0571 我们想要生成并绘制 n (6000) 个样本在范围内 (3:7.9) 遵循与蒙特卡罗方法相同的分布 我们有这段代码,但它没有输出所需范围内的样本(所有样本都小于下限)
Data = [ 3 3 3 3 3.3 3.3 3.6 3.9 3.9 3.9 3.9 3.9 3.9 3.9 3.9 3.9 3.9 3.9 3.9 4.2 4.2 4.2 4.2 4.2 4.2 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.8 4.8 4.8 4.8 4.8 4.8 4.8 4.8 4.8 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.1 5.4 5.4 5.4 5.4 5.4 5.4 5.4 5.4 5.4 5.7 6 6 6 6 6 6 6 6 6.3 6.3 6.3 6.3 6.3 6.3 6.3 6.6 6.6 6.6 6.6 6.9 6.9 6.9 7.8];
%draw Lognormal Fit of the data
histfit(Data,[],'lognormal');
% lognormal curve parameters
LN = lognfit(Data);
m=LN(1);
s=LN(2);
% mean and stanard diviation of the associated normal dist.
mu=log(m^2/sqrt(s^2+m^2));
sigma=sqrt(log((s^2/m^2)+1));
%generate random numbers
for i = 1 : 100
X = lognrnd(mu,sigma)
if ((X>=3)&&(X<=7.9))
X;
end
end
【问题讨论】:
-
你的
if声明没有做任何事情,无论该声明是真是假。你打电话给X;,这完全没有用。 -
如果您想要 100 个值,可以使用
X = lognrnd(mu,sigma,100,1)省略该循环。顺便说一句:在您的示例代码中,mu = 0.45, sigma = 0.136。 -
@Matthias,你是对的 mu 和 sigma 不正确。现在我们可以使用 'X = lognrnd(mu,sigma,6000,1)' 生成 6000 个样本。将生成的值限制在 3 到 7.9 范围内的 b 怎么样
标签: matlab