2017-02-17 101 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); 
}