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?
risposta
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.
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
Quale funzione si utilizza in MATLAB per ottenere i numeri casuali? –
Sto usando le funzioni 'gamrnd' e' randn' in MATLAB. – taha