Я пробовал std::mt19937 gen(2007)
в С++ и RandStream.create('mt19937ar','seed',2007)
в Matlab. Я также пробовал разные структуры, но не смог найти конкретную начальную структуру, чтобы найти одинаковые случайные числа между Matlab и С++. Как я могу справиться с этим?
Есть ли одно и то же семя для Matlab Random и C++ Random?
Ответы (2)
Вы хотите, чтобы генератор случайных чисел был детерминированным и работал одинаково в двух разных реализациях.
Нет никакой гарантии, что реализации Matlab и c++::std будут генерировать одинаковые результаты. Хотя логично было бы думать, что должны - ведь это один и тот же алгоритм. Согласно Википедии, существуют различные варианты реализации. Наиболее примечательной является разница между 32-битной и 64-битной реализацией, которая дает разные результаты.
Чтобы преодолеть это препятствие, сгенерируйте числа в одном инструменте, а затем используйте ту же последовательность в другом. Или используйте свой собственный алгоритм - некоторые идеи здесь< /а>.
Разница (скорее всего) связана с использованием равномерно распределенных псевдослучайных чисел в C++, в то время как код MATLAB использует нормально распределенные псевдослучайные числа. Попробуйте rand
/randi
вместо randn
в коде MATLAB (т. е. неравномерно распределенные целые числа вместо нормально распределенных удвоений).
Подробнее о MATLAB: http://www.mathworks.com/help/matlab/random-number-generation.html
gamrnd
иrandn
в MATLAB. - person taha   schedule 23.07.2014