在MATLAB中生成对数正态随机数?

时间:2013-01-22 19:50:17

标签: matlab

我正在尝试生成从对数正态分布中获取的10000个随机数,其相关的正态分布具有均值= 0.3和std。开发。在MATLAB中= 0.05。

我正在使用内置的lognrnd功能。

我的尝试是:

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

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

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

谢谢你们。

2 个答案:

答案 0 :(得分:6)

您生成的数字实际上来自对数正态分布。 Plot看起来与您的参数相似。将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

答案 1 :(得分:0)

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

// some consuming .cpp file

#include "pch.h"

using namespace winrt;
using namespace Windows::Foundation;
using namespace MyComponent;    // <-- Add for convenience ...or not

App::App()
{
    Cat tabby();        // <-- Should work like a charm ;)
}

正如已经指出的,请注意

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