1

平均とシグマを使用normal(mean, sigma)して正規分布の乱数を生成するために使用しています。私のシグマは 8db で、平均は 0 です。しかし、通常 (平均、シグマ) を実行すると、常に負の値になります。これに対して正の数を取得する方法はありますか?

4

2 に答える 2

2

平均を 0 に設定し、シグマを 8 に設定したことを今読みました。逆だと思いました。そのため、負の値が予想されますが、常にではありません。

乱数の生成は疑似ランダムにすぎないため、少数の値のみを生成し、ジェネレーターに毎回同じ定数をシードすると、負の値しか発生しない可能性があります。

現在のシステム時刻を使用してシードを設定するか、多数の乱数を生成して、実際に負の値しか得られないかどうかを確認してください。

于 2012-07-16T01:23:33.403 に答える
2

単に呼び出すだけではありませんnormal(double mean, double sigma)
代わりに、 を呼び出しますdouble r8_normal ( double a, double b, int &seed )。ここaで、 は平均、bはシグマでありseed、乱数発生器を初期化します。

あなたが提供したリンクでNormalライブラリをコンパイルして使用することができました。
normal.cpp と normal.hpp をダウンロードしました。これらは古いファイルで、ほとんどが Fortran からの翻訳です。低い警告レベルでコンパイルできるようにするには、最初の 2 つの宣言を追加および変更して
、normal.hpp を変更する必要がありました。#include <complex>complexstd::complex

次に、テストドライバーを作成しました。

#include "normal.hpp"
#include <iostream>

int main() {
    int seed = 123;
    std::cout << r8_normal (0.0, 8.0, seed) << '\n'
              << r8_normal (0.0, 8.0, seed) << '\n'
              << r8_normal (0.0, 8.0, seed) << '\n'
              << r8_normal (0.0, 8.0, seed) << '\n'
              << r8_normal (0.0, 8.0, seed) << '\n';
}

この出力を与える

8.19933
1.45505
-2.42428
26.9111
12.8398

そして、すべてが平均= 0.0、シグマ= 8.0で機能しているように見えます。

于 2012-07-16T01:53:28.637 に答える