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