サイトマップ / C言語講座出入り口総目次目次:数学の関数>ポアッソン分布

青い直線

ポアッソン分布

青い直線

[フェルマーの最終定理]←このソース→[問題解決について]

/* ポアッソン分布

今日はポアッソン分布(Poisson Distribution)を求めます。Poissonとは、フランス語で魚のことですが、ポアッソン分布とは魚の分布のことではありません。ポアッソンは人の名前です。ポアッソン分布とはある出来事が一定時間に平均a回ランダムに起こるとすると、n回起こる確率は幾つかを計算するものです。

ポアッソン分布は現実生活と深く関わっています。例えば、あるスーパーマーケットに、1分間で平均5人の客が来てレジの処理能力が1分間平均1.5人だとすると、適正なレジの数は幾つかをポアッソン分布を求めることである程度予測できます。

なぜ交通渋滞が起こるのかを説明するにも使われます。

ソースプログラムの説明

今日は、1分間に平均で1回起こる現象が、1分間に何回起こるかの確率を求めます。

CalPois( )は、a分間にn回起こる確率(ポアッソン分布)を計算してその値を返します。

exp(-a)は指数を求める標準ライブラリ関数です。pow(a, n)はaのn乗を求める標準ライブラリ関数です。ともに、math.h をインクルードします。

Fact(n)はnの階乗を計算します。再帰呼び出しを行っています。再帰呼び出しにつきましては、ここで詳しく学びます。 */

/* ここからソースプログラム */

#include <stdio.h>
#include <math.h>    /* exp(  )pow(  )で必要 */

double CalPois(double a, double n);
double Fact(double n);
void main(void);

  /* a分間にn回起きる確率(ポアッソン分布)を計算する */
double CalPois(double a, double n)
{
    return (exp(-a) * pow(a, n) / Fact(n));
}

  /* 階乗を計算する */
double Fact(double n)
{
    return((n == 0.0 ) ? 1: n * Fact(n - 1.0));
}

void main(void)
{
    double pois;
    double n;
    double a = 1.0;

    printf("1 分間に平均で1回起きる現象が\n");
    printf("n回\t起きる確率\n\n");

    for (n = 0.0; n <= 10.0; n++) {
        pois = CalPois(a, n);
        printf("%2.0lf\t%10.8lf\n", n, pois);
    }
}

/* ここまでソースプログラム */

/* nが増加するのに伴って、確率が急速に減少することが、良くわかります。 */

[フェルマーの最終定理]←このソース→[問題解決について]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:数学の関数>ポアッソン分布