C 言語でポアソン分布の確率を計算する

CBeginner
オンラインで実践に進む

はじめに

この実験では、C 言語でポアソン確率を計算する方法を学びます。ポアソン分布は、特定の時間間隔または空間における特定のイベント発生の確率を表す確率分布です。まず、ラムダ (λ) パラメータと k 値を読み取り、次にポアソン確率の公式を実装して、特定の間隔で正確に k 個のイベントが発生する確率を計算します。

この実験では、ユーザー入力の処理、ポアソン確率の公式の実装、計算された確率の出力など、ポアソン確率を計算するための C プログラムの作成手順を段階的に説明します。

λ (ラムダ) と k の読み込み

このステップでは、C 言語でポアソン確率を計算するために、ラムダ (λ) パラメータと k 値を読み込む方法を学びます。ポアソン分布は、特定の時間間隔または空間における特定のイベント発生の確率を表す確率分布です。

まず、ポアソン確率計算を実装するための新しい C ファイルを作成しましょう。

cd ~/project
nano poisson_prob.c

次に、ラムダと k 値を読み込むための以下のコードを追加します。

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

int main() {
    double lambda;
    int k;

    printf("Enter lambda (average number of events): ");
    scanf("%lf", &lambda);

    printf("Enter k (number of occurrences): ");
    scanf("%d", &k);

    printf("Lambda (λ): %.2f\n", lambda);
    printf("k: %d\n", k);

    return 0;
}

出力例:

Enter lambda (average number of events): 3.5
Enter k (number of occurrences): 2
Lambda (λ): 3.50
k: 2

コードを詳しく見てみましょう。

  • ラムダには小数点を含む値を扱えるようにdoubleを使用しています。
  • scanf()を使用して、ユーザーからラムダと k の入力を読み込んでいます。
  • %lfは double(long float) 値のフォーマット指定子です。
  • %dは整数値のフォーマット指定子です。
  • 入力された値を出力して、入力が正しく行われたことを確認しています。

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

gcc -o poisson_prob poisson_prob.c -lm

プログラムを実行します。

./poisson_prob

P(X=k)=e^(-λ)*λ^k/k!

このステップでは、与えられた時間間隔で正確に k 個のイベントが発生する確率を計算するために、ポアソン確率の公式を実装します。

以前のファイルを開いてコードを修正します。

cd ~/project
nano poisson_prob.c

ポアソン確率計算を含めるようにコードを更新します。

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

// 階乗を計算する関数
double factorial(int n) {
    if (n <= 1) return 1;
    double result = 1;
    for (int i = 2; i <= n; i++) {
        result *= i;
    }
    return result;
}

// ポアソン確率を計算する関数
double poisson_probability(double lambda, int k) {
    double numerator = pow(lambda, k) * exp(-lambda);
    double denominator = factorial(k);
    return numerator / denominator;
}

int main() {
    double lambda;
    int k;

    printf("Enter lambda (average number of events): ");
    scanf("%lf", &lambda);

    printf("Enter k (number of occurrences): ");
    scanf("%d", &k);

    double probability = poisson_probability(lambda, k);

    printf("Lambda (λ): %.2f\n", lambda);
    printf("k: %d\n", k);
    printf("確率 P(X = %d): %.4f\n", k, probability);

    return 0;
}

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

gcc -o poisson_prob poisson_prob.c -lm

出力例:

Enter lambda (average number of events): 3.5
Enter k (number of occurrences): 2
Lambda (λ): 3.50
k: 2
確率 P(X = 2): 0.1674

コードのポイント:

  • factorial()関数は k! を計算します。
  • poisson_probability()関数はポアソン確率の公式を実装します。
  • pow()関数はλ^k を計算します。
  • exp()関数は e^(-λ) を計算します。
  • 結果は、正確に k 個のイベントが発生する確率です。

プログラムを実行します。

./poisson_prob

確率の表示

この最終ステップでは、より詳細な確率表示とフォーマットを追加することで、ポアソン確率計算プログラムを強化します。

以前のファイルを開いてコードを修正します。

cd ~/project
nano poisson_prob.c

確率の表示を改善するようにコードを更新します。

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

// 階乗を計算する関数
double factorial(int n) {
    if (n <= 1) return 1;
    double result = 1;
    for (int i = 2; i <= n; i++) {
        result *= i;
    }
    return result;
}

// ポアソン確率を計算する関数
double poisson_probability(double lambda, int k) {
    double numerator = pow(lambda, k) * exp(-lambda);
    double denominator = factorial(k);
    return numerator / denominator;
}

int main() {
    double lambda;
    int k;

    printf("ポアソン確率計算機\n");
    printf("-------------------\n");

    printf("Enter lambda (平均イベント数): ");
    scanf("%lf", &lambda);

    printf("Enter k (発生回数): ");
    scanf("%d", &k);

    double probability = poisson_probability(lambda, k);

    printf("\n計算結果:\n");
    printf("Lambda (λ): %.2f\n", lambda);
    printf("k: %d\n", k);
    printf("確率 P(X = %d): %.4f\n", k, probability);
    printf("割合:%.2f%%\n", probability * 100);

    return 0;
}

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

gcc -o poisson_prob poisson_prob.c -lm

出力例:

ポアソン確率計算機
-------------------
Enter lambda (平均イベント数): 3.5
Enter k (発生回数): 2

計算結果:
Lambda (λ): 3.50
k: 2
確率 P(X = 2): 0.1674
割合: 16.74%

主な改善点:

  • 計算機のタイトルを追加しました。
  • 割合の表示を追加しました。
  • 出力のフォーマットを改善しました。
  • より説明的な出力セクションを追加しました。

プログラムを実行します。

./poisson_prob

まとめ

この実験では、C 言語でポアソン確率を計算するために必要なλ(λ) パラメータと k 値を読み取る方法を学びました。次に、与えられた時間間隔で正確に k 個のイベントが発生する確率を計算するために、ポアソン確率の公式を実装しました。ポアソン分布は、固定された時間間隔または空間における特定の数のイベントが発生する可能性を表す確率分布です。また、ポアソン確率計算をサポートするために階乗関数を作成する方法も学びました。

この実験で扱った主な手順には、入力値の読み取り、公式 P(X=k)=e^(-λ)*λ^k/k! を使用したポアソン確率の計算、そして結果の確率の表示が含まれます。