2017-02-17 30 views
-2

出于某种原因,我的代码由于某种原因不能正确运行标准偏差。如果任何人现在可以帮助我,这将是伟大的,我将永远在你的债务。标准偏差不起作用

amtNumbers = MINIMUM_COUNT + (rand() % (MAXIMUM_COUNT - MINIMUM_COUNT + 1)); 
cout << "The program will generate" << setw(3) << amtNumbers << (setw (8)) << "numbers" << endl; 

cout << endl << "The numbers are: "; 

for (int i = 0; i < amtNumbers; i++) 
{ 
    valNums = MINIMUM_VAL + (rand() % (MAXIMUM_VAL - MINIMUM_VAL + 1)); 
    cout << setw(3)<< valNums; 
    sum += valNums; 
    sqrdSum += (valNums*valNums); 
    sumSqrd = (sum * sum); 
} 

numAverage = (sum += valNums)/ amtNumbers; 
numSTD = sqrt ((sqrdSum - (sumSqrd/ amtNumbers))/amtNumbers - 1); 
cout << endl 

回答

3

标准偏差的公式是:

enter image description here

记下你总结每个元素减去平均值的平方的一部分。

您的公式有:

sqrt ((sqrdSum - (sumSqrd/ amtNumbers))/amtNumbers - 1) 

哪一个是相同的:

enter image description here

你的问题是,你实际上并没有计算的标准偏差。

+0

我很困惑如何解决这个问题。我需要切换哪些变量我感觉好像缺少一个变量 – Spartan5434

+1

@ Spartan5434 *您*写了错误方程的代码实现,对吗?所以正确的代码* * * *的实现。我会确保适当的变量是正确的类型。整数部门在这样做时咬人的人不止一个。也许这不是问题,也许是这样,但由于我们没有测试你的帖子所需的所有代码,所以只有你真的知道。 – WhozCraig

+0

下面是我的其余变量仍然试图使我的变量适合公式使其工作。 //声明变量 int amtNumbers,valNums; 双和= 0; double numAverage = 0; double numSTD = 0; double sqrdSum = 0; double sumSqrd = 0; //为数字发生器声明常量 const int MINIMUM_COUNT = 2; const int MAXIMUM_COUNT = 10; const int MAXIMUM_VAL = 50; const int MINIMUM_VAL = 10; – Spartan5434

0

您可以在解决方案中使用的完整示例。

#include <math.h> 
#include <vector> 

double StandardDeviation(std::vector<double>); 
double Variance(std::vector<double>); 

int main() 
{ 
    std::vector<double> samples; 
    samples.push_back(2.0); 
    samples.push_back(3.0); 
    samples.push_back(4.0); 
    samples.push_back(5.0); 
    samples.push_back(6.0); 
    samples.push_back(7.0); 

    double std = StandardDeviation(samples); 
    return 0; 
} 

double StandardDeviation(std::vector<double> samples) 
{ 
    return sqrt(Variance(samples)); 
} 

double Variance(std::vector<double> samples) 
{ 
    int size = samples.size(); 

    double variance = 0; 
    double t = samples[0]; 
    for (int i = 1; i < size; i++) 
    { 
     t += samples[i]; 
     double diff = ((i + 1) * samples[i]) - t; 
     variance += (diff * diff)/((i + 1.0) *i); 
    } 

    return variance/(size - 1); 
}