首页 > 解决方案 > MATLAB 的 rng(seed, 'twister') 函数的等效 C++ 实现

问题描述

我试图想出在 MATLAB 和 C++ 中生成统一随机变量的等效方法。在 MATLAB 中,可以直接使用生成器rng(0, 'twister')来使用种子 0 和 Marsenne Twister 引擎。然后,例如,可以使用 生成 5 个均匀随机数rand(5,1)。根据 MA​​TLAB 的rand文档,它使用mt19937引擎。

我正在努力在 C++ 中复制它。我使用了以下代码:

#include <iostream>
#include <cmath>
#include <random>

static std::random_device rd;
static std::tr1::mt19937 rand_mt(rd());

int main(void)
{
    rand_mt.seed(0);
    for (int i = 0;i < 5;i++)
    {
        std::cout << (double)rand_mt() / ((double)rand_mt.max() - 
        (double)rand_mt.min()) << std::endl;
    }
    return 0;
}

这是一个很长的镜头,但我没有从 MATLAB 和 C++ 获得相同的输出。上面的代码有什么我需要解决的问题吗?或者在 C++ 中是否有替代的等效实现?

标签: c++matlabrandom

解决方案


推荐阅读