先頭へ戻る

標準偏差を求める | Programming Place Plus C言語編 逆引き

Programming Place Plus トップページ -- C言語編 -- 逆引き

先頭へ戻る

この章の概要

この章の概要です。

目的

要素が数値の配列があるとき、その標準偏差を求めたいとします。

標準偏差は、分散(「逆引き 分散を求める」を参照)を求められれば、 その正の平方根を取ることで求められます。

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

分散は、「逆引き 分散を求める」の方法で得られるので、 後は、正の平方根を取るだけです。 正の平方根は、標準ライブラリ関数の sqrt関数で計算できます。

#include <assert.h>
#include <math.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_ ti = 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 sumOfSquares(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 sumOfSquares(array, size) / size;
}

/* 標準偏差を求める */
double stddev(const double* array, size_t size)
{
    assert(size > 0);
    return sqrt(variance(array, size));
}

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

    printf("%f\n", stddev(array, SIZE_OF_ARRAY(array)));
}

実行結果:

4.147288


参考リンク


更新履歴

'2017/6/12 新規作成。



逆引きのトップページへ

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー