C++
 Computer >> コンピューター >  >> プログラミング >> C++

変動係数(CV)を求めるC++プログラムの実装方法

サイズnのfloat型の値を要素とする配列が与えられ、その変動係数(Coefficient of Variation:CV)を計算して結果を表示するのが本記事の課題です。

変動係数とは?

統計学において、変動係数は与えられたデータ全体のばらつき(散らばり)の度合いを相対的に評価するための指標です。単位やスケールが異なるデータ同士でも、変動の大きさを比較できる点が大きな特徴です。

金融の分野では、投資額に対するリスクの大きさを測るために活用されます。標準偏差と平均の比率が小さいほど、投資に伴うリスクは低いと判断できます。変動係数は「標準偏差を平均で割った値」として、次の式で定義されます。

変動係数 = 標準偏差 ÷ 平均

入力例と出力例

入力: array[] = { 10.0, 21, 23, 90.0, 10.5, 32.56, 24, 45, 70.0 }
出力: 変動係数 : 0.75772

入力: array[] = { 15.0, 36.0, 53.67, 25.45, 67.8, 56, 78.09 }
出力: 変動係数 : 0.48177

プログラムで使用するアプローチ

  • float型の値を含む配列を入力として受け取る
  • 与えられた配列から平均値と標準偏差を計算する
  • 標準偏差を平均値で割ることで変動係数を求める
  • 計算結果を変動係数として表示する

アルゴリズム

開始
ステップ1 → 平均値を計算する関数を宣言する
    float cal_mean(float arr[], int size)
    float sum = 0 を宣言
    ループ: i = 0 から i < size まで i++ ずつ繰り返す
        sum = sum + arr[i] とする
    ループ終了
    return sum / size を返す
ステップ2 → 標準偏差を計算する関数を宣言する
    float StandardDeviation(float arr[], int size)
    float sum = 0 を宣言
    ループ: i = 0 から i < size まで i++ ずつ繰り返す
        sum = sum + (arr[i] - cal_mean(arr, size)) * (arr[i] - cal_mean(arr, size)) とする
    ループ終了
    return sqrt(sum / (size - 1)) を返す
ステップ3 → 変動係数を計算する関数を宣言する
    float CoefficientOfVariation(float arr[], int size)
    return StandardDeviation(arr, size) / cal_mean(arr, size) を返す
ステップ4 → main() 内で以下を実行する
    float型配列 arr[] = { 10.0, 21, 23, 90.0, 10.5, 32.56, 24, 45, 70.0 } を宣言
    配列のサイズを int size = sizeof(arr) / sizeof(arr[0]) として求める
    CoefficientOfVariation(arr, size) を呼び出す
終了

C++サンプルコード

#include <bits/stdc++.h>
using namespace std;
// 平均値を計算する関数
float cal_mean(float arr[], int size) {
    float sum = 0;
    for (int i = 0; i < size; i++)
        sum = sum + arr[i];
    return sum / size;
}
// 標準偏差を計算する関数
float StandardDeviation(float arr[], int size) {
    float sum = 0;
    for (int i = 0; i < size; i++)
        sum = sum + (arr[i] - cal_mean(arr, size)) * (arr[i] - cal_mean(arr, size));
    return sqrt(sum / (size - 1));
}
// 変動係数を計算する関数
float CoefficientOfVariation(float arr[], int size) {
    return StandardDeviation(arr, size) / cal_mean(arr, size);
}
int main() {
    float arr[] = { 10.0, 21, 23, 90.0, 10.5, 32.56, 24, 45, 70.0 };
    int size = sizeof(arr) / sizeof(arr[0]);
    cout << "coefficient of variation is : " << CoefficientOfVariation(arr, size);
    return 0;
}

出力結果

coefficient of variation is : 0.75772

コードの解説

このプログラムは、以下の3つの関数で構成されています。

cal_mean関数

配列の全要素を合計し、要素数で割ることで平均値を算出します。

StandardDeviation関数

各要素と平均値の差を2乗して合計し、その値を「要素数 - 1」で割った平方根を標準偏差として返します。分母に n - 1 を用いているため、ここでは不偏標準偏差(標本標準偏差)が計算されます。

CoefficientOfVariation関数

StandardDeviation関数の結果をcal_mean関数の結果で割ることで、変動係数を求めます。

注意点

平均値が0に近い、または0の場合、変動係数が極端に大きな値になったり、ゼロ除算エラーが発生したりするため注意が必要です。また、データに負の値が含まれる場合も、変動係数の解釈には慎重さが求められます。

  1. C++で円錐台の体積と表面積を求めるプログラム

    円錐台とは? 円錐台(えんせいだい)とは、円錐の先端部分を水平に切り落としたことでできる立体のことです。切り口の上底と、元の円錐の下底から構成されます。円錐台の各寸法は以下のように定義されます。 上底の半径:r 下底の半径:R 高さ:h 母線の長さ(斜高):L 問題 母線の長さ、高さ、上底の半径「r」、下底の半径「R」が与えられたとき、円錐台の体積と表面積を計算するのが課題です。 円錐台の体積と表面積は、以下の公式を使って求めることができます。 体積 (V) = 1/3 × π × h × (r² + R² + r×R) 側面積 (CSA) = π × l × (R + r) 表面積 (

  2. C++で学ぶクイックソート(QuickSort)の仕組みと実装方法

    クイックソートとはクイックソート(Quicksort)は、比較に基づいて未ソートのリスト(配列)を並べ替えるソートアルゴリズムの一つです。「パーティション交換ソート(partition exchange sort)」とも呼ばれます。クイックソートは安定ソートではありません。これは、等しい値を持つ要素同士の相対的な順序が保持されないためです。ただし、配列に対してごくわずかな追加メモリだけで動作するため、メモリ効率に優れています。選択ソートと非常に似ていますが、常に最悪のパーティションを選んでしまうわけではない点が異なり、より洗練された形の選択ソートと捉えることもできます。クイックソートは最も効率