Ich muss einige Tests durchführen, bei denen ich randn
Pseudo-Zufallszahlengenerator verwende. Wie kann ich den Grundwert selbst festlegen, so dass ich jedes Mal, wenn ich diesen Test durchführe, die gleichen Ergebnisse bekomme? (Ja, ich weiß, es ist ein bisschen komisch, aber das ist das Problem).
Ich habe das RANDSTREAM
-Objekt gefunden, das über die seed
-Eigenschaft verfügt, jedoch schreibgeschützt ist. Gibt es eine Möglichkeit, den Generator zu impfen?
Der alte Weg es zu tun:
randn('seed',0)
Der neue Weg:
s = RandStream('mcg16807','Seed',0)
RandStream.setDefaultStream(s)
Wenn Sie die neue Methode verwenden, verwenden Rand
und randn
den gleichen Stream. Wenn Sie also beide aufrufen, werden möglicherweise andere Nummern generiert als bei der alten Methode (die über separate Generatoren verfügt). Die alte Methode wird aus diesem Grund (und älterer Code) weiterhin unterstützt.
Siehe http://www.mathworks.com/help/techdoc/math/bsn94u0-1.html für weitere Informationen.
Sie können einfach rng(mySeed)
aufrufen, um den Startwert für den globalen Stream festzulegen (getestet in Matlab R2011b). Dies betrifft die Funktionen Rand
, randn
und randi
.
Die gleiche Seite, mit der James verlinkt hat listet diese als empfohlene Alternative zu verschiedenen alten Methoden auf (siehe mittlere Zelle der rechten Spalte der Tabelle).
Hier ist ein Beispielcode:
Format lang; % Zahlen mit voller Genauigkeit anzeigen Format kompakt; % Entfernen Sie leere Zeilen zwischen der Ausgabe MySeed = 10; Rng (mySeed); % Setzen Sie den Samen Disp (Rand ([1,3])); Disp (randi (10, [1,10])); Disp (randn ([1,3])) ; disp (''); rng (mySeed); % Setzen Sie den Samen erneut, um die Ergebnisse zu duplizieren Disp (Rand ([1,3])); Disp (randi (10, [1,10])); Disp (randn ([1 ,3]));
Ihre Ausgabe ist:
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
Wenn Sie den RNG nur in einen bekannten Zustand zurücksetzen möchten, verwenden Sie einfach:
seed = 0;
randn('state', seed);
Rand ('state', seed);
A = round(10*(Rand(1,5))); // always will be [10 2 6 5 9]