【问题标题】:random function in C++ and MatlabC++ 和 Matlab 中的随机函数
【发布时间】:2014-08-19 07:34:09
【问题描述】:

我有一个用 Matlab 编写的代码,我用 C++ 编写了它,但我不这样做不会给出相同的结果。

问题是我在代码的 3 部分中使用了随机函数,当我固定随机函数时,两个代码给出了相同的输出。

如果任何人有任何想法,请帮助我。

【问题讨论】:

  • 显然这两个随机数函数给出了不同的序列。
  • 但如果我在 matlab 上多次运行该程序,它会给出彼此接近的结果。那么有没有办法让 2 随机函数给出接近的结果?

标签: c++ matlab random


【解决方案1】:

rand 函数的实现会有所不同。

您可以通过rng控制Matlab版本。

在 C++ 端,我建议使用 (C++11) <random> 中的功能(如果您的环境缺乏对 C++11 库的支持,请使用 Boost's version)。我现在无法测试,但似乎双方都支持 Mersenne Twister。运气好的话,如果您选择相同的种子,实现将生成相同的数字。

我现在无法测试这个,因为我这里没有 Matlab。

【讨论】:

    【解决方案2】:

    这是因为rand() 函数给了你相同的数字。在调用rand() 函数之前最好使用srand (time(NULL));srand (time(NULL)); 使 rand() 产生不同的输出。

    如需使用srand (time(NULL)); 函数,您应在代码中添加#include <time.h>#include <ctime>

    【讨论】:

    • 我在代码中只使用了一次 srand(time(NULL)),在我在代码中使用的第一个 rand() 函数之前。如何让matlab和c++中的结果一样???
    • 我不明白你的意思。但是我认为您的问题出在 C++ 中。
    • 我的意思是我使用 srand(time(Null)) 来使 rand() 产生不同的输出。我想保持 matlab 和 c++ 随机,但我想在运行它们的代码后得到类似的结果。
    • 我认为这是不可能的。为此,您应该在 C++ 和 Matlab 中提供相同的输入。 rand() 函数产生不同的输出。
    • 但这不是我的第一个代码,我在 matlab 和 c++ 中包含随机函数的不同代码之前尝试过,它给出了相似的结果。但是在这段代码中,当我从 matlab 和 c++ 得到相同的结果时,当我输入它时,我有一定的循环,但是如果我输入它 n 次,结果就不同了。感谢您的努力
    猜你喜欢
    • 2013-06-27
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2016-06-27
    相关资源
    最近更新 更多