我正在尝试生成从对数正态分布中获取的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?
谢谢你们。
答案 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是对数正态变量的期望参数,您可以使用以下公式计算mu
和sigma
:
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()