Random Number Generation
剛剛學弟問到,所以看了一下怎麼使用 GSL 的 Random 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:
Post a Comment