如何让IT++与Matlab生成相同的随机数结果?
让IT++与Matlab生成一致的Mersenne Twister随机数
Matlab默认的twister随机数算法就是mt19937ar,IT++本身就支持这个算法,只要做对初始化设置,就能让randu的输出和Matlab的rand完全匹配。下面是具体操作:
步骤1:配置IT++的随机数生成器
IT++默认的随机数生成器不一定是mt19937ar,所以必须手动指定算法并设置种子(和Matlab的rng(0, "twister")对应)。代码示例:
#include <itpp/itbase.h> int main() { // 切换到mt19937ar算法,对应Matlab的twister itpp::Random::set_rng(itpp::RNG_MT19937); // 设置种子为0,和Matlab的rng(0)对齐 itpp::Random::seed(0); // 生成5个[0,1)的随机数,对应Matlab的rand(1,5) itpp::vec result = itpp::randu(5); std::cout << result << std::endl; return 0; }
步骤2:验证结果
在Matlab里执行:
rng(0, "twister"); rand(1,5)
得到的输出是:
0.8147 0.9058 0.1270 0.9134 0.6324
编译运行上面的IT++代码,输出的5个数值会和Matlab的结果完全一致(精度范围内,比如小数点后四位完全匹配)。
注意事项
- 别搞混函数:IT++的
rand生成的是[-1,1)区间的数,**必须用randu**才能对应Matlab的rand([0,1)区间)。 - 版本兼容性:确保你的IT++版本支持
RNG_MT19937枚举,主流新版本都没问题,老版本可能需要确认头文件是否包含相关定义。 - 种子必须严格一致:Matlab用
rng(0),IT++就必须用Random::seed(0),差一点结果就完全不一样。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

