lqd*_*qdc 1 java random wolfram-mathematica
哪一组更"随机"?
Math.random()用于Java或随机用于Mathematica?Java是蓝色的,Mathematica是红色的.
数字从0到50(51?)
编辑:这是在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)
[编辑]:当我编写代码时,我只是学习循环.对困惑感到抱歉.现在我制作了一个更干净的版本,它们分布均匀.我猜任意循环结束都有很大的不同.
新代码:
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不同.
归档时间: |
|
查看次数: |
1174 次 |
最近记录: |