Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C /C++の正規分布に従って乱数を生成します


ここでは、正規分布に従う乱数を生成する方法を説明します。通常のランダムの場合、式は次のようになります。

𝑧 = √−2 ln 𝑥1 cos (2𝜋𝑥2)

ここでx1 およびx2 ランダムに選択されます。

#include <cstdlib>
#include <cmath>
#include <ctime>
#include <iostream>
using namespace std;
double rand_gen() {
   // return a uniformly distributed random value
   return ( (double)(rand()) + 1. )/( (double)(RAND_MAX) + 1. );
}
double normalRandom() {
   // return a normally distributed random value
   double v1=rand_gen();
   double v2=rand_gen();
   return cos(2*3.14*v2)*sqrt(-2.*log(v1));
}
main() {
   double sigma = 82.0;
   double Mi = 40.0;
   for(int i=0;i<20;i++) {
      double x = normalRandom()*sigma+Mi;
      cout << " x = " << x << endl;
   }
}

出力

x = 1.91628
x = 57.0448
x = 51.4348
x = 53.5612
x = -83.8511
x = -28.9197
x = -76.0576
x = 62.1435
x = 23.9
x = -87.0663
x = 50.6942
x = 94.1685
x = -88.1597
x = 168.502
x = 40.7563
x = 90.1091
x = 16.9218
x = -36.9178
x = 135.969
x = 56.8888

  1. Pythonで疑似乱数を生成する

    多くのコンピュータアプリケーションでは、乱数を生成する必要があります。ただし、それらのいずれも真に乱数を生成しません。 Pythonは、他のプログラミング手法と同様に、疑似ランダムジェネレーターを使用します。 Pythonのランダム生成は、53ビットの精度のフロートを生成するメルセンヌツイスターアルゴリズムに基づいています。この手法は高速でスレッドセーフですが、暗号化の目的には適していません。 Pythonの標準ライブラリには、ランダム化を処理するためのさまざまな関数を定義するランダムモジュールが含まれています。 random.seed() −この関数は、乱数ジェネレーターを初期化します

  2. Python Numpyを使用して乱数を生成する方法は?

    Numpyパッケージのランダムモジュールには、乱数を生成するための多くの関数が含まれています numpy.random.rand() −指定された形状の配列を作成し、ランダムなサンプルを入力します >>> import numpy as np >>> np.random.rand(3,2) array([[0.10339983, 0.54395499], [0.31719352, 0.51220189], [0.98935914, 0.8240609 ]]) numpy.random.randn() −「標準正規」分布から1つまたは複数のサンプルを返