1

重複の可能性:
Random.nextGaussian() の問題

私は、ランダムな正規分布を作成し、50 の値を与える小さな Java アプリケーションの開発に取り組んでいます。私は mean = 0.0 と std = 1.0 を使用していますが、範囲外の結果が得られた問題は、 0.0 未満の値と 1.0 を超える値があります。誰か助けてもらえますか?

以下は私が使用したコードです:

public static void main(String[] args) {

    double[] list = new double[50];
    double mean = 0.0, std = 1.0;
    Random rng = new Random();

            // to generate 50 values random normal distribution
    for(int i = 0;i<list.length;i++) {
      list[i] = mean + std * rng.nextGaussian();
    }

            // to print the generated values from the list
    for(int i = 0;i<list.length;i++) 
            {
            System.out.println(list[i]); 
    }


}
4

4 に答える 4

9

nextGaussian() この乱数ジェネレーターのシーケンスから、平均 0.0 および標準偏差 1.0 の次の擬似乱数、ガウス (「通常」) 分布の double 値を返します。( http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html#nextGaussian() )

そうstd * rng.nextGaussian();あるべきstd * (1 + rng.nextGaussian())/2です。

ただし、結果は希望するガウス分布ではない可能性があります。平均値と標準偏差を異なるもので調整する必要がありaますb(a + rng.nextGaussian())/b

于 2013-02-02T00:13:11.410 に答える
3

nextGaussian()の意味と目的を正しく解釈していないと思います。範囲内の数値が必要な場合は、代わり[0.0, 1.0)に使用してください。nextDouble()

nextGaussian()単純な数値範囲ではなく、平均と標準偏差を使用します。したがって、理論的には無限の範囲の戻り値があります (double少なくとも の範囲内)。詳細についてnextGaussian()は、この Java ドキュメントを参照してください。

于 2013-02-02T00:12:10.397 に答える
2

標準偏差と値の範囲を混同していると思います。それらは同じものではありません。

標準偏差ウィキペディアのエントリから取得:

たとえば、3つの母集団{0、0、14、14}、{0、6、8、14}、および{6、6、8、8}のそれぞれの平均は7です。それらの標準偏差は7、5です。 、および1、それぞれ。

于 2013-02-02T00:20:24.370 に答える
1

私の理解では、Javadocは次のようにnextGaussian()述べています。

この乱数ジェネレーターのシーケンスから、平均0.0および標準偏差1.0の次の疑似乱数ガウス(「正規」)分布のdouble値を返します。

値が-1から1になるとは言いません。その値にしたい場合は、外部の値を破棄するか、値が外部の場合は-1または1を取ります。

于 2013-02-02T00:21:10.643 に答える