gpt4 book ai didi

java - 随机数 Mathematica 与 Java

转载 作者:行者123 更新时间:2023-11-29 09:36:01 32 4
gpt4 key购买 nike

哪个集合更“随机”?

Java 的 Math.random() 或 Mathematica 的随机数? Java 为蓝色,Mathematica 为红色。

数字从 0 到 50(51?)Mathematica random vs 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;
}

}

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

dataset = ReadList["~/Desktop/output.txt", Number] 
dataset2 = RandomReal [{0, 50}, 50000]
Histogram[{dataset, dataset2}]

[编辑]:我在编写代码时只是在学习循环。对困惑感到抱歉。现在我做了一个更干净的版本,它们分布均匀。我想任意循环结束会产生很大的不同。

New mathematica output

新代码:

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

最佳答案

如果这个图对我有什么启示,那就是 Mathematica 的均匀随机分布的质量比您展示的 Java 中的实现要好得多(我不声称对于任何 Java 实现. 另外,作为免责声明,并不是为了挑起一场口水战,我从事 J2EE 和 Mathematica 开发已经有一段时间了,尽管我承认在后者方面有更多的经验)。

这是论点。您显示了 50000 个点和 50 个 bin(直方图条),这表明每个 bin 大约有 1000 个点。更准确地说,我们可以使用遍历性将 50000 个均匀分布点的问题转化为 50000 个独立试验的问题,并询问每个 bin 中结束的平均点数是多少,以及方差。然后,二项分布给出了任何特定 bin 恰好以 Npoints 中的 k points 结尾的概率:

enter image description here

对于其中,均值是Npoints/Nbins(当然这是我们直觉上期望的),方差是Npoints * (1-1/Nbins)* 1/Nbins ~ Npoints/Nbins = 1000,在我们的例子中 (Npoints = 50000, Nbins = 50)。取平方根,我们得到标准差为 sqrt(1000) ~ 32,大约是均值(即 1000)的 3%。结论是,对于理想的均匀分布,对于给定数量的点和箱,我们应该期望每个箱与平均值的偏差为 3% 左右。从图片来看,这与 Mathematica 分布给我们的非常相似。 Java 分布的各个 bin 的偏差(同样,此处介绍的特定实现)要大得多,这表明 bin 之间存在相关性,并且总体上这种均匀分布的质量要差得多。

现在,这是一个“高层次”的争论,我不会深入细节来找出原因。然而,这似乎合乎逻辑,因为 Mathematica 的传统目标受众(科学界、学术界)在这方面(或至少曾经是)比 Java 的要求更高。也就是说,我毫不怀疑对于许多统计分布存在许多优秀的随机数生成器的 Java 实现——它们只是没有内置到语言中,与 Mathematica 不同。

关于java - 随机数 Mathematica 与 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4977392/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com