如何用C++计算方差?

How to calculate variance with C++?

这就是我目前所拥有的。我无法获得正确的方差。

variance += ((numbers[i] - (double)mean) * (numbers[i] - (double)mean));
variance /= (double)size;
cout << "The variance is: " << variance << endl;

您的代码存在多个问题,所有这些问题都会导致方差错误。

  1. 您正在计算循环中的方差,同时在每次迭代中更新平均值(在您获得正确的平均值之前)。虽然这将导致在循环结束时将正确的均值存储在 mean 变量中,但在除最后一次迭代之外的所有迭代中都会使用不正确的均值计算方差。 在开始从数组中减去它以计算方差之前,您需要 all 数字 的平均值。解决方案是在原始循环之后计算方差的另一个循环,此时您已经有了正确的均值。

  2. 数组索引从 0 开始,但你从 1 开始,这意味着你数组中的第一个数字将始终为 0,并且你正在计算 9 个数字而不是 10 个数字的均值和方差,但是除以 10.

  3. Mean 是一个整数,但用于存储浮点数(或双精度数)。此外,total / size 将向下舍入,因为它们都是整数,因此您应该将其中一个转换为双倍数。

    variance += ((numbers[i] - (double)mean) * (numbers[i] - (double)mean));

在另一个 for 循环中的第一个 for 循环之外。 而代码就会变成这样-

#include <iostream>
using namespace std;

int main()
{
 int arraySize = 10;
 int numbers[10];
 int input, total = 0, size = 0, mean = 0;
 double variance = 0;
 for (int i = 1; i < arraySize; i++) {
    cout << "Enter number " << i << " (-1 to end): ";
    cin >> input;
    if (input == -1) {
        break;
    }
    else {
        numbers[i] = input;
    }
    total += numbers[i];
    size++;
    
    mean = total / size;
    
       
}
for(int i=1; i<=size;i++)
variance += ((numbers[i] - (double)mean) * (numbers[i] - (double)mean));

variance /= (double)size;
cout << "The mean is: " << mean << endl;
cout << "The variance is: " << variance << endl;
}

在计算方差时,您需要数组中所有数字的平均值,而不是每次输入后的平均值。