我完成了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);
我真的不明白我做错了什么。任何建议都将被尝试。
答案 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