0

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

一组数字的标准偏差是衡量它们值的分布的。它被定义为每个数字与平均值之间的平方差的平均值的平方根。要计算存储在数据中的数字的标准偏差:

计算数字的平均值。

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

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

求第 3 步结果的平方根。这是标准差。编写代码计算 data 中数字的标准差,并将结果存储在 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);

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

4

2 回答 2

0

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

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

于 2013-10-15T04:28:42.240 回答
0

你把一切都搞砸了。解释似乎很好,但实施似乎出错了。您正在计算运行中的平均值(即),同时计算您的 StandardDeviation,这是不正确的。您需要在计算 SD 之前计算平均值,因为在您的情况下,平均值正在改变

您需要正确理解公式。

标准差是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
于 2013-10-15T04:35:21.900 回答