如何在Matlab中生成具有对数正态分布和指定几何平均值和几何标准差的随机数

时间:2011-12-02 06:01:11

标签: matlab

我想生成一些随机数,对数正态分布,具有指定的几何平均值(GM)和几何标准差(GSD),比如GM = 10和GSD = 2.5。 我如何在Matlab中做到这一点?我查找了Matlab的帮助并找到了这个链接,但我想用我的初始输入作为GM和GSD,而不是平均值和方差。

http://www.mathworks.com/help/toolbox/stats/lognrnd.html

2 个答案:

答案 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