Matlab中函数Rand和Randn的源代码

时间:2013-11-13 11:36:18

标签: c# matlab random

我是来自以色列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 个答案:

答案 0 :(得分:2)

这样做的:

>> s = RandStream.getGlobalStream()

s = 


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

您给出的随机数生成器算法和用于获取正态分布数的转换。 两者都是公开可用的算法。 Google为您提供了例如:

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

但严重的是,如果你输入

edit rand.m

进入Matlab命令窗口,

edit randn.m

我认为您将获得与Mathworks发布的有关这些功能的信息。此信息指向所使用的算法,也适用于rand实现。

答案 3 :(得分:0)

由于您的问题仅提到获得相同的结果,我建议使用以下其中一项:

  1. 生成大量随机数,然后在两种编程语言中逐一使用它们。
  2. 用两种语言实现自己的(简单)随机生成器。