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

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

6

Решение

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

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

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

3

Другие решения

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

Больше на стороне истории MATLAB: http://www.mathworks.com/help/matlab/random-number-generation.html

1

По вопросам рекламы [email protected]