Je dois effectuer quelques tests où j'utilise le générateur de nombres pseudo aléatoires randn
. Comment puis-je définir la graine moi-même, donc chaque fois que je lance ce test, j'obtiens les mêmes résultats? (oui, je sais que c'est un peu bizarre, mais c'est le problème).
J'ai trouvé l'objet RANDSTREAM
qui possède la propriété seed
, mais il est en lecture seule. Est-il possible de l'utiliser pour ensemencer le générateur?
L'ancienne façon de le faire:
randn('seed',0)
La nouvelle façon:
s = RandStream('mcg16807','Seed',0)
RandStream.setDefaultStream(s)
Notez que si vous utilisez la nouvelle méthode, Rand
et randn
partagent le même flux. Par conséquent, si vous appelez les deux, vous pouvez trouver différents numéros générés par rapport à l'ancienne méthode (qui a des générateurs distincts). L'ancienne méthode est toujours prise en charge pour cette raison (et le code hérité).
Voir http://www.mathworks.com/help/techdoc/math/bsn94u0-1.html pour plus d'informations.
Vous pouvez simplement appeler rng(mySeed)
pour définir le germe du flux global (testé dans Matlab R2011b). Ceci affecte les fonctions Rand
, randn
et randi
.
La page same que James a liée à répertorie cette option comme alternative recommandée à diverses méthodes anciennes (voir la cellule du milieu de la colonne de droite du tableau).
Voici un exemple de code:
format long; % Afficher les nombres avec une précision absolue Format compact; % Supprime les lignes vides entre les sorties MySeed = 10; Rng (mySeed); % Définir la graine Disp (Rand ([1,3])); Disp (Randi (10, [1,10])); Disp (randn ([1,3])) ; disp (''); rng (mySeed); % Réglez à nouveau la graine pour dupliquer les résultats Disp (Rand ([1,3])); Disp (randi (10, [1,10])); Disp (randn ([1 , 3]));
Sa sortie est:
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
Lorsque vous voulez simplement réinitialiser le RNG à un état connu, utilisez simplement:
seed = 0;
randn('state', seed);
Rand ('state', seed);
A = round(10*(Rand(1,5))); // always will be [10 2 6 5 9]