C 言語で分散を計算する

CCBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、C言語で数値の集合の分散を計算する方法を学びます。この実験では、主に3つのステップをカバーしています。つまり、平均を計算すること、平均からの偏差の二乗和を計算すること、そしてその和を数値の個数で割って分散を求めることです。この実験では、C言語でこれらの統計計算を実装するプロセスをガイドするために、詳細なコード例と説明が提供されています。

この実験では、まず数値の集合の平均を計算する方法を示します。これは分散計算における重要なステップです。次に、平均からの偏差の二乗和を計算する方法を示し、最後に、その和を数値の個数で割って分散を求める方法を示します。段階的な指示に従うことで、Cプログラミング言語を使用してこれらの統計演算を実行する方法をしっかりと理解することができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/ControlFlowGroup -.-> c/for_loop("For Loop") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/FunctionsGroup -.-> c/math_functions("Math Functions") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/for_loop -.-> lab-435167{{"C 言語で分散を計算する"}} c/arrays -.-> lab-435167{{"C 言語で分散を計算する"}} c/math_functions -.-> lab-435167{{"C 言語で分散を計算する"}} c/output -.-> lab-435167{{"C 言語で分散を計算する"}} end

平均を計算する

このステップでは、C言語で数値の集合の平均を計算する方法を学びます。平均は、すべての値を合計し、数値の総数で割ることによって計算されます。

まず、平均計算を実装するための新しいCファイルを作成します。

cd ~/project
nano mean.c

次に、平均を計算するために以下のCコードを記述します。

#include <stdio.h>

int main() {
    int numbers[] = {10, 20, 30, 40, 50};
    int count = sizeof(numbers) / sizeof(numbers[0]);
    int sum = 0;

    // Calculate sum of all numbers
    for (int i = 0; i < count; i++) {
        sum += numbers[i];
    }

    // Calculate mean
    float mean = (float)sum / count;

    printf("Numbers: ");
    for (int i = 0; i < count; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\nCount: %d\n", count);
    printf("Sum: %d\n", sum);
    printf("Mean: %.2f\n", mean);

    return 0;
}

プログラムをコンパイルして実行します。

gcc mean.c -o mean
./mean

出力例:

Numbers: 10 20 30 40 50
Count: 5
Sum: 150
Mean: 30.00

コードを分解してみましょう。

  • 整数の配列 numbers を定義します。
  • sizeof() を使用して数値の個数を計算します。
  • for ループを使用してすべての数値の合計を計算します。
  • 合計を個数で割ることによって平均を計算します。
  • 数値、個数、合計、および平均を出力します。

(x - 平均)² の合計を求め、個数で割る

このステップでは、平均からの偏差の二乗和を計算し、数値の個数で割ることによって分散を計算する方法を学びます。

まず、前の mean.c ファイルを変更して分散計算を含めます。

cd ~/project
nano variance.c

分散を計算するために以下のCコードを記述します。

#include <stdio.h>
#include <math.h>

int main() {
    int numbers[] = {10, 20, 30, 40, 50};
    int count = sizeof(numbers) / sizeof(numbers[0]);
    int sum = 0;
    float mean, variance = 0.0;

    // Calculate sum and mean
    for (int i = 0; i < count; i++) {
        sum += numbers[i];
    }
    mean = (float)sum / count;

    // Calculate sum of squared deviations
    for (int i = 0; i < count; i++) {
        variance += pow(numbers[i] - mean, 2);
    }

    // Divide by count to get variance
    variance /= count;

    printf("Numbers: ");
    for (int i = 0; i < count; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\nMean: %.2f\n", mean);
    printf("Variance: %.2f\n", variance);

    return 0;
}

数学ライブラリを使用してプログラムをコンパイルして実行します。

gcc variance.c -o variance -lm
./variance

出力例:

Numbers: 10 20 30 40 50
Mean: 30.00
Variance: 200.00

分散計算の主要なステップ:

  • 平均を計算する(前のステップから)
  • 各数値から平均を引く
  • 差を二乗する
  • 二乗した差を合計する
  • 数値の個数で割る

分散を出力する

このステップでは、異なる精度レベルで分散の計算結果を書式設定して出力する方法を学び、コードをよりモジュール化するための関数を作成します。

前の variance.c ファイルを変更して、分散の出力を改善します。

cd ~/project
nano variance_print.c

分散の出力を強化するために、以下のCコードを記述します。

#include <stdio.h>
#include <math.h>

// Function to calculate variance
float calculate_variance(int numbers[], int count) {
    int sum = 0;
    float mean, variance = 0.0;

    // Calculate sum and mean
    for (int i = 0; i < count; i++) {
        sum += numbers[i];
    }
    mean = (float)sum / count;

    // Calculate sum of squared deviations
    for (int i = 0; i < count; i++) {
        variance += pow(numbers[i] - mean, 2);
    }

    // Divide by count to get variance
    variance /= count;

    return variance;
}

// Function to print variance with different formats
void print_variance(float variance) {
    printf("Variance Representations:\n");
    printf("1. Standard Format:   %.2f\n", variance);
    printf("2. Scientific Notation: %e\n", variance);
    printf("3. Precise Format:    %.4f\n", variance);
}

int main() {
    int numbers[] = {10, 20, 30, 40, 50};
    int count = sizeof(numbers) / sizeof(numbers[0]);

    // Calculate and print variance
    float variance = calculate_variance(numbers, count);

    printf("Original Numbers: ");
    for (int i = 0; i < count; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n\n");

    print_variance(variance);

    return 0;
}

プログラムをコンパイルして実行します。

gcc variance_print.c -o variance_print -lm
./variance_print

出力例:

Original Numbers: 10 20 30 40 50

Variance Representations:
1. Standard Format:   200.00
2. Scientific Notation: 2.000000e+02
3. Precise Format:    200.0000

主な改善点:

  • 分散の計算用に別々の関数を作成しました。
  • 複数の分散の出力形式を追加しました。
  • 分散を表すさまざまな方法を示しました。

まとめ

この実験では、C言語で数値の集合の平均を計算する方法を学びました。すべての値を合計し、数値の総数で割ることで平均を求めます。次に、平均からの偏差の二乗和を計算し、数値の個数で割ることによって分散を計算する方法を学びました。これにより、平均を中心としたデータの広がりや分散を測定することができ、これは統計分析において有用な指標です。