0
Matlab具有從正態分佈中繪製的函數randn,例如,從截斷的正態分佈中繪製僞隨機
x = 0.5 + 0.1*randn()
從平均值0.5和標準偏差0.1的正態分佈繪製的僞隨機數。
鑑於此,以下Matlab代碼相當於從0處截斷的正態分佈採樣1?
while x <=0 || x > 1
x = 0.5 + 0.1*randn();
end
Matlab具有從正態分佈中繪製的函數randn,例如,從截斷的正態分佈中繪製僞隨機
x = 0.5 + 0.1*randn()
從平均值0.5和標準偏差0.1的正態分佈繪製的僞隨機數。
鑑於此,以下Matlab代碼相當於從0處截斷的正態分佈採樣1?
while x <=0 || x > 1
x = 0.5 + 0.1*randn();
end
爲什麼不向量化?它可能會更快:
clear all
size = 1e5; % how many samples you want to generate
mean = .5;
std = .1;
ind = 1:size;
num = size;
while num
cr(ind) = mean + std*randn(1,num);
ind = find(cr<=0 | cr>1);
num = length(ind);
end
你需要以下步驟 1.繪製從均勻分佈的隨機值,U。 2.假設正態分佈在a和b處被截斷。得到
u_bar = F(a)*u +F(b) *(1-u)
3.使用f
的逆epsilon= F^{-1}(u_bar)
小量是截短的正態分佈隨機值。
如何聲明和計算變量(cr,c crmean)? – marsei
cr是一組值。 cr(c)是第c個元素。 crMean是一個常數,例如0.5。 c是一個循環迭代器。 – craigB
如果您有統計工具箱,請查看[此處](https://groups.google.com/forum/#!topic/comp.soft-sys.matlab/_WXo4FhVP4g)。但是,根據[本文](http://arxiv.org/pdf/0907.4010v1),您的方法是合理的 – DrunkenDuck