系统自带的对数正态分布函数lognrnd
example
m = 1; % 分布的均值 v = 2; % 分布的方差 mu = log((m^2)/sqrt(v+m^2)); % 公式中的均值参数 sigma = sqrt(log(v/(m^2)+1)); % 公式中的方差参数 [M,V]= lognstat(mu,sigma); % 可以验证随机数的均值与方差的正确性 X = lognrnd(mu,sigma,1,1e6); % 产生随机数 hist(log(X), 100) % 画出随机数的对数正态分布函数图
图片:
slicesample
函数产生随机数sigma = 3; %方差 r0 = 10; %均值 f = @(logR) exp( -( logR - log(r0) ).^2/(2*sigma^2) ) / (sqrt(2*pi) * sigma ); %分布函数 area = integral( f, 5, 15 ); N = 2000; %随机数的个数 x = slicesample( 3, N, 'pdf', f ); [binheight,bincenter] = hist(x,200); h = bar(bincenter,binheight,'hist'); x = exp( x ); %得到最终需要的值
图片:
- 注:如果直接在匿名函数中写
log(r)
(r是变量),则会报错The step-out procedure failed.
迭代次数超过最大限制了。