实验9.3问题(是的,我发现了9.1的错误)

时间:2013-10-15 04:24:09

标签: java arrays double sqrt

我完成了9.1和9.2。现在,我认为答案并非如此简单。以下是说明:

  

一组数字的标准差是衡量其价值差异的指标。它被定义为每个数字和平均值之间的平方差的平均值的平方根。计算数据中存储的数字的标准差:

     

计算数字的平均值。

     

对于每个数字,从平均值中减去它并将结果平方。

     

查找步骤2中计算的数字的平均值。

     

找到步骤3结果的平方根。这是标准偏差。   编写代码来计算数据中数字的标准差,并将结果存储在double sd中。

     

要查找非负双d的平方根,请使用表达式

     

double s = Math.sqrt( d );

这是我的代码:

double[] data = {  }; 
double sd; 
double sum = 0; 
double mean = 0;
double sd = 0;
runProgram = true;

for (int = 0; i < data.length; i++) {
    sum += data[i];
    mean = sum/(data.length - 1);
    mean = data[i];
    mean *= mean;
}

while (runProgram == true) 
    sd += Math.sqrt(mean);

我真的不明白我做错了什么。任何建议都将被尝试。

2 个答案:

答案 0 :(得分:0)

问题是你在平均值发生变化时计算标准差sd。您应首先计算整个数据集的平均值,然后使用mean的最终值计算标准差。

此外,您应该只是对所有方差的总和进行平方,而不是每次都计算平方根。

答案 1 :(得分:0)

你已经搞砸了。解释似乎相当不错,但实施似乎出错了。您在计算StandardDeviation时计算运行时的平均值(即),这是不正确的。您需要在计算SD之前计算平均值,在您的情况下,平均值正在变化

您需要正确理解公式。

StandardDeviation是SquareRoot( (sum(square(number-mean))/n) )

// Calculate the mean first
for (int i = 0; i < data.length; i++) {
    sum += data[i];
}
mean = sum / data.length;

sum = 0; // Re-using sum variable
for (int i = 0; i < data.length; i++) {
    double diff = data[i] - mean;
    diff = Math.pow(diff, 2);
    sum+=diff;
}

double variance = sum / data.length; // calculate the variance
sd = Math.sqrt(variance); // Standard deviation is the square root of variance