我可以找到
random('normal', 0, 1, 10000,1)
MATLAB 中的命令,但它会生成半正态变量。我想生成随机的半正态变量。半正态分布定义为
我可以从随机正态变量生成随机半正态变量吗?
我可以找到
random('normal', 0, 1, 10000,1)
MATLAB 中的命令,但它会生成半正态变量。我想生成随机的半正态变量。半正态分布定义为
我可以从随机正态变量生成随机半正态变量吗?
正如维基百科所说,您可以计算一个均值为 0 的正态分布随机变量并取其绝对值。半正态概率分布函数与正态 PDF 相同为了,除了标准化的两倍。
如果,那么可以通过几种方法获得。
truncate()
。% MATLAB R2018b
mu = 0; sigma = 1;
pdN = makedist('Normal',mu,sigma);
pdHN = truncate(pdN,0,inf);
X = (-4:.01:4)';
Xt = X(X>0);
figure, hold on, box on
p(1) = plot(X,pdf(pdN,X),'k-','DisplayName','Normal')
p(2) = plot(Xt,pdf(pdHN,Xt),'b-','DisplayName','HalfNormal')
YAxis = get(gca,'YTick');
plot([0;0],[0,YAxis(end)],'b--','HandleVisibility','off')
legend('show')
set(p,'LineWidth',1.8)
ylabel('Probability Density Function (PDF)')
Y = random(pdN,50000,1);
Yt = Y(Y>0);
figure, hold on, box on
histogram(Y,'Normalization','pdf','FaceColor','k','DisplayName','Normal')
histogram(Yt,'Normalization','pdf','FaceColor','b','DisplayName','HalfNormal')
legend('show')