【问题标题】:How to generate random number that start with the same value in MATLAB and C#如何在MATLAB和C#中生成以相同值开头的随机数
【发布时间】:2018-07-10 08:02:02
【问题描述】:

我正在用 C# 和 MATLAB 编写相同的程序。我面临的唯一问题是 MATLAB 和 C# 中生成的不同值,尽管我提供了相同的种子值。

也就是说,两个编译器生成的随机数都不匹配。

例如:

C#:

Random rand = new Random(10);
double val = rand.Next(1, 100); 

它的起始随机数是:95

MATLAB:

rng(10);
r2 = randi([1 100],1,1)

虽然起始随机数是:77

谁能帮帮我?

如何让两个编译器以相同的随机数开头?

【问题讨论】:

  • 有很多算法可以产生相同的伪随机数。您必须在 Matlab 和 C# 中实现相同的算法。
  • 能不能给个链接
  • here看来,matlab 通常使用 Mersenne Twister
  • 但这也意味着它可以使用各种算法中的任何一种。但如果没有这些来源,无论如何你都必须依靠反复试验..
  • 它没有用。你是对的,我们不知道他们内部的随机数生成算法。

标签: c# matlab .net-core matlab-compiler


【解决方案1】:

编写生成随机对象的函数并使用相同的参数对其进行初始化。

【讨论】:

  • 例如?我试过了,但如果你真的知道答案,你能解释一下吗?
  • 如果我理解正确,你需要伪随机数。
  • 第一种方式:mathworks.com/help/matlab/ref/rng.html 另外,您可以生成 c++ 代码以从 c# 运行它。第二种方法是在MATLAB和C#上实现简单的伪随机算法。第三种方法是研究MATLAB中的伪随机数算法并将其移植到C#中。如果伪随机的质量不重要,我会选择第二个选项。
  • 另外,您可以预先生成一组随机值并按顺序选择它们。
  • 是的,和我想的一样(见上面的 cmets 问题)。我将预先生成随机值,并将在两个程序中使用它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
相关资源
最近更新 更多