rndCreateState#

Purpose#

Creates a new random number stream for a specified generator type from a seed value.

Format#

state = rndCreateState(brng, seed)#
Parameters:
  • brng (string) –

    generator name. Options include:

    ”mrg32k3a”

    L’Ecuyer’s MRG32K3A

    ”mt19937”

    Mersenne-Twister 19937

    ”sfmt19937”

    optimized Mersenne-Twister 19937

    ”mt2203-01”

    Mersenne-Twister 2203

    ”niederreiter”

    Niederreiter quasi-random numbers

    ”sobol”

    Sobol quasi-random numbers

    ”wh-01”

    Wichmann-Hill

  • seed (scalar) –

    starting seed value. if -1, GAUSS computes the starting seed based on the system clock.

    Note

    For the quasi-random number generators, "sobol" and "niederreiter", this second input is the dimension rather than a starting seed. For "sobol", \(1 \leq dimension \leq 40\). For "niederreiter", \(1 \leq dimension \leq 318\). See examples below.

Returns:

state (Opaque vector) – the newly created state.

Examples#

Basic usage#

// Starting seed value
seed = 123456;

// Create state for generator 'mrg32k3a'
state = rndCreateState("mrg32k3a", seed);

// Create a 5x1 vector of random normal numbers with
// the state created above
{ r, newstate } = rndn(5, 1, state);

After the code above, r will equal:

   0.51489262
   0.14053340
r = 1.2128406
   0.17112172
  -0.18788202

Creating a state from a numbered stream#

Most random number generators have one single stream in which you can think of the starting state as a bookmark. The "mt2203" and "wh" (or Wichmann-HIll) each have multiple separate streams. The example below shows how to uses these random number streams.

seed = 123456;

// Create a state from the 1028th substream of the
// Mersenne-Twister 2203 RNG
state_mt = rndCreateState("mt2203-1028", seed);

// Create a state from the 112th substream of the
// Wichmann-Hill RNG
state_wh = rndCreateState("wh-112", seed);

// Generate numbers using the states
{ r1, state_mt } = rndu(4, 1, state_mt);
{ r2, state_wh } = rndu(4, 1, state_wh);

After the code above, r1 and r2 should equal:

r1 =  0.14291687    r2 =  0.0073824407
      0.99670199            0.93756896
      0.59512065           0.071140446
   1.5776604e-06           0.021328991

Initializing the Sobol quasi-random number generator#

// Initialize random seed with a dimension of 2
state = rndCreateState("sobol", 2);

// Create some random numbers using this state
{ r, state } = rndu(10, 2, state);

After the code above, r, should be equal to:

r = 0.5000    0.5000
    0.7500    0.2500
    0.2500    0.7500
    0.3750    0.3750
    0.8750    0.8750
    0.6250    0.1250
    0.1250    0.6250
    0.1875    0.3125
    0.6875    0.8125
    0.9375    0.0625

Remarks#

The states returned from this function may NOT be used with rndMTu() or any of the rndKM() or rndLC() functions.

See also

Functions rndStateSkip(), rndn(), rndu(), rndBeta()