Есть ли одно и то же семя для Matlab Random и C++ Random?

Я пробовал std::mt19937 gen(2007) в С++ и RandStream.create('mt19937ar','seed',2007) в Matlab. Я также пробовал разные структуры, но не смог найти конкретную начальную структуру, чтобы найти одинаковые случайные числа между Matlab и С++. Как я могу справиться с этим?


person taha    schedule 23.07.2014    source источник
comment
Какую функцию вы используете в MATLAB для получения случайных чисел?   -  person    schedule 23.07.2014
comment
Я использую функции gamrnd и randn в MATLAB.   -  person taha    schedule 23.07.2014


Ответы (2)


Вы хотите, чтобы генератор случайных чисел был детерминированным и работал одинаково в двух разных реализациях.

Нет никакой гарантии, что реализации Matlab и c++::std будут генерировать одинаковые результаты. Хотя логично было бы думать, что должны - ведь это один и тот же алгоритм. Согласно Википедии, существуют различные варианты реализации. Наиболее примечательной является разница между 32-битной и 64-битной реализацией, которая дает разные результаты.

Чтобы преодолеть это препятствие, сгенерируйте числа в одном инструменте, а затем используйте ту же последовательность в другом. Или используйте свой собственный алгоритм - некоторые идеи здесь< /а>.

person mrVoid    schedule 23.07.2014

Разница (скорее всего) связана с использованием равномерно распределенных псевдослучайных чисел в C++, в то время как код MATLAB использует нормально распределенные псевдослучайные числа. Попробуйте rand/randi вместо randn в коде MATLAB (т. е. неравномерно распределенные целые числа вместо нормально распределенных удвоений).

Подробнее о MATLAB: http://www.mathworks.com/help/matlab/random-number-generation.html

person Community    schedule 23.07.2014