このページの解説は C99 をベースとしています。
以下は目次です。
要素が数値の配列があるとき、その分散を求めたいとします。
分散は、偏差平方和(「逆引き 偏差平方和を求める」を参照)を求められれば、 それを、要素の個数で割れば得られます。
偏差平方和は、「逆引き 偏差平方和を求める」の方法で得られるので、 後は、要素の個数で割るだけです。
#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
Programming Place Plus のトップページへ
| はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
| X で ポスト/フォロー | LINE で送る | noteで書く |
|
|
管理者情報 | プライバシーポリシー |