【问题标题】:Source code for functions Rand and Randn in MatlabMatlab中函数Rand和Randn的源代码
【发布时间】:2013-11-13 11:36:18
【问题描述】:

我是以色列 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 的源代码。有人有这个代码并且可以分享吗?

非常感谢,

西蒙

【问题讨论】:

  • 您站在公共场所,要求有人通过向您提供专有源代码来违法。一方面,我与这样的企业无关。
  • 好吧,除非我得到丰厚的回报。
  • rand 默认情况下使用 mersenne twister 算法,基本上你能找到的所有编程语言都应该使用该算法。
  • 我不认为你会得到源代码:/但你可以看到他们在文档中使用的算法:mathworks.com/help/matlab/ref/rng.html 但如果它们是参数的,那么我怀疑你会能够准确地复制他们的实现。忽略您的速度要求,我建议使用 Matlab .NET 编译器并只使用 Matlab 的(因为我假设您这样做是为了比较随机算法)
  • 请注意,rand('seed',123) 不再是最新版本的 matlab 的推荐语法。如果您尝试重现他们的代码,我建议您关注最新版本。

标签: c# matlab random


【解决方案1】:

在做:

>> 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

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

【讨论】:

  • 当然,这些只是默认方法——many others are available。另请注意,Matlab 使用的 Mersenne Twister 版本已经过时了 10 多年。根据我的经验,将较新的版本编译到 mex C 可以实现 2-3 倍的性能。这些较新的代码还具有 Matlab 实现中缺少的其他功能。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    但是说真的,如果你输入

    edit rand.m
    

    进入 Matlab 命令窗口,然后

    edit randn.m
    

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-28
        • 2015-12-08
        • 2019-01-30
        • 2021-01-03
        • 2013-09-28
        • 2020-10-14
        • 1970-01-01
        相关资源
        最近更新 更多