<?php
/****************************/
/* ポアソン分布の計算 */
/* coded by Y.Suganuma */
/****************************/
/**************/
/* 階乗の計算 */
/**************/
function fact($n)
{
$x = 1.0;
for ($i1 = 2; $i1 <= $n; $i1++)
$x *= $i1;
return $x;
}
/********************************************/
/* ポアソン分布の計算(P(X = x), P(X < x)) */
/* x : データ */
/* ram : パラメータ */
/* pr : P(X = x) */
/* return : P(X < x) */
/********************************************/
function Poisson($x, $ram, &$pr)
{
$f = 0.0;
$pr = pow($ram, $x) * exp(-$ram) / fact($x);
$f = $pr;
for ($i1 = 0; $i1 < $x; $i1++)
$f += pow($ram, $i1) * exp(-$ram) / fact($i1);
return $f;
}
/********/
/* main */
/********/
printf("λ は? ");
fscanf(STDIN, "%lf", $ram);
printf("グラフ出力?(=1: yes, =0: no) ");
fscanf(STDIN, "%d", $sw);
// 密度関数と分布関数の値
if ($sw == 0) {
printf(" データは? ");
fscanf(STDIN, "%d", $x);
$f = Poisson($x, $ram, $pr);
printf("P(X = %d) = %f, P( X < %d) = %f (λ = %f)\n", $x, $pr, $x, $f, $ram);
}
// グラフ出力
else {
printf(" 密度関数のファイル名は? ");
fscanf(STDIN, "%s", $file1);
printf(" 分布関数のファイル名は? ");
fscanf(STDIN, "%s", $file2);
printf(" データの上限は? ");
fscanf(STDIN, "%d", $up);
$out1 = fopen($file1, "wb");
$out2 = fopen($file2, "wb");
for ($x = 0; $x <= $up; $x++) {
$f = Poisson($x, $ram, $pr);
fwrite($out1, $x." ".$pr."\n");
fwrite($out2, $x." ".$f."\n");
}
}
?>