Friday, September 15, 2006

GSL - Random Number Generation

Random Number Generation


剛剛學弟問到,所以看了一下怎麼使用 GSLRandom Number Generation 函式。

GSL 內建多個產生隨機變數的演算法,詳情請見 Random number generator algorithms,預設情況下,使用的 Generator 是 mt19937

Random Number Generation 使用分成三個步驟︰

1. 初始化隨機變數產生器
 (1) 指定隨機變數產生器(Generator),下面範例指定使用 taus 演算法
gsl_rng * r = gsl_rng_alloc (gsl_rng_taus);
 (2) 設定種子(Seed),下面範例指定種子為 123
gsl_rng_set(r, 123);
2. 取得隨機數 - 重複執行以下函式,其傳回值即為隨機數
 (1) gsl_rng_get (const gsl_rng * r) : 取得隨機數,其隨機值範圍因不同的 Generator 而不同。
 (2) gsl_rng_uniform (const gsl_rng * r) : 取得 [0,1) 範圍內的浮點數,不包含 1。
 (3) gsl_rng_uniform_pos (const gsl_rng * r) : 取得 (0,1) 範圍內的浮點數,不包含 0 及 1。
 (4) gsl_rng_uniform_int (const gsl_rng * r, unsigned long int n) : 取得 [0, n-1] 之間的整數值。
範例︰
for (i = 0; i < n; i++)
{
 double u = gsl_rng_uniform (r);
 printf ("%.5f\n", u);
}

3. 釋放記憶體 - gsl_rng_alloc 會配置記憶體給 gsl_rng * r ,使用完必須釋放記憶體。
gsl_rng_free (gsl_rng * r)

No comments: