繁体   English   中英

Java VS Matlab:Math.random()和rand

[英]Java VS Matlab : Math.random() and rand

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

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

对于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,它的PRNG使用Mersenne Twister算法,但是感知到的结果随机性要低得多,请阅读以下内容: Random根本不是随机的吗?

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

MATLAB中有许多不同的随机数生成器。 有关完整的详细信息,请参见rng的参考页 串行MATLAB中的默认值为Mersenne Twister(对于并行并行随机数生成,Twister不合适,因此对于并行计算工具箱工作人员,在GPU上,默认值为Combined Multiple Recursive)。 在GPU上,可以使用其他高质量的随机数生成器 ,这些生成器非常适合GPU执行。

需要注意的一件事:MATLAB非常小心地进行设置,以便在您启动新的MATLAB流程时,第一次调用rand总是会得到相同的结果(对于相同的MATLAB版本)。 这与Java相反,如果您使用Math.random() ,则Java会随机播放种子。

MATLAB提供了多种强大的方法,可以通过rng函数以及RandStream对象的方法来控制正在使用的随机数流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM