2014-07-23 55 views
6

Ho provato std::mt19937 gen(2007) in C++ e RandStream.create('mt19937ar','seed',2007) in Matlab. Ho anche provato diverse strutture, ma non sono riuscito a trovare una struttura di seme specifica per trovare gli stessi numeri casuali tra Matlab e C++. Come posso gestire questo?Esistono sementi per Matlab Random e C++ Random?

+0

Quale funzione si utilizza in MATLAB per ottenere i numeri casuali? –

+0

Sto usando le funzioni 'gamrnd' e' randn' in MATLAB. – taha

risposta

3

Si desidera che un generatore casuale sia deterministico e funzioni allo stesso modo in due implementazioni distinte.

Non è garantito che le implementazioni di Matlab e C++ :: std genereranno gli stessi risultati. Anche se sarebbe ragionevole pensare che dovrebbero - è lo stesso algoritmo dopo tutto. Secondo Wikipedia ci sono aromi per le implementazioni. Degna di nota è la differenza tra l'implementazione a 32 e 64 bit che produce risultati diversi.

Per superare questo ostacolo generare i numeri in uno strumento e quindi utilizzare la stessa sequenza nell'altro. Oppure usa il tuo algoritmo: alcune idee here.

1

La differenza (più probabile) deriva dall'uso di uniformemente distribuiti pseudo-casuale numeri in C++, mentre il codice MATLAB usa normalmente distribuiti pseudo-casuali numeri. Prova rand/randi invece randn nel codice MATLAB (cioè numeri interi non distribuiti correttamente invece di doppi normalmente distribuiti).

più sul lato MATLAB della storia: http://www.mathworks.com/help/matlab/random-number-generation.html