我想生成一些随机数,对数正态分布,具有指定的几何平均值(GM)和几何标准差(GSD),比如GM = 10和GSD = 2.5。 我如何在Matlab中做到这一点?我查找了Matlab的帮助并找到了这个链接,但我想用我的初始输入作为GM和GSD,而不是平均值和方差。
答案 0 :(得分:5)
Wikipedia表示对数正态分布的几何平均值为exp(µ)
,几何标准差为exp(sigma)
。所以就这样做:
rn = lognrnd(log(GM), log(GSD));
答案 1 :(得分:0)
很难写,因为stackoverflow没有数学标记(可能是下面的一些LaTeX错误),但如果我们定义$ m_a $和$ m_g $作为算术和几何意义,并且$ s_a $和$ s_g $ as算术和几何标准偏差:
$ m_a = exp(\ mu + \ sigma ^ 2/2),$
$ m_g = m_a exp( - \ sigma ^ 2/2),$
和
$ s_g = exp(\ sigma)< - > \ sigma = log(s_g)$
如果$ m_g = 10 $,$ m_a = 10 / \ exp( - \ sigma ^ 2/2)= 10 / \ exp( - \ log(s_g)^ 2/2)$和
$ s_g =(\ exp(\ sigma ^ 2)-1)\ exp(\ mu \ s_g = \ exp(\ mu + \ sigma ^ 2/2)\ sqrt {\ exp(\ sigma ^ 2 - 1)}。 $
所以:
GM = 10; GSD = 2.5;
M = 10/exp(-log(GSD)^2/2);
V = exp(log(GM)+log(GSD)^2/2)*sqrt(exp(log(GSD)^2)-1);
MU = log(M^2 / sqrt(V+M^2))
SIGMA = sqrt(log(V/M^2 + 1))
>> lognrnd(MU, SIGMA, 10, 1)
ans =
18.5128
15.9902
10.3143
13.0549
16.0934
38.5006
30.9571
10.1976
33.2538
17.8427