在我的家庭作业活动中,它要求我根据以下说明编写代码:
一组数字的标准差是衡量其价值差异的指标。它被定义为每个数字和平均值之间的平方差的平均值的平方根。计算数据中存储的数字的标准差:
计算数字的平均值。
对于每个数字,从平均值中减去它并将结果平方。
查找步骤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 ???!
这是我不明白的地方。 我在纸上做了代码 - 我的平均值为3.0 2.I用数据[]和平方减去mean1得到{4,1,0,1,4} 3.I添加并划分为找到等于2的mean2
我√2并得到1.4142136就像预期的结果一样。
论文:为什么我得到0.0为sd ??
答案 0 :(得分:5)
您的for
循环条件不正确;不会输入for循环,只留下newData
个零。
for(int k= 0; k>newData.length; k++)
尝试<
。
for(int k = 0; k < newData.length; k++)