0

我是以色列 Ariel 大学的学生,我正在尝试在 C# 中实现 Matlab RAND 和 RANDN,这样对于 Matlab 和 C#(具有相同种子)的相同输入,Randn 和 Rand 将在两种语言中给出相同的结果。

例如:

在 Matlab 中:

rand('seed',123)
disp(rand)

输出:0.0878

在 C# 中:

Console.WriteLine(MyRand(123));

输出:0.0878

我认为要实现这种功能,我需要在 Matlab 中有 RAND 和 RANDN 的源代码。有人有这个代码并且可以分享吗?

非常感谢,

西蒙

4

4 回答 4

2

正在做:

>> s = RandStream.getGlobalStream()

s = 


mt19937ar random stream (current global stream)
             Seed: 0
  NormalTransform: Ziggurat

您给出了随机数生成器算法和用于获得正态分布数的转换。两者都是公开可用的算法。谷歌给你例如:

http://www.math.sci.hiroshima-u.ac.jp/~%20m-mat/MT/MT2002/emt19937ar.htmlhttp://www.jstatsoft.org/v05/i08/paper

描述这两种算法,包括参考/示例实现。

于 2013-11-13T11:59:26.087 回答
1

据我所知,Randn 是 MarsenneTwister。为了验证这一点,我首先尝试使用 Apache 的 MarsenneTwister 并检查类似的结果:http ://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/random/MersenneTwister.html

如果是这样:搜索任何实现。该算法应记录在案。

于 2013-11-13T11:45:03.807 回答
0

由于您的问题仅提到获得相同的结果,我会推荐以下之一:

  1. 生成大量随机数,然后在两种编程语言中一一使用。
  2. 用两种语言实现您自己的(简单)随机生成器。
于 2013-11-13T14:24:07.400 回答
0

但说真的,如果你输入

edit rand.m

进入 Matlab 命令窗口,然后

edit randn.m

我认为您将获得与 Mathworks 发布的有关这些函数的信息一样多的信息。该信息指向使用的算法,rand也指向实现。

于 2013-11-13T11:44:41.010 回答