確率は限りなく低く | spin on the RITZ

確率は限りなく低く

1988年の統計のよれば、同年における10万人あたりの交通事故死亡者数、交通事故死傷者数は次の通りであった。

北海道 東京 大阪 福岡
交通事故死亡者数 9.7 4.0 5.7 7.8
交通事故死傷者数 526.6 508.7 703.8 867.2

各都道府県において、人口10万人の都市を考えるとき、

(1),1年間の交通事故死亡者数が10人未満である確立を求めよ。

(2),1日の交通事故死傷者数が5人未満である確率を求めよ。



交通事故とかの分布は基本的にポアソン分布だったりするので、とりあえずポアソン分布で考えると




な式でもとまります。

つまり、求めたい確立をPとすると、(1)では、



っつーなるわけですよ。これをフツーに計算しても大変なので、コンピュータさんの力をかりることに。

ちなみに(2)も大体同じように解きます。

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

int fact(int i)
{
    if (i == 0 || i == 1)
        return 1;
    return fact(i-1) * i;
}

int main(void)
{
    double lam1[] = {9.7, 4.0, 5.7, 7.8};
    double lam2[] = {526.6, 508.7, 703.8, 867.2};
    char *city[] = {"北海道", "東京", "大阪", "福岡"};
    int i, k;
    double p;

    printf("1年間の交通事故死亡者数が10人未満である確率\n");
    for (i = 0;i < 4;i++) {
        p = 0.0;
        for (k = 0;k < 10;k++)
            p += exp(-lam1[i])*pow(lam1[i], k)/fact(k);
        printf("%-6s : %f\n", city[i], p);
    }

    printf("1日の交通事故死傷者数が5人未満である確率\n");
    for (i = 0;i < 4;i++) {
        lam2[i] /= 365;
        p = 0.0;
        for (k = 0;k < 5;k++)
            p += exp(-lam2[i])*pow(lam2[i], k)/fact(k);
        printf("%-6s : %f\n", city[i], p);
    }

    return 0;
}


出力:

1年間の交通事故死亡者数が10人未満である確率
北海道 : 0.495979
東京   : 0.991868
大阪   : 0.935183
福岡   : 0.741109
1日の交通事故死傷者数が5人未満である確率
北海道 : 0.983992
東京   : 0.985994
大阪   : 0.953591
福岡   : 0.907131



うん、巻末の解答と同じ結果が得られました。バンザイ。

でも、ポアソン分布だと気づかなければ解けません(普通は気づきますが)



ふぅ~、テストに出されたら困るタイプの問題だな。