Java VS Matlab:Math.random()和rand

时间:2016-02-16 10:48:14

标签: java matlab random

我想问一下Java和Matlab中的随机数。

Java中的Math.random和Matlab中的rand具有相同的含义或两者不同?如果意义不同,有什么区别?

3 个答案:

答案 0 :(得分:6)

对于Matlab,请参考http://www.mathworks.com/company/newsletters/news_notes/pdf/Cleve.pdf,它解释了乘法同余生成器如何在Matlab中工作。

对于Java,请参阅http://www.javamex.com/tutorials/random_numbers/java_util_random_algorithm.shtml#.VsMAw3WLSkA,它解释了线性同余生成器如何在Java Utils类中生成随机数。

两者基本上是相同的算法,其中Matlab的MCG是LCG的特例,请参见此处:https://en.wikipedia.org/wiki/Linear_congruential_generator

是的,C ++(Borland),Java.Utils,Matlab语言使用基本相同的算法,因为它是有效的 - 它具有极高的内存效率,它具有平坦的线性分布(即伪随机) - >但由于序列相关性,它是一种质量差的伪随机数。

但是有更好的算法,不同的算法,以Python为例,使用Mersenne Twister算法作为其PRNG,但感知结果的随机性要小得多,请阅读:Random is barely random at all?

答案 1 :(得分:2)

两者都返回0到1之间均匀分布的伪随机数。生成数字及其质量的算法可能不同,但界面是相同的。

答案 2 :(得分:2)

MATLAB中有许多不同的随机数生成器。有关完整详细信息,请参阅the reference page for rng。串行MATLAB中的默认值是Mersenne Twister(Twister不适合并行随机数生成,因此对于Parallel Computing Toolbox工作者,在GPU上,默认为Combined Multiple Recursive)。在GPU上,additional random number generators are available具有高质量且非常适合GPU执行。

需要注意的一点是:MATLAB非常谨慎地设置,以便在开始新的MATLAB过程时,rand的第一次调用将始终为您提供相同的结果(对于同一版本的MATLAB)。这与Java形成对比,如果您使用Math.random(),则会对种子进行混洗。

MATLAB为您提供了多种强大的方法来通过rng函数和RandStream对象的方法来控制使用的随机数流。