【问题标题】:Generate lognormal random numbers in MATLAB?在 MATLAB 中生成对数正态随机数?
【发布时间】:2023-04-03 09:30:01
【问题描述】:

我正在尝试生成 10000 个随机数,这些随机数取自对数正态分布,其相关正态分布的均值 = 0.3 和标准差。开发。 = 0.05 在 MATLAB 中。

我正在使用内置的lognrnd 函数。

我的尝试是:

R = lognrnd(0.3,0.05,10000,1)

但是,当我使用hist(R) 绘制R 的直方图时,关联的图是正常的,而不是正常的日志。

我在哪里搞砸了?如果平均值 = 0.3 和标准。开发。 = 0.05 的正态分布,生成的对数正态数不应该有平均值 = 0.3 和标准。开发 = 0.05?

谢谢各位。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您生成的数字实际上来自对数正态分布。情节只是看起来与您的参数相似。比较 hist(R)hist(log(R)) - 形状几乎相同。

    关于均值和偏差,请看lognrnd documentation

    mu and sigma are the mean and standard deviation, respectively,
    of the associated normal distribution.
    

    因此生成的数字预计会有不同的均值和偏差。

    编辑:我不确定 Matlab 是否允许您直接指定对数正态分布参数,但您可以从另一组参数中导出一组参数。假设 M 和 V 是对数正态变量的所需参数,您可以使用以下公式计算 musigma

    x = 1 + V / M^2
    sigma = sqrt(log(x))
    mi    = log(M / sqrt(x))
    

    查看wikipedia进行反向转换。

    【讨论】:

    • 好的 - 如果我想从平均值 = 0.3 和标准的对数正态分布生成随机数怎么办?开发 = 0.05?
    • 我想补充一点,如果您要增加 sigma(例如,0.5)并使用更精细的直方图hist(R,100),您会看到更像是倾斜的对数正态曲线期待。
    • 感谢采纳,但我计算有误。查看更新的公式(我已经对其进行了测试,结果似乎正确)。
    【解决方案2】:

    您现在也可以使用Probability Distribution Objects 轻松完成此操作,它使您可以访问更广泛的功能(请参阅提供的链接中的列表)。

    N = 10000;
    pd = makedist('Lognormal',0.3,0.05)      % Probability Distribution Object
    R = random(pd,N,1);                      % Call random()
    

    如前所述,请注意

    >> mean(pd)
    ans =
        1.3515
    >> std(pd)
    ans =
        0.0676
    

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 2015-03-22
      • 2010-12-25
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2016-05-09
      • 2017-05-18
      • 2016-09-08
      相关资源
      最近更新 更多