1. 程式人生 > >c++求一維陣列標準差

c++求一維陣列標準差

最近寫的一段c++演算法中需要計算標準差,於是就造了個輪子,順便記錄下來…

標準差公式.jpg

看公式,可以推斷出計算標準差分為幾步:

  1. 計算平均值u=(x1+x2+…+xn)/n
  2. 計算方差s²=((x1-u)^2 +(x2-u)^2 +…+(xn-u)^2)/n
  3. 計算標準差σ=sqrt(s²)
/**
 * 求平均值
 */
double average(double *x, int len)
{
    double sum = 0;
    for (int i = 0; i < len; i++) // 求和
        sum += x[i];
    return sum/len; // 得到平均值
}
/**
 * 求方差
 */
double variance(double *x, int len)
{
    double average = average(x, len);
    for (int i = 0; i < len; i++) // 求和
        sum += pow(x[i] - average, 2);
    return sum/len; // 得到平均值
}
/**
 * 求標準差
 */
double average(double *x, int len)
{
    double variance = variance(x, len);
    return sqrt(variance); // 得到標準差
}

原文:簡書ThinkinLiu 部落格: IT老五
最後,注意double *x在使用後的釋放問題,遵循"誰申請誰釋放"(new[]/delete[])原則

if(NULL != x) 
{
    delete[] x;
    x = NULL;
}