随机数Mathematica vs Java

lqd*_*qdc 1 java random wolfram-mathematica

哪一组更"随机"?

Math.random()用于Java或随机用于Mathematica?Java是蓝色的,Mathematica是红色的.

数字从0到50(51?) Mathematica随机与Java

编辑:这是在Mathematica中生成的直方图.

Java源码(丑陋)

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int i = 0;
        int sum = 0;
        int counter = 0;
        String randomNumberList = " ";
        int c = 0;
        while (c != 50){

            while (i != 7) {
            i = (int) (51 * Math.random());
            sum += i;
            ++counter;
            randomNumberList += " " + i;
            }
        i = 0;
        System.out.print("\n" + randomNumberList);
        ++c;
        }

    }
Run Code Online (Sandbox Code Playgroud)

Mathematica源码(output.txt是来自Java的转储)

dataset = ReadList["~/Desktop/output.txt", Number] 
dataset2 = RandomReal [{0, 50}, 50000]
Histogram[{dataset, dataset2}]
Run Code Online (Sandbox Code Playgroud)

[编辑]:当我编写代码时,我只是学习循环.对困惑感到抱歉.现在我制作了一个更干净的版本,它们分布均匀.我猜任意循环结束都有很大的不同.

新的mathematica输出

新代码:

public class RandomNums {

  public static void main(String[] args) {
    int count = 0;
    for (int i = 0; i <= 50000; i++){
        int j = (int) (50 * Math.random());
        System.out.print(j + " ");
        count++;
        if (count == 50){
            System.out.println("\n");
            count = 0;
        }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

Leo*_*rin 11

如果这个图表对我有意义,那就是Mathematica的统一随机分布的质量比Java你所展示的实现要好得多(我没有声称对于任何Java实现.另外,作为免责声明,而不是开始一场火焰战,我已经成为J2EE和Mathematica开发人员已有一段时间了,虽然我承认在后者方面有更多经验.

这是争论.你有50000点和50个箱子(直方图条),这表明你每箱大约有1000点.更准确地说,我们可以使用遍历性将50000个均匀分布点的问题转化为50000个独立试验的问题,并询问每个箱中最终得到的平均点数和方差.然后通过二项分布给出任何特定bin以精确k点结束的概率Npoints:

在此输入图像描述

为此,均值Npoints/Nbins(当然,这是我们直观地预期的)Npoints * (1-1/Nbins)* 1/Nbins ~ Npoints/Nbins = 1000,在我们的例子中,方差是(Npoints = 50000, Nbins = 50).取平方根,我们得到标准偏差sqrt(1000) ~ 32,即平均值的3%(即1000).结论是,对于理想的均匀分布,对于给定数量的点和箱,我们应该预期每个箱的偏差均为3%的平均值.这与Mathematica发行给我们的非常类似,从图片来看.Java分发的个别区间的偏差(再次,这里给出的特定实现)要大得多,并且表明区间之间的相关性以及整体上这种均匀分布的质量差得多.

现在,这是一个"高级别"的论点,我不会详细说明原因.然而,这似乎是合乎逻辑的,因为Mathematica(科学,学术界)的传统目标受众(或至少曾经)在这方面要求比Java要求更高.也就是说,我毫不怀疑存在许多用于许多统计分布的随机数生成器的优秀Java实现 - 它们不是内置于该语言中的东西,与Mathematica不同.