我在c ++中尝试了std::mt19937 gen(2007)
,在Matlab中尝试了RandStream.create('mt19937ar','seed',2007)
。我也尝试了不同的结构,但是我找不到特定的种子结构来在Matlab和c ++之间找到相同的随机数。我怎么处理这个?
答案 0 :(得分:3)
您希望随机生成器具有确定性,并在两个不同的实现中以相同的方式工作。
无法保证Matlab和c ++ :: std实现会生成相同的结果。虽然认为它们应该是合理的 - 毕竟它是相同的算法。根据{{3}},实现有各种风格。最值得注意的是32位和64位实现之间的差异会产生不同的结果。
要克服这个障碍,请在一个工具中生成数字,然后在另一个工具中使用相同的序列。或者使用您自己的算法 - 一些想法Wikipedia。
答案 1 :(得分:1)
差异(最有可能)源于在C ++中使用均匀分布的伪随机数字,而MATLAB代码使用正态分布的伪随机数字。在MATLAB代码中尝试rand
/ randi
而不是randn
(即非正态分布的整数而不是正态分布的双精度数。)
更多关于故事的MATLAB方面:http://www.mathworks.com/help/matlab/random-number-generation.html