3

テスト目的で実物そっくりのデータを模倣するために、単純な不均一な確率でいくつかの乱数を生成しようとしています。パラメータとして mu と sigma を受け入れ、x を返す関数を探しています。ここで、x が特定の範囲内にある可能性は、標準的なベル カーブまたはその付近に従います。非常に正確である必要はなく、効率的である必要さえありません。結果のデータセットは、設定した正確な mu と sigma と一致する必要はありません。比較的単純な不均一乱数ジェネレーターを探しています。可能な戻り値のセットを int に制限しても問題ありません。私はそこに多くの提案を見てきましたが、この単純なケースに当てはまると思われるものはありません.

4

2 に答える 2

2

Box-Muller 変換を簡単に説明すると、次のようになります。

まず、間隔 (0, 1] から 2 つの独立した一様乱数を取得し、それらを U および V と呼びます。

次に、式から 2 つの独立した単位正規分布乱数を取得できます。

X = sqrt(-2 * log(U)) * cos(2 * pi * V);
Y = sqrt(-2 * log(U)) * sin(2 * pi * V);

これにより、mu = 0、sigma = 1 の iid 乱数が得られます。sigma = s を設定するには、乱数に s を掛けます。mu = m を設定するには、乱数に m を追加します。

于 2010-10-18T05:35:20.967 に答える
0

私の最初の考えは、既存のライブラリを使用できないのはなぜですか? ほとんどの言語には、正規乱数を生成するためのライブラリが既にあると確信しています。

何らかの理由で既存のライブラリを使用できない場合は、@ellisbben によって概説されている方法を使用すると、プログラミングがかなり簡単になります。さらに単純な (近似) アルゴリズムは、12 個の一様な数を合計するだけです。

X = -6 ## We set X to be -mean value of 12 uniforms
for i in 1 to 12:
   X += U

X の値はほぼ正常です。次の図は、正規分布と比較して、このアルゴリズムからの 10^5 の描画を示しています。

ここに画像の説明を入力

于 2011-08-31T11:00:49.680 に答える