我需要一個函數庫,用於生成隨機數,給定的平均值,標準偏差,並使用三種分佈之一 - 指數,正態或統一。生成具有特定分佈的隨機數字c
即使三者中的一個都會有所幫助。 我在找這樣的東西 - http://www.codeproject.com/KB/recipes/zigurat.aspx,但在c。
感謝
我需要一個函數庫,用於生成隨機數,給定的平均值,標準偏差,並使用三種分佈之一 - 指數,正態或統一。生成具有特定分佈的隨機數字c
即使三者中的一個都會有所幫助。 我在找這樣的東西 - http://www.codeproject.com/KB/recipes/zigurat.aspx,但在c。
感謝
均勻:
生成在範圍[0,1]與uniform distribution隨機數:
double X=((double)rand()/(double)RAND_MAX);
Exponentional
生成與參數拉姆達一個exponentional random variable:
-ln(U)/lambda (where U~Uniform[0,1]).
正常:
儘管費時,最簡單的方法是使用central limit theorem [總計足夠均勻分佈的數字],但在wikipedia page中還有其他方法,如box muller transform可生成2個獨立的隨機變量:X,Y〜N(0, 1)
X=sqrt(-2ln(U))*cos(2*pi*V)
Y=sqrt(-2ln(U))*sin(2*pi*V)
where U,V~UNIFORM[0,1]
從X〜N(0,1)到Z〜N(米,轉化秒2)是簡單的:Z = s*X + m
雖然可以生成這些隨機數,我站在@ Amigable Clark Kant建議使用現有的圖書館。
我可能會建議GNU Scientific Library無論是使用或靈感?它有幾個Random Number Distributions,設計用於C和C++。
如果平臺支持C++ 11,則新的強大的隨機數設施可用。它已經支持20個通用發行版。請參閱[C++ 11 FAQ](http://www.stroustrup.com/C++11FAQ.html#std-random)。 – ManuelAtWork