nee*_*uzz 4 java normal-distribution
我计算了一组值的平均值和标准差.现在我需要使用这些值绘制钟形曲线以显示JAVA Swing中的正态分布.我该如何处理这种情况.
列表:204 297 348 528 681 684 785 957 1044 1140 1378 1545 1818
总人数:13
平均值(平均值):877.615384615385
标准偏差(SD):477.272626245539
如果我可以得到x和y坐标我可以做到,但我如何获得这些值?
首先,您需要计算集合的方差.方差计算为每个数字与其平均值的平均平方偏差.
double variance(double[] population) {
long n = 0;
double mean = 0;
double s = 0.0;
for (double x : population) {
n++;
double delta = x – mean;
mean += delta / n;
s += delta * (x – mean);
}
// if you want to calculate std deviation
return (s / n);
}
Run Code Online (Sandbox Code Playgroud)
一旦你有了这个,你可以选择x取决于你的图表分辨率与你的价值集差价相比,并将其插入下面的等式得到y.
protected double stdDeviation, variance, mean;
public double getY(double x) {
return Math.pow(Math.exp(-(((x - mean) * (x - mean)) / ((2 * variance)))), 1 / (stdDeviation * Math.sqrt(2 * Math.PI)));
}
Run Code Online (Sandbox Code Playgroud)
要显示结果集:假设我们采用您设置的总体设置,并决定要在x分辨率为1000像素的图形上显示x = 0到x = 2000.然后,你会堵塞在一个循环(INT X = 0; X <= 2000; X = 2)和进料的那些值代入上面的等式来获得您的y值的对.由于您要显示的y是0-1,因此您将这些值映射到您希望y分辨率具有适当舍入行为的任何值,因此您的图形不会过于夸张.因此,如果你想要你的y分辨率为500像素,那么你将0设置为0和1到500以及.5到250等等.这是一个人为的例子,你可能需要更多的灵活性,但我认为它说明了这一点.大多数图形库都会为您处理这些小事.