2013-08-07 61 views
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 
+0

如何聲明和計算變量(cr,c crmean)? – marsei

+0

cr是一組值。 cr(c)是第c個元素。 crMean是一個常數,例如0.5。 c是一個循環迭代器。 – craigB

+2

如果您有統計工具箱,請查看[此處](https://groups.google.com/forum/#!topic/comp.soft-sys.matlab/_WXo4FhVP4g)。但是,根據[本文](http://arxiv.org/pdf/0907.4010v1),您的方法是合理的 – DrunkenDuck

回答

0

爲什麼不向量化?它可能會更快:

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 
0

你需要以下步驟 1.繪製從均勻分佈的隨機值,U。 2.假設正態分佈在a和b處被截斷。得到

u_bar = F(a)*u +F(b) *(1-u) 

3.使用f

的逆
epsilon= F^{-1}(u_bar) 

小量是截短的正態分佈隨機值。

相關問題