平均とシグマを使用normal(mean, sigma)
して正規分布の乱数を生成するために使用しています。私のシグマは 8db で、平均は 0 です。しかし、通常 (平均、シグマ) を実行すると、常に負の値になります。これに対して正の数を取得する方法はありますか?
2 に答える
平均を 0 に設定し、シグマを 8 に設定したことを今読みました。逆だと思いました。そのため、負の値が予想されますが、常にではありません。
乱数の生成は疑似ランダムにすぎないため、少数の値のみを生成し、ジェネレーターに毎回同じ定数をシードすると、負の値しか発生しない可能性があります。
現在のシステム時刻を使用してシードを設定するか、多数の乱数を生成して、実際に負の値しか得られないかどうかを確認してください。
単に呼び出すだけではありません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>
complex
std::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で機能しているように見えます。