<?php
/****************************/
/* 一様分布の計算 */
/* coded by Y.Suganuma */
/****************************/
/****************************************/
/* 一様分布の計算(P(X = x), P(X < x)) */
/* x : データ */
/* a,b : 区間 */
/* pr : P(X = x) */
/* return : P(X < x) */
/****************************************/
function uniform($x, $a, $b, &$pr)
{
$f = 0.0;
if ($x < $a) {
$pr = 0.0;
$f = 0.0;
}
else if ($x > $b) {
$pr = 0.0;
$f = 1.0;
}
else {
$y = 1.0 / ($b - $a);
$pr = $y;
$f = $y * ($x - $a);
}
return $f;
}
/********/
/* main */
/********/
printf("下限(a)は? ");
fscanf(STDIN, "%lf", $a);
printf("上限(b)は? ");
fscanf(STDIN, "%lf", $b);
printf("目的とする結果は? \n");
printf(" =0 : 確率の計算( P(X = x) 及び P(X < x) の値)\n");
printf(" =1 : p%値( P(X > u) = 0.01p となるuの値) ");
fscanf(STDIN, "%d", $sw);
if ($sw == 0) {
printf("グラフ出力?(=1: yes, =0: no) ");
fscanf(STDIN, "%d", $sw);
// 密度関数と分布関数の値
if ($sw == 0) {
printf(" データは? ");
fscanf(STDIN, "%lf", $x);
$f = uniform($x, $a, $b, $pr);
printf("P(X = %f) = %f, P( X < %f) = %f (区間 [%f, %f])\n", $x, $pr, $x, $f, $a, $b);
}
// グラフ出力
else {
printf(" 密度関数のファイル名は? ");
fscanf(STDIN, "%s", $file1);
printf(" 分布関数のファイル名は? ");
fscanf(STDIN, "%s", $file2);
$out1 = fopen($file1,"wb");
$out2 = fopen($file2,"wb");
printf(" 刻み幅は? ");
fscanf(STDIN, "%lf", $h);
for ($x = $a; $x < $b+0.5*$h; $x += $h) {
if ($x > $b-0.5*$h && $x < $b+0.5*$h)
$x = $b;
$f = uniform($x, $a, $b, $pr);
fwrite($out1, $x." ".$pr."\n");
fwrite($out2, $x." ".$f."\n");
}
}
}
// %値
else {
printf("%の値は? ");
fscanf(STDIN, "%lf", $x);
$p = 0.01 * $x;
$f = $b - $p * ($b - $a);
printf("%f%値 = %f (区間 [%f, %f])\n", $x, $f, $a, $b);
}
?>