【问题标题】:Lab 9.3 Issues (Yes, I found out what was wrong with 9.1)Lab 9.3 问题(是的,我发现 9.1 出了什么问题)
【发布时间】:2015-12-12 04:00:02
【问题描述】:

我完成了 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);

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

【问题讨论】:

  • sqrt() 不应该在for 之外吗?!
  • 看看我编辑的答案!

标签: java arrays double sqrt


【解决方案1】:

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

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

【讨论】:

  • 谢谢,由于 Internet 断开,我不得不重写我的代码。这是我的代码现在的样子。它现在没有结果,和之前我得到 3.0 或 5.0 的结果一样: double[] data = { 1.0,2.0,3.0,4.0,5.0 };双标清;运行程序=真;双倍总和 = 0;双均值 = 0;标准差 = 0; for (int = 0; i
【解决方案2】:

你搞砸了。解释似乎很好,但实施似乎出错了。您正在计算运行中的平均值(即)同时计算您的 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

【讨论】:

  • 我试过你的代码。我的这部分代码出现此错误: for (int = 0; i
  • i 在哪里?应该是for (int i = 0; i &lt; data.length; i++) {
猜你喜欢
  • 1970-01-01
  • 2016-02-08
  • 2013-11-16
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多