Cómo establecer una semilla personalizada para el generador de números pseudoaleatorios

Necesito realizar algunas pruebas donde uso randn pseudo generador de números aleatorios. ¿Cómo puedo establecer la semilla por mi cuenta, por lo que cada vez que ejecuto esta prueba obtendré los mismos resultados? (Sí, sé que es un poco raro, pero ese es el problema).

Encontré el objeto RANDSTREAM que tiene la propiedad seed , pero solo es de lectura. ¿Hay alguna forma de usarlo para sembrar el generador?

La vieja forma de hacerlo:

 randn('seed',0) 

La nueva forma:

 s = RandStream('mcg16807','Seed',0) RandStream.setDefaultStream(s) 

Tenga en cuenta que si utiliza la nueva forma, rand y randn comparten el mismo flujo, por lo que si llama a ambos, es posible que se generen números diferentes en comparación con el método anterior (que tiene generadores separados). El antiguo método aún es compatible por esta razón (y el código heredado).

Consulte http://www.mathworks.com/help/techdoc/math/bsn94u0-1.html para obtener más información.

Simplemente puede llamar a rng(mySeed) para establecer la semilla para la secuencia global (probado en Matlab R2011b). Esto afecta las randn rand , randn y randi .

La misma página que James colocó en una lista esta como la alternativa recomendada para varios métodos antiguos (vea la celda central de la columna derecha de la tabla).

Aquí hay un código de ejemplo:

 formato largo;  % Muestra los números con total precisión
 formato compacto;  % Deshacerse de líneas en blanco entre salida
 mySeed = 10;
 rng (mySeed);  % Establecer la semilla
 disp (rand ([1,3]));
 disp (randi (10, [1,10]));
 disp (randn ([1,3]));
 disp ('');
 rng (mySeed);  % Establecer la semilla de nuevo para duplicar los resultados
 disp (rand ([1,3]));
 disp (randi (10, [1,10]));
 disp (randn ([1,3]));

Su salida es:

    0.771320643266746 0.020751949359402 0.633648234926275
      8 5 3 2 8 2 1 7 10 1
    0.060379730526407 0.622213879877005 0.109700311365407

    0.771320643266746 0.020751949359402 0.633648234926275
      8 5 3 2 8 2 1 7 10 1
    0.060379730526407 0.622213879877005 0.109700311365407
 mySeed=57; % an integer number rng(mySeed,'twister') %You can replace 'twister' with other generators 

Cuando solo desee restablecer el RNG a algún estado conocido, simplemente use:

  seed = 0; randn('state', seed); rand ('state', seed); A = round(10*(rand(1,5))); // always will be [10 2 6 5 9]