2012-03-19 16 views
0

に私はMSのVisual Studioに2010は、C/C++

を使用してい対数正規分布から乱数を生成し、今私は対数正規分布で3から200の範囲の乱数を生成したいと思います。私は書くことができ、その後、

a = random(MaxRange+1); // mean i have to write this for 198 time???!!!! 
x = (a+.......)/198 ; //this will obtain a number which is a normal distribution right??? 

は、私が「中心極限定理」は正規分布に一様分布に変換することができますが、私の範囲は、198の番号を持っているので、それは、私のためにあまりにも多くの仕事を思えることを聞きました私の質問に答えるための

y = log (x); // and is this mean that y is log normal distribution???? 

感謝....

+0

最新のC++ 11標準には、その目的のためにライブラリ関数とヘッダーがあると思います。 (そしておそらくBoostにもいくつかあります)。 –

+2

一様分布の確率変数に逆分布関数を適用することにより、任意の分布を得ることができる。 Wyはこの普遍的なアプローチを使用しないでください? – user396672

+0

CまたはC++を使用していますか? – razlebe

答えて

3

あなたは正しく言ったようにあなたが一様に分布する乱数を与えるまあランダム。正規分布の変数を生成するには、実装が簡単なBox-Muller transformationを使用できます。

次に、対数正規変数vを生成する必要があります。 v = exp(mu + sig * n)を計算することによって、nはあなたの正規分布乱数変数です。

私はかなり対数正規分布がサポートしているとして、あなたは200までの範囲3に何を意味するのか理解していない] 0、INF [あなたがBoost random librarylognormal_distributionクラスを見てみたいことがあり

2

。与えられたディストリビューションから数値を生成する方法の例については、hereを参照してください。与えられた乱数ジェネレータとディストリビューションのインスタンスを使ってboost::variate_generatorをインスタンス化する必要があります。

関連する問題