在我的家庭作业中,它要求我根据以下说明编写代码:

一组数字的标准偏差是对它们的值的范围的度量。它定义为每个数字与平均值之间平方差的平均值的平方根。要计算数据中存储的数字的标准偏差:


计算数字的平均值。
对于每个数字,从均值中减去它并平方结果。
找到在步骤2中计算出的数字的平均值。
找到步骤3的结果的平方根。这是标准偏差。


编写代码以计算数据中数字的标准偏差,并将结果存储在double sd中。

例如:double [] data = {1.0,2.0,3.0,4.0,5.0};

//期望的标准偏差(输出):1.4142136

//My code:

double mean1=0;
double mean2=0;
double sum1=0;
double sum2=0;
double sd=0;
//calculate sum from arrays of doubles

for(double a:data)
{
    sum1+=a;
}

//calculate mean

mean1=sum1/data.length;

//creates new array for step2

double newData[]=new double[data.length];
for(int k= 0; k>newData.length; k++)
{
    double s=0;
    newData[k]=data[k];
    s=Math.pow((mean1-data[k]),2);
    newData[k]=s;

}

//calculate sum of the new array
for(double b:newData)
{
    sum2+=b;
}

//calculate mean
mean2=sum2/newData.length;

//calculate standard deviation by sqrt
sd+=Math.sqrt(mean2);


编译时,我的标准偏差为0.0 ???!

这是我不明白的地方。
我在纸上写了代码-
1.我的平均值为3.0
2.我用data []减去mean1并平方得到{4,1,0,1,4}
3.我加并除以找到等于2的均值2

我√2并得到1.4142136,就像预期的结果一样。

论文:为什么我的SD值是0.0?

最佳答案

您的for循环条件不正确;不会进入for循环,而newData充满零。

for(int k= 0; k>newData.length; k++)


尝试<

for(int k = 0; k < newData.length; k++)

关于java - 标准偏差等于零吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33618193/

10-10 09:58