分散を求める | Programming Place Plus C言語編 逆引き

トップページC言語編逆引き

このページの概要

以下は目次です。

目的

要素が数値の配列があるとき、その分散を求めたいとします。

分散は、偏差平方和(「逆引き 偏差平方和を求める」を参照)を求められれば、 それを、要素の個数で割れば得られます。

方法①(計算式通りに求める)

偏差平方和は、「逆引き 偏差平方和を求める」の方法で得られるので、 後は、要素の個数で割るだけです。

#include <assert.h>
#include <stdio.h>

#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

double sum(const double* array, size_t size)
{
    double result = 0.0;

    for (size_t i = 0; i < size; ++i) {
        result += array[i];
    }
    return result;
}

double average(const double* array, size_t size)
{
    assert(size > 0);
    return sum(array, size) / size;
}

/* 偏差平方和を求める */
double sum_of_squares(const double* array, size_t size)
{
    double result = 0.0;

    // 平均値を求める
    double avg = average(array, size);

    // 各要素の値と平均値との差の2乗を合計する
    for (size_t i = 0; i < size; ++i) {
        result += (array[i] - avg) * (array[i] - avg);
    }

    return result;
}

/* 分散を求める */
double variance(const double* array, size_t size)
{
    assert(size > 0);
    return sum_of_squares(array, size) / size;
}

int main(void)
{
    const double array[] = {5, 5, 2, 14, 4};

    printf("%lf\n", variance(array, SIZE_OF_ARRAY(array)));
}

実行結果:

17.200000


参考リンク


更新履歴

’2017/6/8 新規作成。



逆引きのトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る